ffmpeg h264解码, 屏蔽因为网络丢包等各种原因导致的花屏帧
来源:互联网 发布:捷豹车钥匙数据 编辑:程序博客网 时间:2024/05/22 06:07
转自:http://blog.csdn.net/u013354805/article/details/51611391?locationNum=1
ffmpeg h264解码, 屏蔽因为网络丢包等各种原因导致的花屏帧
---->看来问题只能这样解决了,现在还要多测测,防止产生新的问题。目前来看,对现有代码没有影响,花屏的帧直接屏蔽掉了。
思路:
问了下机顶盒方面h264解码的,他们用的是硬件解码,他们做到不花屏的方法就是简单的设置了一个硬件解码提供的接口:设置了错误处理模式。
我想这个错误处理模式肯定对那些错误的帧直接屏蔽掉了,这样显示到屏幕上就不花了。
因此,就有了问题:ffmpeg有没有错误处理的模式,能使花屏的帧(h264格式的)不显示出来?
查了些资料,没找到。
我假定ffmpeg没有这个模式,十有八九没有。我就用我的方法模拟一个错误处理模式。
在AVFrame(FF_COMMON_FRAME)里添加一个变量,datadamage.
这个变量为0时,表示这个frame没有错误;反之,为1时,表示有错误。
怎么用呢?
当av_decode_video()解出一帧后,判断这个标志:
为1。就不渲染,屏蔽掉。如果当前帧是关键帧,且标志为1,到下一个关键帧之前的所有帧都屏蔽掉。
为0就正常渲染。
现在的问题就变成了这个标志什么时候置的问题。
首先我们要知道一个frame(h264)什么时候开始解码的.知道了什么时候开始,也就知道了什么时候结束。(下一帧开始解码的时候,上一帧当然结束了)。
这里有个依据,current_mb_slice == 0时,表示一帧开始。
当然也可以用第2个方法:ff_h264_frame_start()这就是一帧开始了。
那么我们怎么判断这帧错误呢?
我用的方法是:
因为h264一帧由slice MB这些单位,当解这帧的任意slice或任意MB出现错误时,只要有一个错误,这帧就置错误标志。
另h264每帧之前还有些相应信息,SPS PPS.这些出现错误的话,理论上应该到下一个SPS或PPS之间的帧都要置错误标志,这个还没做(目前没什么影响)。再后面几天测试的时候可能要仔细考虑下。
上面就是目前的方案,也是想到唯一的方案,目前为止能屏蔽掉花屏的帧。
- 顶
- 0
- ffmpeg h264解码, 屏蔽因为网络丢包等各种原因导致的花屏帧
- ffmpeg h264解码, 屏蔽因为网络丢包等各种原因导致的花屏帧
- ffmpeg h264解码, 屏蔽因为网络丢包等各种原因导致的花屏帧
- ffmpeg解码网络rtp流(包装的h264)
- 【FFMPEG】各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
- 导致解码延时/丢帧的语法元素—H264
- ffmpeg h264实时解码用到的函数
- 利用ffmpeg解码h264流的代码
- 利用ffmpeg解码h264流的代码
- 基于FFMpeg的H264解码库
- 利用ffmpeg解码h264流的代码
- ffmpeg解码H264缺少帧的解决办法
- ffmpeg解码H264缺少帧的解决办法
- ffmpeg编译,解码 H264
- FFMPEG解码H264拼帧简解
- FFMPEG解码H264拼帧简解
- ffmpeg 解码h264
- ffmpeg编译,解码 H264
- android studio配置Terminal命令窗口
- unity射线的启发妙香
- Log4j配置详解
- JavaScript从作用域到闭包
- rac ssh配置
- ffmpeg h264解码, 屏蔽因为网络丢包等各种原因导致的花屏帧
- $(function(){})和$(document).ready(function(){})
- Vue---vuex+asiox发送请求
- 堆及基本操作
- 小鱼的游泳时间
- Operators in MXNet-Activation
- 如何查看电脑中隐藏的文件?
- java虚拟机
- 框架使用的一个控件样式库,使用附加属性实现了很多效果,开发非常易复用