- 笔者未商用
linux系统搭建教程,请参见:https://blog.csdn.net/ljrsunshine/article/details/100105494
EasyDarwin官网
-
http://www.easydarwin.org/
[引] 高性能开源RTSP流媒体服务器,基于go语言研发,维护和优化:RTSP推模式转发、RTSP拉模式转发、录像、检索、回放、关键帧缓存、秒开画面、RESTful接口、WEB后台管理、分布式负载均衡
[引] EasyPusher配套EasyDarwin流媒体服务器,支持将H.264/H.265/G.711/G.726/AAC等音视频数据推送到RTSP流媒体服务器(例如EasyDarwin)进行低延时直播或者视频通信,支持Windows、Linux、ARM、Android、iOS等平台。
流媒体服务器配置
-
下载release版本,github地址:https://github.com/EasyDarwin/EasyDarwin,点击“release”
-
解压后,关键的文件是EasyDarwin.exe和easydarwin.ini
-
easydarwin.ini
文件中相关参数的配置[http] port=10008 default_username=admin default_password=admin [rtsp] port=554 ; rtsp 超时时间,包括RTSP建立连接与数据收发。 timeout=28800 ; 是否使能gop cache。如果使能,服务器会缓存最后一个I帧以及其后的非I帧,以提高播放速度。但是可能在高并发的情况下带来内存压力。 gop_cache_enable=1 ; 是否使能向服务器推流或者从服务器播放时验证用户名密码. [注意] 因为服务器端并不保存明文密码,所以推送或者播放时,客户端应该输入密码的md5后的值。 ; password should be the hex of md5(original password) authorization_enable=0 ; 是否使能推送的同时进行本地存储,使能后则可以进行录像查询与回放。 save_stream_to_local=0 ;easydarwin使用ffmpeg工具来进行存储。这里表示ffmpeg的可执行程序的路径 ffmpeg_path=E:/ffmpeg-4.1.3-win64-shared/bin/ffmpeg ;本地存储所将要保存的根目录。如果不存在,程序会尝试创建该目录。 m3u8_dir_path=E:/vedio ;切片文件时长。本地存储时,将以该时间段为标准来生成ts文件(该时间+一个I帧间隔),单位秒。 ;如果需要直播,这个值设小点,但是这样会产生很多ts文件;如果不需要直播,只要存储的话,可设大些。 ts_duration_second=3600 ;key为拉流时的自定义路径,value为ffmpeg转码格式,比如可设置为-c:v copy -c:a copy,表示copy源格式;default表示使用ffmpeg内置的输出格式,会进行转码。 /stream_265=default
- 如果想将推送的音视频保存到本地,需要将
save_stream_to_local
设置为1 - 设置本地存储的根目录
m3u8_dir_path
- 存储音视频需要安装 shared版本的
ffmpeg
,填写ffmpeg的可执行程序的路径ffmpeg_path
- 设置
ts_duration_second,
单位为秒,表示保存的每个视频的时长,超出设定值,会新建下一个文件开始保存。如果设置了较长时间的切片,需要注意推流时网络是否稳定,不稳定的网速会导致推流中断 - http端口是在网页中查看服务器端时使用,网址栏输入
http://(ip):(port)
- rtsp端口是推流的端口号,要与配套使用的APP中设置的端口号一致。配套的Android工程github地址https://github.com/EasyDarwin/EasyPusher-Android
- 如果想将推送的音视频保存到本地,需要将
-
-
设置好
easydarwin.ini
中的参数,双击运行EasyDarwin.exe
-
在浏览器的网址栏输入
http://(ip):(port)
,回车。点击推流列表查看推流的设备 -
录制的文件保存在设置好的
m3u8_dir_path
路径下,EasyDarwin保存的目录结构形如:<m3u8_dir_path>—— |—— <486227.sdp> // 486227为用户id,APP端随机生成,可在App的设置页面查看 |—— <20190704> // 文件夹名表示录制的日期 |—— log.txt |—— out.m3u8 |—— out0.ts // 录制的文件保存为.ts格式 |—— out1.ts // 每个文件的时长为ts_duration_second秒 |—— out2.ts ... ... |—— <20190705> |—— log.txt |—— out.m3u8 |—— out0.ts // 录制的文件保存为.ts格式 |—— <6952968.sdp> // 6952968为用户id,APP端随机生成 ... ...(结构同上)
编译源代码
-
由上面的EasyDarwin自动保存视频的目录结构可以得出,EasyDarwin的时间单位只精确到日子,如果我在某一天录制多段视频并保存,那么后录制的视频会覆盖掉先录制的视频,因为保存的路径,日期是同一天
-
为了适应笔者自己的需求,笔者配置了运行Go语言的环境,下载了EasyDarwin的源代码,修改并重新编译生成可执行程序
- 安装Golang,安装包下载地址:https://golang.org/dl/
- 安装MingGW 64位
- IDE:笔者使用 LiteIDE
-
只需要修改创建文件夹的地方,将时间精确到秒,这样,保存的目录结构就形如:
<m3u8_dir_path>—— |—— <486227.sdp> // 486227为用户id,APP端随机生成,可在App的设置页面查看 |—— <20190704105420> // 文件夹名表示录制的日期 |—— log.txt |—— out.m3u8 |—— out0.ts // 录制的文件保存为.ts格式 |—— out1.ts // 每个文件的时长为ts_duration_second秒 |—— <20190704123356> |—— <20190704181520> |—— <20190704210455>
-
修改源代码的
.\rtsp\rtsp-server.go
文件中的Start()
函数:dir := path.Join(m3u8_dir_path, pusher.Path(), time.Now().Format("20060102150405"))
- 获取系统时间,并Format为“年月日时分秒”的形式
-
重新编译时可能会报错找不到XX包,但其实这些包都在源码中,根据报错,调整路径结构即可
最后
- EasyDarwin是EasyDarwin开源团队开发的开源项目,是不错的学习资源,如果您要商用,还请通过官网与他们团队联系,获得商用许可。
2019.07.08