手头没有网络摄像头,采用ffmpeg+EasyDarwin+笔记本摄像头模拟一个网络摄像头用来开发程序。有一些小细节记录一下。
流媒体服务器easydarwin的安装还是非常方便的。参考官方给的readme。几分钟就可以搭建好。https://github.com/EasyDarwin/EasyDarwin
运行easydarwin服务后,就是用ffmpeg推流到服务器了。
笔记本摄像头名称使用命令查看:
ffmpeg -list_devices true -f dshow -i dummy
贴几条测试好的命令:
//不使用编码器 循环推送本地h264文件
ffmpeg -re -stream_loop -1 -i C:Downloads\1080P.264 -rtsp_transport tcp -vcodec copy -f rtsp rtsp://localhost/test
//使用libx264编码器推送笔记本摄像头
ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 -r 30 -f rtsp rtsp://localhost/test
//使用h264_qsv编码器 推送笔记本摄像头
ffmpeg -f dshow -i video="Integrated Camera" -vcodec h264_qsv -r 30 -f rtsp rtsp://localhost/test
以上几条命令都是没有问题的。但是在使用ffmpeg的过程中,一开始总是弹出一些警告(类似一下这种):
Past duration 0.781242 too large
real-time buffer [Integrated Camera] [video input] too full or near too full
问题应该是编码速度不够,导致buffer拥堵。使用ffmpeg -codecs查看了H264支持的编码器。
但是使用nvenc会报错,因为我使用的是编译好的3.3.1版本的ffmpeg,没有dll库文件。ffmpeg添加编码器需要重新编译ffmpeg和库文件,比较麻烦。
于是去ffmpeg官网下载编译好的版本。最终下载了4.4版本编译好的ffmpeg工具,更改环境变量指向新下载的bin目录。重新运行推流命令,发现不再报错。而且使用vlc查看的延时也从三秒左右降到了ms级别。
使用vlc打开推流地址,可以流畅的看到摄像头画面。
总结:以后还是尽量用新版本的库和工具。。。