我正在使用zeranoe.com的开发版,其中包含OpenH264和libx264.如何在这两个解码器之间进行选择以比较解码速度?
avcodec_find_decoder(AVCodecID.AV_CODEC_ID_H264);
Run Code Online (Sandbox Code Playgroud)
只给我一个名字"h264",但它是哪个解码器?
并尝试强制特定解码器失败,如:
codec = avcodec_find_decoder _by_name("x264");
codec = avcodec_find_decoder _by_name("libx264");
Run Code Online (Sandbox Code Playgroud)
还有哪些其他选项可以提高avcodec_decode_video2对于高(4k及更高)RTSP视频流的解码速度?
libopenh264除了本机FFmpeg H.264解码器(命名h264)之外,FFmpeg还可以使用OpenH264(在FFmpeg中命名)进行解码.还有一些支持硬件辅助的H.264解码器,但我不打算详细介绍这些.
OpenH264只能解码约束基线配置文件,因此其实用性可能有限.
本机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
Run Code Online (Sandbox Code Playgroud)
$ 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
Run Code Online (Sandbox Code Playgroud)
请注意,基准测试选项输出用户CPU时间,而不是实际经过的时间.如果你想要实时,也可以在time命令之前添加ffmpeg命令(如果你在Linux上).我添加了time示例中的输出(最后三行)以进行比较.
查看控制台输出.例如,使用本机H.264解码器:
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> wrapped_avframe (native))
Run Code Online (Sandbox Code Playgroud)
使用libopenh264:
Stream mapping:
Stream #0:0 -> #0:0 (h264 (libopenh264) -> wrapped_avframe (native))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11112 次 |
| 最近记录: |