本地USB摄像头在使用中时,不支持另一个程序的并发访问,也就是所USB摄像头只能令第一个连接的程序“独享”。
在开发一个软件时,希望实现预览USB摄像头的同时,实现摄像头的推流。
推流要用的ffmpeg,经过资料查找,ffmpeg支持通过管道传输给ffplay实现本地预览,代码如下:
ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -f alsa -i hw:0 -c:v libx264 -preset ultrafast -tune zerolatency -b:v 1000k -minrate 500k -maxrate 2000k -bufsize 2000k -c:a aac -strict experimental -f flv rtmp://server/live/stream | ffplay -
用这个方法弹出的界面不美观,而且对系统资源占用非常高,不建议使用。
经过查询ffmpeg源码,发现有个image2pipe参数,可以完美实现这个需求,具体实现步骤如下:
- 项目中安装AForge用于对摄像头操作