ffmpeg推拉流优化方案

ffmpeg推拉流优化方案

文章目录

  • ffmpeg推拉流优化方案
      • 一、卡顿优化
        • 设备老旧
        • 视频流音视频不同步
        • 网络
      • 二、延时优化
      • 三、传输协议优化
      • 四、首屏秒开优化
        • 服务器做优化
        • 客户端优化
      • 五、弱网优化
      • 六、DNS劫持优化
      • 七、服务端cdn优化

主要从以下几点来优化

  • 卡顿优化
  • 延时优化
  • 传输协议优化
  • 首屏秒开优化
  • 弱网优化
  • DNS劫持优化
  • 服务端cdn优化

一、卡顿优化

视频播放端卡顿主要有以下几点原因:

设备老旧

设备太老,CPU和GPU处理性能过低,计算解码时间过长,导致音视频卡顿

视频流音视频不同步

  • 服务端编码视频流参数配置有问题
  • 拉取的视频流音画不同步。例声音连续播放,但是画面卡住

上述需要优化的点有:

  • 设置合理的配置参数,合理的帧率、码率、分辨率和I帧(关键帧)的间隔。
  • 调整编解码算法,如按照视频编码H.264/H.265规范,编码完整的视频数据

网络

当网络状况不好时,可以监听网络变化,切换低码率的视频流拉取,减少卡顿的出现

二、延时优化

低延时是直播播放的主要要求之一。实现低延时需要需要根据响应的阶段执行不同的优化方案

1.采集处理数据阶段 – 处理数据的延时-美颜、滤镜等

在采集到音视频数据后,需要增加一些视频效果,如美颜、水印、滤镜等效果,这些操作会耗费大量的CPU资源,可以将这部分交由GPU处理,可以大大减少处理数据的延时

2.编码阶段 – 编码耗时的帧,设置了不合理的参数值

  • 编码前丢帧,减少编码的耗时。例如丢掉B帧,B帧解码时需要依赖前后视频帧(I或P帧),会增加延时。所以在编码前丢弃B帧,不仅能降低编解码耗时,同时也能降低带宽开销。
  • ffmpeg有两个参数
    probesize:获得文件内容的大小,适当的大小可以减少延迟,太大会增加延时,太小会造成卡顿的现象
    analyzeduration:解析媒体所需要花销的时间,这里设置的值越高,解析的越准确,如果在直播中为了降低延迟,这个可以设置得低一些

三、传输协议优化

应用层传输协议采用HTTP-FLV协议或者RTMP协议,这两个协议延时低,可以再网络请求和响应时快速传输数据,减少延时

RTMP(Real Time Message Protocol、实时信息传输协议)是应用层协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题。

四、首屏秒开优化

在直播中,往往需要快速的显示首屏画面,防止黑屏带来的用户体验差,这个时候需要做首屏秒开优化

服务器做优化

GOP即Group of picture(图像组),指两个I帧之间的距离,Reference(参考周期)指两个P帧之间的距离。一个I帧所占用的字节数大于一个P帧,一个P帧所占用的字节数大于一个B帧。

所以在码率不变的前提下,GOP值越大,P、B帧的数量会越多,平均每个I、P、B帧所占用的字节数就越多,也就更容易获取较好的图像质量;Reference越大,B帧的数量越多,同理也更容易获得较好的图像质量。

  • 服务器缓存GOP,GOP的第一帧是关键帧(I帧),所以无需下载整个GOP,只需下载收个关键帧解码播放,就能达到首帧秒开

客户端优化

  • 为了加快渲染速度,在做首帧渲染时,不做音视频同步,后面再进行同步

由于人们对音频的变化比较明显,音视频同步通常采用视频追音频的方案进行同步,所以在首帧不做音视频同步,可以快速的渲染出图像,而不必等待音频解码,做同步再渲染

  • 当网络比较差时,对带宽进行监测,根据带宽切换合适的码率播放视频,缩短首帧的渲染时间

  • 在首帧渲染之前,做预加载或者延迟加载。减少同时带宽和CPU的暂用,达到首屏快速加载渲染

五、弱网优化

  • 前面提到的根据带宽,拉取合适的码率、帧率和分辨率来播放

  • 推流端使用H.265协议,可以节约40%带宽,但是并不是所有的手机都支持H.265协议,所以需要做额外的控制层。

  • 播放端可以通过缓存一定的数据之后再进行播放,减少卡顿次数。但是这种不减少卡顿时间

六、DNS劫持优化

运营商被劫持会向包中加入一些广告和其他无用的东西。需要屏蔽这些无用数据。可以采取以下措施:

  • 使用HTTPS通讯

HTTPS在应用层增加了SSL协议,不同于TCP/IP三次握手,它需要其次握手,在连接阶段,采用非对称加密,来防止中间人攻击,但是相对的也会增加性能损耗。

  • 数据安全校验-MD5、SHA校验

    匹配数据的md5值,防止被篡改

  • 使用HttpDNS技术

    使用自建的httpDNS服务器或者阿里云DNS服务器,防止运营商解析DNS被劫持

七、服务端cdn优化

在分发的时候使用cdn服务,通过DNS重定向技术访问用户最近的CDN节点,同时用户和这个节点做交互。

你可能感兴趣的:(音视频)