gpt4 book ai didi

c++ - 这是libavformat的avformat_open_input()的第二个参数问题

转载 作者:行者123 更新时间:2023-12-04 23:18:41 28 4
gpt4 key购买 nike

我计划从 Windows PC 上的两个摄像头导入实时视频/音频图像,然后使用 FFMPEG 的 av_image_fill_arrays() 函数将两个图像组合成一个 Rect 进行流式传输。
如下图所示,我们也在考虑同步两个摄像头。
[在此处输入图片描述][1]
[1]:/image/AqEGm.png
但是在那之前, avformat_open_input() 这个函数我不知道怎么用。

AVFormatContext     *inputContext = nullptr;
AVInputFormat *inputFormat = av_find_input_format("dshow"); // linux -> v412
AVDictionary *options = nullptr;

char temp[128] = {0x00,};
snprintf(temp, 127, "video_size=1920x1080;pixel_format=yuyv422;framerate=30;");
av_dict_parse_string(&options, str_tmp, "=", ";", 0);

if (ret = avformat_open_input(&m_InputContext, "video=@device_pnp_\\\\?\\usb#vid_1bcf&pid_2c99&mi_00#8&3ea22a0&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\\global", inputFormat, &options) != 0)
{
// exception
av_dict_free(&options);
std::cerr << "avformat_open_input() error: " << str_tmp << std::endl;
return -1;
}
第二个参数中输入的值是在cmd中输入以下命令时可以得到的替代名称。(添加转义字符)
ffmpeg -list_devices true -f dshow -i dummy
我应该使用什么方法在 ffmpeg 中获得相机控制?

最佳答案

看来您必须调用 avdevice_register_all() .
在我的机器中,以下代码有效(使用不同的设备名称):

avdevice_register_all();

AVFormatContext *inputContext = avformat_alloc_context();
AVInputFormat *inputFormat = av_find_input_format("dshow");
AVDictionary *options = nullptr;

int ret;

if (ret = avformat_open_input(&inputContext, "video=@device_pnp_\\\\?\\usb#vid_1bcf&pid_2c99&mi_00#8&3ea22a0&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\\global", inputFormat, &options) != 0)
{
// exception
av_dict_free(&options);
std::cerr << "avformat_open_input() error: " << std::endl;
return -1;
}

如果它不起作用,请尝试使用 FFplay(命令行工具)对其进行测试:
ffplay -f dshow -i "video=@device_pnp_\\?\usb#vid_1bcf&pid_2c99&mi_00#8&3ea22a0&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"

关于c++ - 这是libavformat的avformat_open_input()的第二个参数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71447538/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com