一. 需求
EasyDarwin使用FFmpeg来保存流媒体,以多个ts分片形式存在。但由于EasyDarwin调用FFmpeg命令时,没有对生成名字做处理,所以默认生成的ts文件名都是out0.ts,out1.ts。这种名称意义不大,需要以日期和时间来命名生成的ts文件。
二. 解决思路
2.1 EasyDarwin没有提供配置文件来修改ts文件名,也没有相关说明文档。故只能通过阅读源码、修改源码予以解决。
2.2 加入EasyDarwin官方提供的沟通群,询问是否可以修改ts文件名,以满足我的需求。得到回复可以,并知道在rtsp-server.go中修改。
2.3 找到解决方法,着手进行。
三. 解决过程
1.环境搭建
1.1安装go环境(略)
1.2安装LiteIDE(略)
1.3安装node。官网Git上有使用npm管理项目,故需安装。参考文档: https://www.cnblogs.com/jianguo221/p/11487532.html
1.4安装gcc,后续会遇到问题,就是没有安装gcc导致,下面篇幅会讲到。
2.代码拉取、编译、运行
参考官网Git上的的二次开发过程,拉取代码。走到运行、构建部分时报错:
报错后一时没头绪解决,便开始思考项目的运行构建可能使用了npm这种方式,而我并不改动前端代码,只修改后端。既然这种方式不熟悉,就采用原生方式。即LiteIDE自带的编译和运行命令:Ctrl+b、Ctrl+r。后面证明是可行的。
3.gcc安装
3.1开始编译时并不顺利,报错:exec: “gcc”: executable file not found in %PATH%。查阅文档,是没有gcc环境问题。便开始安装gcc。
3.2 gcc安装过程参考:https://www.cnblogs.com/zsy/p/5958170.html。不过其中也有坑,就是在安装mingw-w64-install.exe后,会一直停着不动。
仔细观察后就会发现,它还是去下载x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z这个包。于是自己手动去下载。装完后配置环境变量,同时在LiteIDE配置文件中添加进去。再次编译,成功。
4.修改源码
4.1开始阅读源码,解决问题。阅读源码后,发现EasyDarwin一点多余操作都没有,直接调用FFmpeg完成存储。即要想修改ts文件名,还是要从FFmpeg命令入手。
4.2第一次尝试可以解决ts文件命名问题,但生成的ts文件名是固定的,仍不是跟随时间动态生成。-》沟通群再次沟通,是否有这种需求解决方法-》得到答案有-》开始查找,找到命令但报错-》再次沟通确认,得到回复是-》在深入研究FFmpeg命令,翻阅各种文章后,最终在官网上找到解决方法。官网地址:http://www.ffmpeg.org/ffmpeg-formats.html。
4.3官网方法运行时也有报错,且不支持切片时间。又多方比对、结合,最终,使用如下命令予以解决:ffmpeg -i rtsp://admin:abcd1234@192.168.110.130:554/h264/ch1/main/av_stream -hls_time 30 -hls_list_size 0 -strftime 1 -hls_segment_filename %Y-%m-%d_%H-%M-%S.ts out.m3u8。其中-hls_time是切片时长,通过配置它,即可实现跟随配置时间间隔,动态生成以日期命名的ts文件。
4.4效果图: