如何使用Libav在Windows上捕获相机设备?

时间:2011-09-22 13:18:07

标签: c++ windows ffmpeg video-capture libav

有没有办法使用Libav在Windows平台上使用DirectShow从尽可能多的摄像头类型中捕获帧?我需要在不使用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支持多少设备?我在Windows上找到关于使用libav捕获摄像头输出的所有建议都是建议使用DirectShow用于此目的,因为libav支持的设备太少。也许情况现在已经改变,它确实支持足够的设备在生产应用程序中使用它?

如果这是不可能的..好吧,我希望我的问题不会无用,而且这个代码来自不同的代码片段将帮助对这个主题感兴趣的人'因为整体上关于它的信息真的太少了互联网。

1 个答案:

答案 0 :(得分:2)

FFMPEG无法在Windows上捕获视频。一旦我必须自己实现,使用DirectShow捕获