媒体对接关系着通话质量的问题,很多时候出现会议连接建立之后黑屏,或者入会之后被挂断,多是媒体对接造成的。下面就以h264格式为例来说一下媒体在对接中的问题。
媒体格式 分辨率帧率
在sdp的profile-level中,写明了h264的类别,中间两位为42表示baseline,为66表示highprofile,这个是比较直观的。
sdp中有点类似于参数重载,如果对某一参数有特别说明,就用说明的值,否则就用默认值,听起来像废话,但很重要。以max-fs为例,若过sdp中没有max-fs,该payload type帧率就用profile-level-id中对应的级别中的max-fs,否则就用sdp中的max-fs。max-fs是和分辨率相关的,代表了所支持的分辨率,一般来说,符合关系式:
分辨率/256<=max-fs
才代表具有该分辨率的支持能力。
现在视频高清能力通常需要授权才能得到,对接时一定要注意sdp中分辨率的能力,往不支持高清能力的设备上发送高清视频,一般会黑屏。
帧率一般符合关系
帧率=max-bps/max-fs
如果出现延迟,需要检查一下这个参数。
QOS
QOS是一个复杂的问题,我们可以采用一些简单的策略来满足一定的通话质量。
- 缓存 udp在传输中不可避免会有乱序,使用缓存队列来纠正乱序包,循环列表是一个比较好的方案,不会引入多线程锁。
- 多slice 视频编码尽量使用多slice,减小零星丢包对视频效果的影响。
- 重传请求 使用rtcp来建立丢包重传,这是比较简便的,但是这种方式需要缓存一些数据,带来延迟,而且使用了丢包率也需要重新计算。
- svc 利用带宽换时间的一种方案,视场景而用。
I帧请求
有些视频发送I帧在请求的时候才会发送,请求I帧时有sip和rtcp两种方式,建议尽量使用rtcp,主要因为:
- 带宽 rtcp协议占用的带宽比用sip更小,尤其是在网络带宽紧张的时候,缓解的资源还是可观的。
- 某些IM系统可能不会转发sip的info消息,无法请求到关键帧。
- sip消息往往要经过多级节点,消息有一定的延迟。
rtp通道
在一个会议未结束前,尽量不要关闭rtp通道,尤其是在结束演示流的时候。有些网络的防火墙在重新连接时会重新映射端口,每次开启会重新映射端口,而如果另一端如果未关闭端口,此时重新打洞是不通的。因为防火墙两端的设备所使用的数据传输路径已经不一致了。