科普 | 视频直播的GoP Size设置成多少合适?

科普 | 视频直播的GoP Size设置成多少合适?_第1张图片

在视频直播中,首屏打开速度直接关系到用户体验,其中Group of Picture(GoP)设置、缓存参数优化格外关键。

出现黑屏的原因很简单,就是解码器没有得到能解码出视频图像的数据,那么导致这个问题的原因就很容易定位了:比较搞笑一点的说法就是你家的网络比较慢;视频直播服务器没有打开关键帧缓冲。

确实是这样。瞬间得到的数据正好是个I帧。就可以达到秒开的效果。

对于H.264来讲,我们常见的有I帧,P帧,和B帧。IDR帧是I帧,但I帧并不一定是IDR帧。直播延迟好的编解码策略。

视频解码器缓冲区开始的第一个帧肯定是I帧,这个毋庸置疑。

一般来讲,对于手机直播,一到两秒可能是比较合适的,因为它本身的GoP时间也不会很长,我这边缓冲,一旦出现问题大概一到两秒这个视频也能出来。有一个不太好的地方就是它码率会稍微高一些,也就说同样的东西,如果我把GoP改成十秒,我可能是500K,但是我改成一秒,有可能变成一个六七百K的样子,这个还是跟编码有关系,具体的比例是多少,可能跟实际相关。

另外如果是点播的话,不关心首屏打开时间,只要是客户端下来速度快,CDN给力,那么我可能要求更小的范围。告诉大家一个实践过程中得出的结果,大家用过OBS?

比如说做主播的话,大家用OBS会比较多,OBS它有一个问题就是它默认的话,如果你不调它的特性,GoP就是10秒,10秒的意思就是说GoP size。如果比较点背的话,看的是10秒之前的,如果是比较大的话,它的码率,码流的大小会小点,但是延迟会稍微高一些,CDN开了几个cache,有些情况下,我们也可以做些转码,强行把它的GoP size压小,整个CDN层面上加一个转码的话,它可能会增高这个延迟,这块一个开放性问题,大家可以根据自己的场景去思考,这个GoP Size配成多大比较合适。

FFmpeg的数据结构里会标着PTS和DTS:PTS,PresentationTime Stamp也就说这个帧什么时候会放在显示器上;DTS就是Decode Time Stamp,就是说这个帧什么时候被放在编码器去解。那么如果全是I帧和P帧,PTS和DTS都是单调递增的。

解码器相关的概念,码率(BitRate)、FPS(video frame per second)、分辨率(VideoSize),不断调整和调优、优化:

在追求更好的流畅度时,我们可以适当降低码率。如果 FPS 已经较高(如 30)时,可以维持 FPS 不变更;如果此时因码率太低而画面无法接受,可以再适当调低 FPS。在追求更清晰的画质时,可以提高码率,FPS 调节至 24 左右人眼大多还会识别为流畅。如果可以接受有轻微卡顿,那么可以将 FPS 设置的更低,比如 20 甚至 15。

动态调整编码策略是一种应对方式,而直接提高视频流的压缩比降低直播对网络的要求也是一种策略。目前如果使用 H.265 编码就可以降低 40% 的带宽占用,但比如 H.265 编码对移动端来说性能开销过大,相继会带来的问题还有发热过高、掉电过快等问题。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31559352/viewspace-2564571/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31559352/viewspace-2564571/

你可能感兴趣的:(科普 | 视频直播的GoP Size设置成多少合适?)