1、最近在做一个直播录播项目,使用USB摄像头、网络摄像头转rtmp推流到阿里云,需要用C++封装底层接口给上层使用,客户要求接入两个摄像头和两个麦克风,发现不同型号带内置麦克风摄像头是可以同时显示的,但是两个同型号的USB摄像头连接电脑获取的摄像头友好名称是一样的,ffmpeg打开摄像头有两种方式,VFWCAP和DSHOW,VFWCAP可能已经过时,插入两个摄像头 VFWCAP只有一个设备ID是0,直接放弃,使用通过dshow方式,使用友好名称只能打开一个,网上查找相关资料很少,仅此记录下。

最后参考官方文档, http://ffmpeg.org/ffmpeg-all.html#Options-58 可以用设备的 alternative name(这个也可能带中文,我使用的的麦克风就是中文的)

2、使用Windows API获取的alternative name与FFMPEG 通过命令获取的名称不一样,前者带冒号后者是下划线,需要将冒号替换成下划线,ffmpeg 接口才可以识别,ffmpegapi 传入的名称是编码UTF-8,网上关于转换编码基本都没法正常打开,最后参照FFmpeg源码中的转换函数才可以。

编码转换函数如下

static char *dup_wchar_to_utf8(wchar_t *w)     char *s = NULL;     int l = WideCharToMultiByte(CP_UTF8, 0, w, -1, 0, 0, 0, 0);     s = (char*)av_malloc(l);     if (s)         WideCharToMultiByte(CP_UTF8, 0, w, -1, s, l, 0, 0);     return s;

以上通过 命令列出 ffmpeg -list_devices true -f dshow -idummy

VFWCAP 就显示一个设备ID,直接放弃使用上面DSHOW方式。

以上通过命令列出 ,插入两个摄像头 只列出一个来,可能vfwcap比较过时了, ffmpeg -f vfwcap -i list

26.6 dshow

Windows DirectShow input device.

DirectShow support is enabled when FFmpeg is built with the mingw-w64 project. Currently only audio and video devices are supported.

Multiple devices may be opened as separate inputs, but they may also be opened on the same input, which should improve synchronism between them.

The input name should be in the format:

TYPE=NAME[:TYPE=NAME]

where TYPE can be either audio or video, and NAME is the device’s name or alternative name..

