Asterisk媒体处理分析.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Asterisk媒体处理分析

Asterisk媒体处理分析1 媒体转换过程以下讲媒体转换有两种方式除外:两端编码方式一致如两端语音编码都是g729;一端是g711a,另一端是g711u时Asterisk媒体处理过程与业务无关,是一个统一的过程,处理对象有RTP和File,不管外界RTP或File输入格式如何,进入Asterisk后默认转换为signed linear格式,从Asterisk输出(发送或写文件)时再从slinear格式转换为外界RTP或File格式(细节参见RTP Translate):上图分为四个方向1. RTP to RTP(正常通话流程)2. RTP to File(录音流程)3. File to RTP(放音流程)4. File to File(文件格式转换流程)复杂业务的媒体处理可以分解为以上四个方向处理流程,复杂业务可能包含其中几种流程,每个业务的媒体处理可以用下图表示:1设置channel媒体转换路径(如g723=gsm)2 源媒体转换为slinear格式(如g723=slinear)4 Slinear转换为目的格式(如slinear=gsm)3 媒体处理(如混音)5 发送/写文件1. 设置转换路径,即设置源媒体格式与目的媒体格式;2. 把输入媒体格式进行转换为slinear,如果输入媒体为slinear可省略本步骤;3. 媒体处理,如混音等,一般可以省略;4. 把slinear格式媒体转换为目的媒体格式,如果目的媒体格式为slinear可省略本步骤;5. 把转换后的媒体打包发送或写到本地文件。1.1 RTP to RTP RTP to RTP适用于正常通话流程。Channel收到RTP包时经过分析可以得到媒体格式,每个channel保存读和写的媒体格式信息,读RTP时使用步骤1和2,发送RTP时使用步骤4和5,channel的结构参见媒体转换相关结构,channel里保存媒体转换信息结构ast_trans_pvt和文件流描述结构ast_filestream(见文件流)。下图为一个正常通话的编码转换过程,通话一端适用ilbc编码另一端使用gsm编码:从上图看出,通话两端的语音编码进入asterisk后都转换为asterisk内部编码slinear后,发送时再被转换为目的语音编码。下图说明一端使用g711a,另一端使用g711u时不需要转换为asterisk内部编码slinear,而是alaw和ulaw两种编码直接进行转换:1.2 RTP to File RTP to File适用录音流程,包含步骤1、2、4、5。例:g729.cap语音还原为gsm格式文件过程:1.3 File to RTP File to RTP适用于放音流程,与RTP to File流程一样也包含步骤1、2、4、5。1.4 File to File File to File适用于文件格式转换,与RTP to File/File to RTP一样也包含步骤1、2、4、5。具体实例可参见附录。1.5 混合流程混合流程用到以上四个流程中的某几个复杂的业务有可能是混合流程,如Voicemail包含File to RTP和RTP to File流程,具体参见voicemail函数调用过程。2 RTP处理2.1 RTP init在创建sip_channel时,rtpfd同时被创建并加进channel的fds,通过poll进行监控。sip_new - tmp-fds[0] = ast_rtp_fd(i-rtp); 2.2 RTP Read Poll监控到rtpfd有读事件时进行read;ast_rtp_read中进行RTP解包;读RTP过程中会调用ast_translate函数进行媒体转换,一般转换为slinear格式。具体函数调用过程如下:wait_for_answer - ast_waitfor_n(watchers, pos, to); - ast_waitfor_nandfds - poll - f = ast_read(winner) - structast_frame *ast_read(structast_channel *chan) - static structast_frame *__ast_read(structast_channel *chan, intdropaudio) - f = chan-tech-read(chan)即static structast_frame *sip_read(structast_channel*ast) / ast_translate - static structast_frame *sip_rtp_read(structast_channel *ast, structsi

文档评论(0)

676200 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档