七牛直播收获分享
七牛直播培训收获分享
本次培训主要内容为iOS_SDK使用详解,在此不对iOS_SDK使用进行过多赘述.以下是非iOS_SDK使用的的一些技术收获.
如何保证直播流畅度?
保证直播流畅度主要是从保证推流端推流流畅来看.
推流端:
什么会影响推流端的流畅度影响呢?除了硬件设备以及相应的参数设置最主要的也就是网络,即弱网.
如何检测当前网络是弱网?
慢启动:
慢启动是一种TCP拥塞控制机制.慢启动算法的基本思想是当TCP开始在一个网络中传输数据或发现数据丢失并开始重发时,首先慢慢的对网路实际容量进行试探,避免由于发送了过量的数据而导致阻塞。主机发送了一个报文后就要停下来等待应答,每收到一个应答,拥塞窗口就增加一段长度,直至等于设定的阈值。 (百度的)
通过慢启动我们就可以得知当前环境是否是弱网环境,在明确当前网络环境是弱网环境后,就可以做一些相应的处理.
弱网丢帧策略
弱网丢帧策略即时候当在弱网环境下,推流端会自动丢失视频帧,将丢失处理后的视频推流出去,值得注意的是这里的丢帧不会是随意丢帧,而是通过有规律的选择性丢帧,目的是为了保证丢帧后的视频依旧有一定的连续性.这样就对推流端在弱网环境下的推流状态进行了流畅性的优化.
弱网动态码率调节
弱网动态码率调节是指在弱网环境下,推流端会自动调节码率,例:在初始设置码率为500+时,并且开启码率动态调节,推流端会在网络环境不好的时候动态降低码率,比如降到200+.这样会减少视频流所占用的带宽,从而对流畅性进行优化.
如何保证直播低延时?
在一个完整的直播过程中会存在多种延时,主要是编码解码延时,网络延时,以及延时积累.
编码解码延时
编码解码存在两种方式,分别是软编软解,硬编硬解,在次其中硬编硬解可以很好的释放cpu的使用率,从而降低编码解码这方面的延时.正式如此,在iPhone设备上使用硬编硬解,在安卓设备上也会有编码解码方式的选择.
网络延时
针对于网络延时首先是采用rtmp协议,该协议的低延时是解决网络延时的一大助力,其次是线路的调度,liveNet中的智能调度,智能路由,智能QoS可以使推流端获得到最优的推流路线,从而减少不必要的延时.
播放端的动态追帧解决延时积累
延时的积累是有网络抖动,网络丢包,网络延时的延时和,随着直播时间的延续,延时的积累值也会很大,如果不对其进行处理,也会产生极大的延时,因此在播放端实现了动态追帧,动态追帧的实现原理是,在播放端设置一个视频buffer,当buffer存满时,播放端会自动清除buffer总的视频信息,添加最新的视频信息,这样就保证了播放端的延时不会随着时间的延续黑积累.
连麦
连麦是直播场景中不可或缺的功能,极大的增加了直播的互动性,因此也需要保证连麦时的实时性.
低延时
连麦的一大需求就是低延时,那么如何实现低延时呢?在传统的单人直播中采用TCP协议是因为,tcp了以保证数据的可靠性,但是伴随其的缺点就是增大了延时,因此在连麦中,并没有采用tcp协议,而是udp协议.虽然udp存在着丢包的风险,但是却带来了体验良好的低延时性.
合流方案
按照常规的方式可以采用服务器合流的方式,但是会有其弊端,因此还有就是推流端合流.
服务器端合流
正如其名,在服务器上合流,但是带来的弊端就是延迟大,服务器压力大,成本大,因此在七牛的合流实现上没有有采用服务器合流,而是采用推流端合流.
推流端合流
客户端合流即,在连麦过程中其中的一个连麦设备负责将自己的流以及其他路流进行合流编码并退出,这样可以减轻服务器的压力,也适当的减少了延时,但是这也会造成合流端耗电快,发热严重的后果.
补充:回声消除
在连麦过程中会存在一种现象就是,播放出的流会再次录入麦克风,因此在连麦时,连麦SDK会进行回声消除处理,即,在输出时会记录相应数据,当麦克风录入时,会对这部分数据进行抵消,因此也就消除了回声.