真是想不明白,都2022了,网上有关多路推流和接流的文章居然这么少!大部分都是多路视频流合并成一路,真是无语。下面我把探索的过程给出来让大家参考下 首先说明下,我有两个usb摄像头,在项目里肯定是网络摄像头,其实差别不是很大,举一反三应该能解决问题 1.一路摄像头推出,多路接流 ffmpeg -f dshow -i video="HIK 1080P Camera" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp: 敬告:该系列的课程在抓紧录制更新中,敬请大家关注。敬告:本课程项目仅供学习参考,请不要直接商用,概不负责任何法律责任。 该系列的课程涉及:FFmpeg,WebRTC,SRS,Nginx,Darwin,Live555,等。包括:音视频、流媒体、直播、Android、视频监控28181、等。 我将带领大家一起来学习使用FFmpeg开发视频监控项目,并动手操练。具体内容包括: 一、视频监控的架构和流程二、FFmpeg4.3+SDL2+Qt5开发环境的搭建三、FFmpeg的SDK编程回顾总结并操练四、SDL2.0的编程回顾总结并操练五、颜色空间转换RGB和YUV的原理与实战六、Qt5+FFmpeg本地摄像头采集预览实战七、代码封装:摄像头h264/5编码并存储八、Qt5+FFmpeg单路网络摄像头采集预览九、Qt5+FFmpeg单路网络摄像头采集预览录制会看十、onvif与GB/T-28181的简介  音视频与流媒体是一门很复杂的技术,涉及的概念、原理、理论非常多,很多初学者不学 基础理论,而是直接做项目,往往会看到c/c++的代码时一头雾水,不知道代码到底是什么意思,这是为什么呢?   因为没有学习音视频和流媒体的基础理论,就比如学习英语,不学习基本单词,而是天天听英语新闻,总也听不懂。 所以呢,一定要认真学习基础理论,然后再学习播放器、转码器、非编、流媒体直播、视频监控、等等。   梅老师从事音视频与流媒体行业18年;曾在永新视博、中科大洋、百度、美国Harris广播事业部等公司就职,经验丰富;曾亲手主导广电直播全套项目,精通h.264/h.265/aac,曾亲自参与百度app上的网页播放器等实战产品。  目前全身心自主创业,主要聚焦音视频+流媒体行业,精通音视频加密、流媒体在线转码快编等热门产品。   后端推流,使用ffmpeg将本地视频推送至ngnix,再拉流,单独推送一路简单,但同时推送多路网上没找到相关的介绍,本文使用ffmpeg的“-map“方法解决了。-ss 表示视频分割的起始时间,-t 表示分割时长,同时也可以用 00:01:00表示。方法一:ngnix(不推荐,推流不好使)方法一:ngnix(不推荐,推流不好使)二、ffmpeg推流——>ngnix。二、ffmpeg推流——>ngnix。设置输入重定向 </dev/null。一、ffmpeg常见使用方法。一、ffmpeg常见使用方法。 使用opencv的读取一个usb摄像头时,从视频流中取出每一帧数据需要200ms。一般打开笔记本电脑自带的摄像头取出一帧数据需要20ms。经过分析,排除了分辨率和压缩格式的原因,因为另外一个同样压缩格式更高分辨率的相机同样只需要20ms。 分析opencv的源码,发现opencv默认使用的是FFmpeg的库,但opencv进行了封装,一些参数不能更改,具体的执行过程也不能看到。重新编译opn... 摄像头是一种可以捕捉光线并将其转换为电子信号的设备。这些电子信号随后被转换为我们所熟悉的数字图像。但是,这个过程并不简单。正如《光学原理》中所说:“光线的传播和反射遵循一系列复杂的物理定律。” ffmpeg -r 1 -ss 00:00:05 -t 00:00:06 -i rtsp://admin:hisense2021@192.168.1.64:554/live0.264 -i rtsp://192.168.31.23/live_stream -map 0:v image20.jpg -map 1:v image21.jpg截取视频的第几秒。通过 -ss 参数指定-ss 指定截取视频的第几秒-t指定截取时长-i指定 输入源第一路和第二路分别用了不同的颜色标注 Win10电脑里有内置相机功能,系统默认情况下也都会开启相机功能,但是有时候我们需要关闭摄像头或者禁止应用程序访问摄像头,那么Win10系统该如何禁用摄像头呢?本次将为大家详细介绍禁止使用摄像头的三种方法。在介绍方法之前也要提醒大家,当遇到电脑摄像头无法正常使用的时候,也可以尝试先检查以下的相关设置,优先从软件方面进行解决。01在应用设置中禁止应用使用摄像头打开Windows设置后,选择... 在Windows10的系统中,采用VS2015的开发环境,用Qt+DirectShow库实现了打开多个USB摄像头,把采集到的视频用Qt显示出来,并用DirectShow库实现了视频录制并保存; 并实现了每隔30s保存一个视频;方便视频的存储;不会因为突然的中断,导致整个录制过程视频保存失败; 代码适合在Windows10系统中想实现视频监控的开发人员学习; 在本文中,我们将探讨如何通过结合WebRTC和WebUSB API来获取多个USB设备的唯一ID。使用WebUSB API,我们可以枚举已连接的USB设备,并获取它们的唯一ID。下面是一步一步的指南,演示如何使用WebRTC和WebUSB API获取多个USB设备的唯一ID。通过结合WebRTC和WebUSB API,我们可以获取多个USB设备的唯一ID。然后,我们请求用户授予对USB设备的访问权限,并通过设备对象的。结合上述代码片段,我们可以编写一个函数来枚举并获取多个USB设备的唯一ID。 本地USB摄像头使用中时,不支持另一个程序的并发访问,也就是所USB摄像头只能令第一个连接的程序“独享”。在开发一个软件时,希望实现预览USB摄像头的同时,实现摄像头的推流。用这个方法弹出的界面不美观,而且对系统资源占用非常高,不建议使用