c++ - 如何使用 Libav 在 Windows 上捕获摄像头设备?

标签 c++ windows ffmpeg video-capture libav

有没有什么方法可以使用 Libav 在 Windows 平台上从与 DirectShow 一样多的相机类型中捕获帧?我需要在不使用 DirectShow 过滤器的情况下捕获相机输出,并且我希望我的应用程序能够使用多种相机设备类型。

我在 Internet 上搜索了 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 支持的设备太少。也许现在情况已经改变了,它确实支持足够的设备来在生产应用程序中使用它?

如果这不可能..那么我希望我的问题不会毫无用处并且这段由不同来源组成的代码将帮助对这个主题感兴趣的人'因为整体上关于它的信息真的太少了互联网。

最佳答案

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

关于c++ - 如何使用 Libav 在 Windows 上捕获摄像头设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7515369/

相关文章:

windows - 每次推送时如何让 Git 询问用户名和密码?

python - 从 git 存储库进行 pip 安装,由于引用错误而出现错误

c++ - ffmpeg 在多线程中解码 JPEG 2000

c++ - std::set::find 的可读替代品

ios - 如何用windows PC调试ios.iphone网站

ffmpeg - 如何使用 ffmpeg 将两个视频与一个 mp3 合并?

ffmpeg 保留原始文件日期吗?

c++ - 命名类(可能是代理)的目的是允许对项目进行排序和删除,而无需修改基础容器

c++ - 为什么这段代码的输出是fffffff9?

c++ - 增量备份 : how to track file deletions