视频直播视频缓存
【摘要】 试想一下,当你和朋友进行视频时,这时突然画面卡住不动了,而且声音变得断断续续,是不是会感到特别的尴尬?为了避免这些情况,那么在直播app开发过程中,针对于延迟,在技术上能对哪些方面进行优化呢?下面拓幻科技就来简单介绍下。一、编码优化首先,确保Codec开启了最低延迟的设置。Codec一般都会有低延迟优化的开关,对于H.264来说其效果尤其明显。另外,编码器一般都会有码控造成的延...
试想一下,当你和朋友进行视频时,这时突然画面卡住不动了,而且声音变得断断续续,是不是会感到特别的尴尬?为了避免这些情况,那么在直播app开发过程中,针对于延迟,在技术上能对哪些方面进行优化呢?下面拓幻科技就来简单介绍下。
一、编码优化
首先,确保Codec开启了最低延迟的设置。Codec一般都会有低延迟优化的开关,对于H.264来说其效果尤其明显。另外,编码器一般都会有码控造成的延迟,把它当成编码器和解码器比特流之间的缓存,在不影响视频质量的情况下,将其设置得尽可能小也可以降低延迟。还有,最好不要使用视频MJPEG的视频压缩格式,至少使用不带B帧的MPEG4视频压缩格式,最好使用H.264baseline profile这样一个简单的优化。这样一个简单的优化可以降低延迟,因为它能够以更低的码率编码全帧率视频。
二、传输协议优化
在服务端节点和节点之间尽量使用RTMP而非HLS协议进行传输,这样可以降低整体的传输延迟。如果终端用户使用RTMP来播放,尽量在靠近推流端的收流节点进行转码,这样传输的视频流要比原始视频流更小。此外,如果有必要,可以使用定制的 UDP 协议来替换 TCP 协议,省去弱网环节下的丢包重传可以降低延迟。
三、传输网络优化
在服务器节点中缓存当前GOP,配合播放端优化视频首开时间。还可以让服务端实时记录每个视频流流向每个环节时的秒级帧率和码率,用于实时监控码率和帧率的波动,然后针对此情况进行调节即可。
四、推流、播放优化
播放端缓存控制对于视频的首开延迟也有较大影响,如果仅优化首开延迟,可以在0缓存情况下在数据到达的时候立即解码。但如果在弱网环境下为了消除网络抖动造成的影响,设置一定的缓存也有必要,因此需要在直播的稳定性和首开延迟优化上找到平衡,调整优化缓冲区大小这个值。除了动态调整 buffer大小的策略之外,也可以利用实时监测的网络信息来动态调整播放过程中的码率,在网络带宽不足的情况下降低码率进行播放,减少延迟。
以上就是在直播app开发中,针对延迟方面,在技术层面所能做的优化。
视频云播放器秒开和播放流畅度优化
一、概述
目前,移动视频直播正处于一个高速膨胀的时期。游戏直播,秀场直播等APP铺天盖地。如何在千军万马中脱颖而出,直播的实时性和流畅性是重中之重。
直播的实时性对于用户体验非常重要,主要体现在两个方面:秒开和延时。秒开是指用户点击播放到看到画面的时间非常短,在1秒之内;延时是指播放端的画面和主播端的画面的时间差,时间差越小,实时性越好,体验越佳。
保证直播的流畅性是指在直播过程中保证播放不发生卡顿,卡顿是指在播放过程中声音和画面出现停滞,非常影响用户体验。造成卡顿的原因有几种情况:(1)推流端网络抖动导致数据无法发送到服务器,造成播放端卡顿;
(2)播放端网络抖动导致数据累积在服务器上拉不下来,造成播放卡顿。
由于从服务器到播放器的网络情况复杂,尤其是在3G和带宽较差的WIFI
环境下,抖动和延迟经常发生,导致播放不流畅,播放不流畅带来的负面影响就是延时增大。如何在网络抖动的情况下保证播放的流畅性和实时性是保障直播性能的难点。针对上述提到的问题,下面会一一讨论。
二、播放器秒开
目前市面上有些APP点击播放后画面出现非常快,有些则需要等较长的时
间。画面出现的越快,体验越好。那么怎样才能做到呢?
图1所示为一个简单的直播流程,推流端将音视频数据推送到服务器端,播放端从服务器端拉取音视频数据进行播放。秒开主要可以从以下两个方面进行优化:
(1)优化服务器策略
播放器接入服务器请求数据的时间点的视频帧不一定是关键帧,那么需要等到下一个关键帧的到来,如果关键帧的周期是2s的话,那么等待的时间可能会在0~2s的范围内,这段等待的时间会影响首屏的加载时间。如果服务器有缓存,则播放端在接入的时候,服务器可以向前找最近的关键帧发给播放端,这样就可以省去等待的时间,可以大大的减少首屏的加载时间。
(2)优化播放端策略
播放端请求到的第一帧数据肯定是关键帧,关键帧能够通过帧内参考进行解
码。这样播放端就可以在接收到第一个关键帧的时候就立即开始解码显示,而不需要等到缓存一定数量的视频帧才开始解码,这样也能减少首屏画面显示的时间。
图1 直播流程
三、流畅度优化
由上文可知,视频在播放的过程中不发生卡顿,则流畅度越好,体验越佳。
目前主流的直播协议是RTMP、HTTP-FLV和HLS,都是基于TCP的长连接。在播放的过程中,若播放端所处的网络环境在一个较佳的状态,此时播放会很流畅。若网络环境不是很稳定,经常会发生抖动,如果播放端没有做特殊处理,可能会经常发生卡顿,严重的甚至会出现黑屏。而移动直播由于其便捷性,用户可以随时随地发起和观看直播,我们无法保证用户的网络一直处于一个非常好的状态,所以,在网络不稳定的情况下保证播放的流畅度是非常重要的。
为了解决这个问题,首先播放器需要将拉流线程和解码线程分开,并建立一个缓冲队列用于缓冲音视频数据。拉流线程将从服务器上获取到的音视频流放入队列,解码线程从队列中获取音视频数据进行解码播放,队列的长度可以调整。当网络发生抖动时,播放器无法从服务器上获取到数据或获取数据的速度较慢,此时队列中缓存的数据可以起到一个过渡的作用,让用户感觉不到网络发生了抖动。
当然这是对于网络发生抖动的情况所采取的策略,如果播放端的网络迟迟不能恢复或者服务器的边缘结点出现宕机,则需要应用层进行重连或调度。
转载于:https://my.oschina.net/u/2944053/blog/760393