本片文章只是起到抛砖引玉的作用,能从头到尾走通就行,并不做深入研究。为了让文章通俗易懂,尽量使用白话描述。
0x001: 下载ffmpeg
开源免费的推流软件有很多,这里以 ffmpeg 为例。ffmpeg没有可视化界面,如果觉得ffmpeg不好用,当然也可以使用OBS,这款软件有操作界面,比较友好。
下载后解压,无需安装可直接使用,至于环境变量 配不配 都可以,区别是配了以后在使用CMD命令窗口调用ffmpeg时会方便一点,我这里没配。
0x002: 单元测试推流
为了减少出错概率,容易排查错误原因,在上一步骤的流媒体服务器环境搭建完成后 '首次推流时' 需要验证这个服务器的RTMP模块是否能正常访问。
将本地视频推流至RTMP流媒体服务器,找到ffmpeg.exe所在的文件,鼠标右键 '在此处打开命令窗口',敲入:
ffmpeg -re -i "C:\Users\Administrator\Desktop\test.mp4" -f flv "rtmp://localhost:1935/mytv/test"
其中"C:\Users\Administrator\Desktop\test.mp4"为视频文件所在磁盘的目录,"rtmp://localhost:1935/mytv/test"为RTMP协议地址。
这里重点解释一下RTMP地址,rtmp为协议名称,localhost为协议地址,1935为开放端口号,mytv为nginx根目录/conf/nginx.conf内的rtmp模块application 后的 mytv(可以根据自己的需求改,但要互相对应),test为自定义名称,可以理解为房间ID,如rtmp://localhost:1935/mytv/test1或rtmp://localhost:1935/mytv/1001
之后敲回车,会输出以下信息,黄色圈起来的是当前ffmpeg配置信息和视频的元数据信息以及相应的转码信息,如下图
若推流成功,此CMD窗口内红色方框圈起来的的INFO会一直不停的输出滚动。如下图这样:
使用VLC播放此地址,观察是否能正常播放,下图左侧在实时推流,下图右侧在实时播放(若不能播放,说明上一步骤的流媒体服务器环境搭建的有问题,需要自己排查)
0x003: 正式推流
这里以海康监控RTSP流为例来演示推流
ffmpeg -i "rtsp://admin:admin123@10.77.59.2:554/h264/ch1/sub/av_stream" -vcodec copy -acodec copy -f flv "rtmp://localhost:1935/mytv/test1"
推流成功后,同样可以使用VLC播放此地址,观察是否能正常播放。
经测试,生产环境下的ffmpeg,在保证RTSP流正规且稳定的前提下,使用时其实还是挺稳定的。
下图是使用ffmpeg推海康的RTSP流至搭建的RTMP服务器,可以看出,推了大约307小时后停止了,原因是厂房断电导致RTSP流不通导致。
0x004: 遗留问题
因为要转码推流的监控比较多,8个监控想要使用ffmpeg全部推流到RTMP服务器那就得需要开8个CMD窗口,这样的坏处就是在系统的任务栏占据了比较大的空间。将来监控的数量还有可能会扩充,16个,32个......,那这样以来使用 CMD命令窗口的方式 用ffmpeg来推流的方案 似乎有点不可行。
关于这个遗留问题,暂且解决办法是 通过设置任务栏进行相同程序合并隐藏,如果你有什么更好的解决方案,欢迎指出,不吝赐教,THANKS!
------------------------------------------------------------ 2020-06-01 00:07:46 -----------------------------------------------------------------------
关于上边这个遗留问题的解决有几个,如下
- 根据业务需求推合并流,如甲方需要一个可见光配套一个热成像,那么可以2个合并后再推,这样就是4个CMD窗口。如果没需求可直接8个合并1个流后再推,或4个合并推2个,等等。
- 上边的方案虽然可行,但还是用的CMD窗口的方式,如果技术条件允许,完全可以用程序控制FFmpeg去推流。写成简易化API,供平台随时调用。如开启、停止、监测等等
- 当然对于一个不了解音视频编解码的普通程序员来说做到步骤2就已经可以了。如果你了解音视频编解码还可以直接使用FFmpeg官方提供的外部链接库来推流。
0x005: 下一步