如何使用Libav在Windows上捕捉摄像头设备?

有什么办法可以从Windows平台上使用Libav捕获与DirectShow一样多的相机types的帧? 我需要捕获一个摄像头输出,而不使用DirectShowfilter,我希望我的应用程序可以使用许多摄像头设备types。

我已经在Internet上search了libav的这个function,发现它可以通过使用特殊input格式“vfwcap”的libav完成。 类似的东西(不知道代码的正确性 – 我自己写的):

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支持多less设备? 我发现在windows上使用libav捕获摄像头的输出是为了这个目的使用DirectShow的build议,因为libav支持的设备太less。 也许情况已经改变了,它支持足够的设备在生产应用中使用它?

如果这是不可能的..那么我希望我的问题不会是无用的,这由不同来源的代码片段将帮助有兴趣在这个主题的人'因为真的太less关于它在整个互联网上的信息。

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