我使用libavcodec解码H264流。当从网络接收流时,有时可能丢失NAL,从而导致帧中的伪像。之后使用DirectShow渲染帧。
当解码期间出现错误时,它会通过libavcodec日志回调发出信号。问题是 - 一些工件会在多个帧中持续存在,并且libavcodec不会发出破坏后的帧的伪像信号。
我想只渲染某些工件级别以下的帧,同时避免显示太“破碎”的帧。可以通过libavcodec API计算解码图片的工件级别,或者我需要自己检测这些工件(在这种情况下,是否有最佳实践?)?
答案 0 :(得分:0)
到目前为止,最好的方法是从libavcodec日志字符串中总结工件计数,并在每个帧中减少它,避免在工件计数很高时显示帧。例如:
libavcodec log: module h264, level 32: concealing 2480 DC, 2480 AC, 2480 MV errors in I frame
如果artifacts threshold设置为1000并且我们在每帧减少1000的伪影级别,之前的日志字符串将丢弃2帧。
这种方法是推测性的(不是“干净”的解决方案),但它有效。