C++ rtmp livestream 流媒体

海阔天空 张翼飞翔

我的学习笔记。--我喜欢这里,因为这里安静,无广告骚扰。
随笔 - 82, 文章 - 2, 评论 - 126, 引用 - 0
数据加载中……

直播延时问题优化总结


本文中如果无特别说明的地方,传输协议都是RTMP,服务器是FMS,播放器指的是Flashplayer。


问题:直播延大
原因1:编码参数未优化
解决1:1)从编码参数上可以减小视频关键帧间隔 2)降低码率。3)将H.264编码的profile降低规格到baseline 4)不要使用B帧
原因2:服务器端缓冲数据过大
解决2:减小流媒体服务器端的缓冲。
原因3:播放器端缓冲设置过大导致延时。
解决3:可以减小播放器缓冲到0.1秒,或设置零缓冲。
原因4:流媒体服务器集群的各个节点之间网络不稳定、推流和下播网络不稳定。
解决4:找ping值偏差稳定、不丢包的节点做边缘服务器。制作工具监控各个视频边缘服务器的带宽使用和连接数。自动报警。

问题:直播延时刚开始正常,后来延时越来越大。播放一段时间后累积到30秒以上的延时。重连后延时又恢复正常。
原因1:网络抖动导致播放器缓冲增加,缓冲数据不能及时播放,反复累积使延时增加。
解决1:播放器限制最大播放缓冲,当播放缓冲超过最大缓存限制的时候加快播放速度5%左右。使播放缓存减少从而减小延时。
如果加快播放速度仍然赶不上延时累积速度,可在编码中嵌入timecode,用来检查延时,当播放器端检查到延时很大,则丢弃缓冲数据,播放最新内容。
原因2:播放器端的下载带宽不足。
解决2:增加客户带宽。

问题:回放播放过程中,反复加载视频
原因:视频采用的是可变码率(VBR)编码。 应该改用固定比特率模式(CBR),CBR模式可以限制最大瞬时码率,从而使视频播放更加平缓。
解决方法:编码参数限制最大码率,或更改为恒定码率。

问题:回放播放缓冲时间长,而且加载缓冲次数比较频繁。
原因:如果播放器的缓冲参数设置过大,会导致加载视频速度慢;如果设置太小会导致反复缓冲。这是2个相互矛盾的问题。而设置固定缓冲不能同时解决以上2个问题。
解决方法:利用编程来实现0.1秒缓冲立即播放,然后边播放边持续增加缓冲,缓冲大小不固定。同时解决以上2个问题。

问题:回放拖拽操作后,视频会停留很久才开始播放。
原因:拖拽后,播放器需要找到一个最近的关键帧才能开始播放。默认关键帧间隔10秒。如果刚好拖拽到一个关键帧的位置,则可以快速播放。否则会导致随机延迟1-9秒播放。
解决:减小关键帧间隔到2秒。

问题:回放往前面拖拽,重新观看,又需要重新加载视频
原因:视频数据在播放完毕后被立即清理。每次拖拽都从服务器请求数据。
解决方法:开启智能搜索。如果搜索的内容已经下载过,则不从服务器请求数据,拖拽后0.5秒即可播放。智能搜索可降低服务器负载并改进搜索速度。

问题:视频画面被拉伸,有锯齿。
原因:播放器尺寸和视频尺寸不一致导致画面锯齿。
解决方法:设置Video.Smoothvideo属性,平滑拉伸,从而提高画质。或将播放器宽高和视频尺寸设置一致。

问题:回放http视频,需要下载完毕才开始播放,不能边下载边播放。
原因:metaData保存在视频文件尾部,播放器需要下载到metaData才能播放。
解决方法:用 mp4box 或 qt-faststart 工具修复把metaData移动到文件头部,就可以边下载边播放了。

posted on 2015-08-24 11:42 ZhangEF 阅读(1001) 评论(2)  编辑  收藏 所属分类: rtmp

评论

# re: 基于flashplayer的视频播放优化  回复  更多评论   

谢谢,!!!
2015-10-14 10:15 | ljsdaya@163.com

# re: 基于flashplayer的视频播放优化[未登录]  回复  更多评论   

博主你好,我自己是流媒体新手,我在做rtsp流直播,我用openRTSP 保存音视频流的时候,音视频不同步。比如我设置录制60秒的直播视频,保存结束后,而视频的长度最长时接近120秒,最短也60+,自己也不太会调试,您能不能给些建议或指导? 多谢了!
你有没有QQ ? 我的1210809746 多谢!
2015-11-12 14:06 | Eric