ffmpeg h264解码, 屏蔽因为网络丢包等各种原因导致的花屏帧
来源:互联网 发布:nginx https配置 编辑:程序博客网 时间:2024/05/22 03:19
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之间的帧都要置错误标志,这个还没做(目前没什么影响)。再后面几天测试的时候可能要仔细考虑下。
上面就是目前的方案,也是想到唯一的方案,目前为止能屏蔽掉花屏的帧。
- 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
- Maven、eclipse与Nexus私服配置指南
- 随笔之javamail邮件发送(阿里云企业邮箱)
- C/C++函数形参传实参时值传递、指针传递、引用传递的区别
- SQL to mongo Shell to C++
- android的sqlite数据库,跨进程写数据存在同步问题
- ffmpeg h264解码, 屏蔽因为网络丢包等各种原因导致的花屏帧
- 深入浅出聊优化:从Draw Calls到GC
- ubuntu/win双系统无法挂载NTFS分区问题
- 依赖z-index值创建层叠上下文
- 关于UnityEngine.UI.Button.ButtonClickedEvent事件列表
- Android MPChart 实现BarChart图形,负数条形显示在0一下,正数条形在0以上的!
- Android Training学习笔记之开始篇
- Qt之OpenSSL
- javah生成的头文件在方法名前加1