如何使用avformat_open_input函数(ffmpeg)

How can I use avformat_open_input function (ffmpeg)

本文关键字:ffmpeg 函数 open 何使用 avformat input      更新时间:2023-10-16

我在这里购买了一台具有HDMI视频源输入和UVC视频输出的HD HDMI to UVC设备。
我把它从笔记本电脑A(输入源HDMI(连接到笔记本电脑B(输出USB(。
我已经在笔记本电脑B上安装了Ubuntu 14.04桌面,在笔记本电脑A上安装了Win 8.1。
B 还安装了 ffmpeg、opencv 和 sdl 库。
我的目标是通过 B 上的HD HDMI to UVC从 A 捕获视频和音频。
所以我决定使用 libav of ffmpeg.
我看到了这个并使用avformat_open_input函数,但这个函数返回了错误。
我认为发生错误是因为avformat_open_input(const char * url(的第二个参数无效。
我知道url应该像video:video device name:audio:audio card name.
如何指示设备名称?

这是终端中v4l2-ctl --list-devices命令的结果。

HD WebCam (usb-0000:02:03.0-1):   
    /dev/video0
HD TV CAM (usb-0000:03:00.0-2.1):   
    /dev/video1

以及终端arecord -l的结果。

**** List of CAPTURE Hardware Devices ****  
card 0: AudioPCI [Ensoniq AudioPCI], device 0: ES1371/1 [ES1371 DAC2/ADC]  
Subdevices: 1/1  
Subdevice #0: subdevice #0    
card 1: CAM [HD TV CAM], device 0: USB Audio [USB Audio]    
Subdevices: 1/1  
Subdevice #0: subdevice #0  

谢谢。

这是我使用 FFmpeg 的 API 访问 USB 网络摄像头的解决方案。

int CaptureCam() 
  {
  avdevice_register_all(); /* for device & add libavdevice/avdevice.h headerfile*/
  avcodec_register_all();
  av_register_all();
  char *dev_name = "/dev/video0"; // here mine is video0 , it may vary.
  AVInputFormat *inputFormat =av_find_input_format("v4l2");
  AVDictionary *options = NULL;
  av_dict_set(&options, "framerate", "20", 0);
  AVFormatContext *pAVFormatContext = NULL; 
    // check video source
  if(avformat_open_input(&pAVFormatContext, dev_name, inputFormat, NULL) != 0)
  {
   cout<<"nOops, could'nt open video sourcenn";
   return -1;
  }
  else
  {
   cout<<"n Success !";
  }
  } // end function