8.媒体

SIP信令, 帮我们建立会话, 但我们建立通话的目的是”通话”

要通过采样, 量化, 编码将我们声音的模块量变成数字信号,

以便在数字线路上传输, 我们把这些数字信号成为媒体(Media)

1.媒体与媒体处理

常见媒体有音频, 视频, 图像, 文本等,

1) 音频编码

    从模拟信号变成数字信号的过程成为模数转换(AD)

        经过采样,量化,编码三个过程

        编码:

            按照一定的规则将采样的信号用一组二进制或其他进制的数表示

        经过编码的数据在网络上传输,到达对端后

    通过解码,变成原始信号

        再经过数模转换(DA),转换为人们能感知的信号

    编码, 解码都是成对出现,所以习惯是称为编解码Codec,为了方便,简称编码



    PCM编码

        PCM的两种压缩方式A律和u律,分别为PCMA和PCMU

        经过PCM编码仍然占用比较高的带宽,又出现了一些更高级的压缩算法,目的都是降低带宽,提高传输效率

        CPM采样频率为8000Hz,随着人们对声音质量要求的提高,各种高清(HD)编码纷纷涌现,如G.722等

    打包

        在网络上传输语音,要将编码后的语音数据打包,通常打包时间间隔为20ms,

        如果采样频率是8000Hz,1s传输1000ms/20ms= 50个包,

        每个包携带8000/50=160个采样数据,

        在PCMU和PCMA中一个采样数据占1字节,因此一个20ms的PCM包数据净荷是160字节

    Freeswitch支持的语音编码

        G.711: PCM

        G.722: 高清语音

        G.726

        G.723.1

        G.729: 低带宽8kbit/s

        GSM: 13.3kbit/s

        iLBC: 抗丢包,绝大多数情况下都是最佳选择

        iSAC

        CODEC2: 2550bit/s, 最省带宽

        Speex

        SILK: skype,抗丢包

        CELT: 低延迟高清编码, 48kbit/s,达到CD音质

        OPUS: 综合CELT和SILK之长

    编码格式

        名词@xx@yyi,h代表Hz采样频率;i代表ptime,打包间隔;xx,yy代表实际数值

        如speex@16000h@20i

            16000Hz,20ms的Speex编码

    查看Freeswitch支持的编码类型

        show codec

    音频编码最基本的两个技术参数就是采样频率和打包周期

        采样频率越高,声音越清晰,通常8000Hz就够了

        打包周期越短,延迟越小,传输开销就越大,需要更大带宽,最常见的是20ms

2) 媒体工作机理和相关配置

    工作原理

        以PCM音频数据为例, 打包周期是20ms,音频包得到160字节的数据,

        加上12字节的RTP包头,就成了一个RTP包,RTP包头包含音频编码类型,时间戳等,便于对方解码回放及同步等

        RTP使用与SIP不同的UDP端口传送,在实际传输前需要通过SIP信令与对方协商往哪个端口传送

        A: 你好,我的RTP端口是10000

        B: 收到,我的RTP端口是20000

        A音频打包,通过RTP发送到B20000端口

        B音频打包,通过RTP发送到A10000端口

    相关配置

        SIP Profile支持的媒体列表是在vars.xml配置

            <X-PRE-PROCESS cmd="set" data="global_codec_prefs=G722,PCMU,PCMA,GSM"/>

            <X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=PCMU,PCMA,GSM"/>

        如果学习过程中需要频繁实验,不妨直接修改Profile配置文件

            <param name="inbound-codc-prefs" value="$${global_codec_prefs}"/>

            改为

            <param name="inbound-codc-prefs" value="PCMU,PCMA,G729,iLBC,H264,VP8"/>

            然后在控制台执行命令

                sofia profile internal rescan

2.媒体协商

不同的SIP终端进行通信时需要先与支持的编码进行"协商",以便双方能互相理解,对方发来的数据

1) 协商过程

    SIP客户端呼入时使用iLBC编码,打包周期是60ms,而服务器端提供G722,PCMU等,但都是20ms

    Freeswitch与客户端提供的编码逐一比较,发现没有交集,协商失败,返回488,INCOMPATIBLE_DESTINATION(目的地不兼容)

    Offer/Answer机制

        请求发起方提供自己支持的媒体编码列表,被请求方比较自己支持的媒体列表最终选择一种应答

    Set Codec sofia/internal/1006@192.168.7.6 PCMA/8000 20ms 160 samples 64000

        本次协商成功,把Channel编码设为PCMA编码

