【问题标题】:Figure out artifact level in a frame decoded by libavcodec/h264找出由 libavcodec/h264 解码的帧中的伪影级别
【发布时间】:2014-08-19 12:10:29
【问题描述】:
我正在使用 libavcodec 解码 H264 流。由于流是从网络接收的,有时 NAL 可能会丢失,从而导致帧中出现伪影。随后使用 DirectShow 渲染该帧。
当解码过程中出现错误时,由 libavcodec 日志回调发出信号。问题是 - 尽管多个帧仍然存在一些伪影,并且 libavcodec 不会为损坏的帧之后的帧发出伪影信号。
我想只渲染低于特定工件级别的帧,同时避免显示太“破碎”的帧。是否可以通过 libavcodec API 计算出解码图片的伪影级别,或者我需要自己检测这些伪影(在这种情况下,是否有任何最佳实践?)?
【问题讨论】:
标签:
c++
video
ffmpeg
libavcodec
【解决方案1】:
到目前为止,最好的方法是从 libavcodec 日志字符串中汇总工件计数,并在每个帧中减少它,避免在工件计数很高时显示帧。例如:
libavcodec log: module h264, level 32: concealing 2480 DC, 2480 AC, 2480 MV errors in I frame
如果工件阈值设置为 1000,并且我们在每帧将工件级别降低 1000,则先前的日志字符串将丢弃 2 帧。
这种方法是推测性的(不是“干净”的解决方案),但它确实有效。