alv*_*ion 5 c++ ffmpeg h.264 openh264
我正在尝试制作 ffmpeg 的自定义构建以在我的 C++ 应用程序中使用。我唯一需要的编解码器是 h264 和 aac 的编码/解码。因为我无法使用 GPL 代码,所以我尝试使用 openh264。
我成功构建了openh264。
我正在这样配置我的 ffmpeg 构建:
../../../configure\
--toolchain=msvc\
--arch=x86_64\
--enable-shared\
--prefix=../../../Build/Windows10/x64\
--disable-programs\
--disable-everything\
--enable-libopenh264\
--extra-ldflags=../../../../openh264/openh264.lib\
--enable-hwaccel=h264_d3d11va\
--enable-encoder=libopenh264\
--enable-encoder=aac\
--enable-decoder=h264\
--enable-decoder=aac\
--enable-muxer=mp4\
--enable-demuxer=mov\
--enable-parser=h264\
--enable-parser=aac\
--disable-dxva2\
--enable-protocol=file
Run Code Online (Sandbox Code Playgroud)
这是我的配置输出:
install prefix ../../../Build/Windows10/x64
source path /c/ffmpeg
C compiler cl
C library msvcrt
ARCH x86 (generic)
big-endian no
runtime cpu detection yes
yasm yes
MMX enabled yes
MMXEXT enabled yes
3DNow! enabled yes
3DNow! extended enabled yes
SSE enabled yes
SSSE3 enabled yes
AESNI enabled yes
AVX enabled yes
XOP enabled yes
FMA3 enabled yes
FMA4 enabled yes
i686 features enabled yes
CMOV is fast yes
EBX available no
EBP available no
debug symbols yes
strip symbols no
optimize for size no
optimizations yes
static no
shared yes
postprocessing support no
network support no
threading support w32threads
safe bitstream reader yes
texi2html enabled no
perl enabled yes
pod2man enabled no
makeinfo enabled yes
makeinfo supports HTML no
External libraries:
libopenh264 schannel xlib
External libraries providing hardware acceleration:
cuda cuvid d3d11va nvenc
Libraries:
avcodec avfilter avformat avutil swresample swscale
avdevice
Programs:
Enabled decoders:
aac h264
Enabled encoders:
aac libopenh264
Enabled hwaccels:
h264_d3d11va
Enabled parsers:
aac h264
Enabled demuxers:
mov
Enabled muxers:
mov mp4
Enabled protocols:
file
Enabled filters:
Enabled bsfs:
Enabled indevs:
Enabled outdevs:
License: LGPL version 2.1 or later
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它列出了编码器和解码器的两个值。但是,当我尝试像这样列出可用的编解码器时:
av_register_all();
AVCodec* current_codec = av_codec_next(nullptr);
while (current_codec != nullptr)
{
if (av_codec_is_encoder(current_codec))
{
cout << "Found encoder " << current_codec->long_name << endl;
}
current_codec = av_codec_next(current_codec);
}
Run Code Online (Sandbox Code Playgroud)
只有第一次调用 av_codec_next 返回非空,并且它是 h264 解码器。我没有看到 aac 解码器,也根本没有看到任何编码器。
我尝试过相同的源代码,但链接到 ffmpeg 的预构建版本(来自 Zeroane),所以我确信迭代编解码器的代码是正确的。
我需要做什么才能将 openh264 和 aac 列为编解码器?
鉴于av_register_all/ av_codec_nextAPI 已被弃用,您可能想尝试av_codec_iterate一下......
const AVCodec *current_codec = nullptr;
void *i = 0;
while ((current_codec = av_codec_iterate(&i))) {
if (av_codec_is_encoder(current_codec)) {
std::cout << "Found encoder " << current_codec->long_name << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
似乎按预期工作(Linux + libavcodec.so.58.19.104)。
| 归档时间: |
|
| 查看次数: |
1992 次 |
| 最近记录: |