我使用zeranoe.com的开发版,其中包含OpenH264和libx264。 如何在这两个解码器之间进行选择以比较解码速度?
ORM
只给了我一个名字" h264" 但它是哪个解码器?
并尝试强制特定解码器失败,例如:
avcodec_find_decoder(AVCodecID.AV_CODEC_ID_H264);
我还有哪些其他选项可以提高avcodec_decode_video2对高分辨率(4k及更高)RTSP视频流的解码速度?
答案 0 :(得分:5)
除了本机FFmpeg H.264解码器(名为libopenh264
)之外,FFmpeg还可以使用OpenH264(在FFmpeg中命名为h264
)进行解码。还有一些支持hardware assisted H.264 decoders,但我不打算详细介绍这些内容。
OpenH264 can only decode Constrained Baseline profile,因此其实用性可能有限。
本机FFmpeg H.264解码器具有线程功能(帧和片),但OpenH264没有。
ffmpeg
CLI工具示例您似乎正在使用FFmpeg库,但以下是使用ffmpeg
的一些示例。
要选择所需的解码器,请使用-c:v
输入选项。以下是使用null muxer的两个解码基准示例。还使用-map
选项,因此仅解码(第一)视频流并忽略其他非视频流,例如音频。
$ ffmpeg -benchmark -i input.mp4 -map 0:v:0 -f null -
bench: utime=23.557s
bench: maxrss=57752kB
real 0m3.834s
user 0m23.573s
sys 0m0.213s
$ ffmpeg -benchmark -c:v libopenh264 -i input.mp4 -map 0:v:0 -f null -
bench: utime=20.927s
bench: maxrss=37404kB
real 0m21.002s
user 0m20.940s
sys 0m0.060s
注意基准测试选项输出用户CPU时间,而不是实际经过的时间。如果您想要实时,请在time
命令之前添加ffmpeg
命令(如果您在Linux上)。为了便于比较,我在示例中添加了time
的输出(最后三行)。
查看控制台输出。例如,使用本机H.264解码器:
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> wrapped_avframe (native))
使用libopenh264:
Stream mapping:
Stream #0:0 -> #0:0 (h264 (libopenh264) -> wrapped_avframe (native))