Как захватывать устройства камеры на Windows с помощью Libav? - PullRequest
1 голос
/ 22 сентября 2011

Есть ли способ захвата кадров с такого же количества типов камер, как DirectShow на платформе Windows с использованием Libav? Мне нужно захватить выходные данные камеры без использования фильтров DirectShow, и я хочу, чтобы мое приложение работало со многими типами устройств камеры.

Я искал в Интернете эту возможность libav и обнаружил, что это можно сделать через libav, используя специальный формат ввода "vfwcap". Нечто подобное (не уверен в правильности кода - я написал это сам):

AVFormatParameters formatParams = NULL;
AVInputFormat* pInfmt = NULL;
pInFormatCtx*  pInFormatCtx = NULL;

av_register_all();

//formatParams.device = NULL; //this was probably deprecated and then removed
formatParams.channel = 0;
formatParams.standard = "ntsc"; //deprecated too but still available
formatParams.width = 640;
formatParams.height = 480;
formatParams.time_base.num = 1000;
formatParams.time_base.den = 30000; //so we want 30000/1000 = 30 frames per second
formatParams.prealloced_context = 0;


pInfmt = av_find_input_format("vfwcap");
if( !pInfmt )
{
  fprintf(stderr,"Unknown input format\n");
  return -1;
}

// Open video file (formatParams can be NULL for autodetecting probably)
if (av_open_input_file(&pInFormatCtx, 0, pInfmt, 0, formatParams) < 0)
   return -1; // Couldn't open device

/* Same as video4linux code*/

Итак, еще один вопрос: сколько устройств поддерживает Libav? Все, что я нашел о выходе камер захвата с libav на windows, - это совет использовать DirectShow для этой цели, потому что libav поддерживает слишком мало устройств. Может быть, ситуация уже изменилась, и она поддерживает достаточно устройств, чтобы использовать ее в производственных приложениях?

Если это невозможно ... Что ж, я надеюсь, что мой вопрос не будет бесполезным, и этот фрагмент кода, составленный из разных источников, поможет кому-то заинтересоваться этой темой, потому что в действительности слишком мало информации о ней. интернет.

1 Ответ

2 голосов
/ 22 сентября 2011

FFMPEG не может захватывать видео в Windows. Однажды мне пришлось реализовать это самому, используя DirectShow, захватывая

...