2) SDP及其在编码协商中的作用

    SDP(会话描述协议),说明Freeswitch使用PCMA编码,RTP端口号是28512

    协商完毕

        双方都知道对方的IP地址和端口号,就可以互发音频RTP包了

3) 协商时机与策略

    协商时机

        早协商

            当呼叫到达一个SIP Profile时,某端口收到INVITE请求而未到达路由阶段,就先行协商

        晚协商

            等到路由阶段,到达拨号计划时再行协商,默认使用晚协商

        设置为早协商,修改SIP Profile

            <param name="inbound-late-negotiation" value="false"/>

            如果启动inbound-zrtp-passthru,则隐含设置inbound-late-negotiation为true

    协商策略

        generous(普通),默认策略

            客户端提供PCMA,G729,而Freeswitch支持列表优先顺序为G729,PCMU,PCMA

            当Freeswitch收到请求时优先考虑客户端感受,优先使用PCMA

        greedy(贪婪)

            Freeswitch优先考虑自己的编码,选择G729

        scrooge(吝啬)

            除了具有greedy特征外,还强制使用自己的采样率

3.其他媒体相关的问题

1) RTP和RTCP

    在完成SIP及SDP协商后,真正的语音数据在RTP协议中传送,

        即双方在前面的SDP协商中已经获得对方的IP,端口号,以及支持的媒体类型.

    RTP,实时传输协议

        说明了在互联网上传递音频和视频的标准数据包格式,一开始被设计为一个多播协议,后来被用于单播应用

        建立在UDP协议上,常用于流媒体,视频会议和一键通

    RTCP,实时传输控制协议

        RTP使用偶数UDP端口

        RTCP使用下一个相邻的技术端口,RTCP本身不传输数据,但会和RTP协作将多媒体数据打包并发送出去

        RTCP主要功能是为RTP提供的服务的质量提供反馈信息

            收集统计信息,如传输字节数,丢失分组数,单向延迟等

            网络应用利用RTCP统计信息控制传输的品质,当网络阻塞时,限制流量或改用压缩率高的编码

2) 转码

    如果两条腿分别使用不同的编码,则需要经过一个转码过程,分别转成对方需要的编码

    呼叫双方采用同样的编码,但如果有IVR或录音,放音等中间环节时,也需要转码

    Freeswitch默认的配置不支持自动转码

        A呼叫B

        A只有PCMA, B只支持PCMU

        协商失败

        要使协商成功,只需在internal Profile将下面一行注释

            <param name="inbound-zrtp-passthru" value="true"/>

        查看重启前后该配置的区别

            sofia status profile internal

        由于A提供PCMA,Freeswitch向B发送SDP的时候,把PCMA放在最前面,

        B收到INVITE后,它仅支持PCMU,它通过200 告诉Freeswitch

        接通后, A向Freeswitch发送PCMA编码的RTP媒体流,Freeswitch自动转换为PCMU,并发给B



3) 透传, 媒体绕过与媒体代理

    Freeswitch不支持G729, 只要通话双方都支持G729,仍可以建立通话

    第一种方式是透传

        在不经过转码的情况下,将从乙方收到的媒体流原样转给另一方

    媒体绕过

        真正的媒体流使用点到点传输, 不经过Freeswitch

        Freeswitch正常建立通话,RTP通过点对点直接传输

4) Media Bug

    为了解决监听和录音问题,Freeswitch在媒体流路径上放了一个Media Bug

    相当于水管上的三通

        媒体流不仅在A于B交换,还通过三通连接到C

    录音也是通过这种机制实现

        C相当于录音机

5) 视频

    Freeswitch也支持视频呼叫和会议, 所有的视频流都是透传, Freeswitch不支持视频转码

    必须保证两端都使用相同的视频编码才可以互看

6) 排错

    媒体协商问题

        打电话在Log查找与"Audio Codec Compare"相关行

    也可以使用外部的抓包工具(tcpdump或Wireshark)来抓包分析

    Freeswitch也提供了一个实用工具,uuid_debug_media,可以比较方便的查看是否有媒体流的收发

        uuid_debug_media 68c65988-ddfb-11e6-8d22-0fcaa3ca5f35 read on/off

4.小结

音视频编码, SDP及RTP

Freeswitch对媒体处理的方法, 协商机制

使用late-negotiatioin, disable-transcoding尽量避免转码,节省系统资源

设置BypassMedia, 让媒体不经过Freeswitch直接在两个SIP客户间点对点传输

来源张永光的博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值