Использование libVLC в качестве видеодекодера

Я пытаюсь использовать libVLC в качестве видеодекодера для проекта обнаружения движения. Ранее я использовал библиотеки ffmpeg, но некоторые проблемы с файлами Matroska привели меня сюда. Наряду с воспроизведением видео с правильной скоростью, я также хочу иметь возможность получать один кадр за другим с максимальной скоростью, с которой может справиться моя система, поскольку, как только пользователь устанавливает некоторые параметры, я хочу, чтобы алгоритм обнаружения движения выполнялся через видео так быстро, как может. Мой код установки libVLC выглядит следующим образом (обработка ошибок и незначительные детали опущены для краткости):

const char* vlc_argv[] =
{
"--no-audio", /* skip any audio track */
};
libvlc_instance_t* inst = libvlc_new(sizeof(vlc_argv) / sizeof(*vlc_argv), vlc_argv);
auto media = libvlc_media_new_path (inst, filename.c_str());
player = libvlc_media_player_new_from_media(media);
libvlc_media_release(media);

// Needed to initialize the player ?
libvlc_media_player_play(player);
libvlc_media_player_pause(player);

fps = libvlc_media_player_get_fps(player);
length = libvlc_media_player_get_length(player);
width = libvlc_video_get_width(player);
height = libvlc_video_get_height(player);

// TODO: Add libvlc_video_set_callbacks to set up callbacks to render to memory buffer

Однако у меня остались следующие вопросы:

  1. Существует ли более простой способ инициализации медиаплеера без запуска воспроизведения, кроме вызова libvlc_media_player_play затем libvlc_media_player_pause?
  2. Все get функции (fps, length, width, height) все возвращают ноль. Нужно ли делать что-то вроде чтения первого кадра, чтобы получить эти значения, и если да, то как я должен знать, насколько большим должен быть мой буфер декодированных кадров?

3

Решение

От разработчика VLC:

  1. Обычная система воспроизведения действительно не предназначена для декодирования без разметки. Вам нужно будет использовать потоковый вывод, для которого еще нет программируемого API.

  2. get звонки возвращают ноль, потому что вам нужно подождать, пока дорожки не будут созданы.

3

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

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

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