FFMPEG: Почему не все мои кодеки появляются, когда я вызываю av_codec_next ()

Я пытаюсь сделать пользовательскую сборку 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

Вот мой вывод конфигурации:

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

Как вы можете видеть, он перечисляет два значения каждое для кодеров и декодеров. ОДНАКО, когда я пытаюсь перечислить доступные кодеки, вот так:

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);
}

Только первый вызов av_codec_next возвращает ненулевое значение, и это декодер h264. Я не вижу aac-декодера и вообще не вижу никаких кодеров.

Я пробовал тот же исходный код, но ссылался на предварительно собранную версию ffmpeg (из Zeroane), поэтому я уверен, что код для перебора кодеков правильный.

Что мне нужно сделать, чтобы openh264 и aac были перечислены как кодеки?

1

Решение

Учитывая, что av_register_all/av_codec_next API устарели, вы можете попробовать 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;
}
}

Кажется, работает как ожидалось (Linux + libavcodec.so.58.19.104).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]