FFmpeg H.265 选择性解码问题

3

我需要实现有选择的直播解码。我需要删除B帧解码以减少高CPU利用率。为此,我修改了ffmpeg.c文件中的“decode_video”。查看pic_type(= 3),我正在删除解码。当提供输入(.ts)文件时,此更改正常工作。但是当我使用udp://提供实时输入时,提取的(P)帧会变形。 有人对此有任何了解吗。

1个回答

2
你不能根据 pic_type 放弃它们,所有的 pic_type 帧都可以在 HEVC 中被引用。你需要根据 NalUnitType 是非参考帧(_N 表示非参考,_R 表示参考)来放弃它们。如果你放弃了参考帧,使用该参考帧的所有帧也会变形。

感谢提供信息,Ronald。但是我的疑问是,H.265文档中说I帧是关键帧,不依赖于任何其他帧。P帧依赖于I或P帧,但不依赖于B帧。那么为什么删除B帧会扭曲P帧?这个信息是应用在NalUnitType上下文中还是其他什么地方? - Roshan Rajak
还有一件事要分享,当我对H.264应用相同的P帧丢弃时,提取的P帧根本不会失真。 - Roshan Rajak
Hevc和h264是非常不同的编解码器。我已经给你了解决方案,只有当NalUnitType为_N时才丢帧。你试过了吗? - Ronald S. Bultje
我尝试了基于NalUnitType的B帧丢弃,效果很好。感谢您的建议。 - Roshan Rajak
即使出现了这些帧丢失,CPU 利用率也没有显著的差异。有没有办法再丢更多的帧? - Roshan Rajak
不。如果你想进一步加快解码速度,你可以选择使用具有非完美特征的解码帧(例如,去掉环路滤波/ sao,进行双线性MC),或者学习如何在ffmpeg的解码器中加速这些操作(或者雇佣某人为您完成)。在ffmpeg的hevc解码器中,有大量的速度优化机会。 - Ronald S. Bultje

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接