我正在使用libavcodec解码H264流。当从网络接收流时,有时可能会丢失NAL,从而导致帧中出现伪像。之后,框架将使用DirectShow渲染。

解码期间发生错误时,libavcodec日志回调会发出信号。问题是-尽管多个帧仍然存在某些伪像,但libavcodec不会为损坏的帧之后的帧发出信号。

我只想渲染低于某些伪影级别的帧,同时避免显示过于“破碎”的帧。是否可以通过libavcodec API找出已解码图片的伪影级别,或者我需要自己检测这些伪影(在这种情况下,是否有最佳实践?)?

最佳答案

到目前为止,最好的方法是对libavcodec日志字符串中的伪像计数进行汇总,并在每帧中减少它,避免在伪像计数较高时避免显示帧。例如:
libavcodec log: module h264, level 32: concealing 2480 DC, 2480 AC, 2480 MV errors in I frame
如果将伪影阈值设置为1000,并且在每帧我们将伪影级别降低1000,则先前的日志字符串将丢弃2帧。

此方法是推测性的(不是“干净”的解决方案),但是可以工作。

08-17 04:36