转发USB摄像头的视频流,实现简单快捷

下载

使用

Step1:解压下载的 FFmpeg 压缩包,进入其 bin 文件夹下,在此目录下打开命令行(或者把这个目录加入至环境变量也可以)

Step2:命令行输入以下命令,查找USB摄像头设备名称

ffmpeg -list_devices true -f dshow -i dummy

如果发现乱码则通过计算机管理-设备管理器查看设备名称

命令行输入以下命令,查看USB摄像头流信息

ffmpeg -list_options true -f dshow -i video="YOUR_CAMERA_NAME"

Step3:查找554端口是否被占用

netstat -aon|findstr "554"

或者停止 Windows Media Player Network Sharing Service 服务

Step4:解压下载的 EasyDarwin 压缩包,运行 EasyDarwin.exe,浏览器输入 http://localhost:10008 即可进入后台监控,查看推流、拉流列表

如果不先打开服务直接运行 FFmpeg 可能会出现 real-time buffer [video input] too full or near too full 错误,关于这个问题讨论可以看 这篇文章,除去端口被占用,还有一种情况就是网络断开,即 FFmepg 中 rtsp 指定 SERVER_IP 无法到达

Step5:输入以下命令

ffmpeg.exe -f dshow -i video="YOUR_CAMERA_NAME":audio="YOUR_MIC_NAME" -vcodec libx264 -acodec copy -rtsp_transport tcp -f rtsp rtsp://SERVER_IP/PATH

① 如果想停止流传输进入EasyDarwin后台界面停止它尽可能不要用Ctrl+Q退出 ② 这个时候就可以打开 VLC、Potplayer 等播放器输入 rtsp://SERVER_IP/PATH 这个地址可以实时观看视频流了,EasyDarwin 实际上是将流转发并起到监控等控制的作用

# 多线程计算
-threads 2
# 输入设备从directshow接口获取,并指定视频与音频设备名称
-f dshow -i video="YOUR_CAMERA_NAME":audio="YOUR_MIC_NAME"
# 使用x264压缩编码,编码速度指定中等,一定压缩比率压缩(范围是0-51),设置分辨率为720x576
# X264提供三种码率控制的方式:bitrate, qp, crf。这三种方式是互斥的,使用时设置其中之一即可。
# tune参数非必要不需设置
-vcodec libx264 -preset medium -tune zerolatency -crf 26 -s 720x576
# 设置其他参数(这里设置关键帧间隔、最小关键帧间隔,不过不建议设置这两个参数)
-x264-params keyint=123:min-keyint=20
# 拷贝原始音频流(也可采用 -acodec aac)
-acodec copy
# 指定rtsp传输方式,如果不指定默认为UDP
-rtsp_transport tcp
# 指定输出方式,也可设置为-f flv等格式
-f rtsp

① 输入设备与接口可参考《FFmpeg官方文档》 ② libx264 参数具体含义可参考 此博客此文章 ③ 如果想对 rtsp 更细致调整可参考 此文章

Step6:多路输出(以下命令为 rtsp 推流和录制流输出至本地 mp4 文件)

ffmpeg.exe -threads 4 -thread_queue_size 1024 -rtbufsize 124M -flags low_delay -max_delay 0 -f dshow -i video="USB2.0 PC CAMERA":audio="麦克风 (USB Audio Device)" -vcodec libx265 -crf 26 -tune fastdecode -x264-params keyint=50 -acodec aac -rtsp_transport tcp -f rtsp rtsp://192.168.0.100/test -vcodec libx265 -crf 26 -acodec aac -f mp4 “C:\Users\Dell\Desktop\text.mp4”

① 多路输出方式格式为 -vcodec xx -acodecxx -f xx PATH1 -vocodec xx -acodec xx -f xx PATH2,当然也可以使用 -f tee 或 -f matroska 等方式多路输出 ② 关于延迟,使用 udp 传输比 tcp 启动快且延迟小,缺点是可能会出现花屏,延迟也可能与播放器有关,相关讨论 Stack Overflow: how to minimize the delayFFmpeg Wiki

参考