rtsp拉流并推送到rtmp服务器且循环录像
本文演示了如何从rtsp源拉取视频,推送到rtmp服务器,同时将视频保存为mp4到本地,5分钟一段。
背景
- 海康的一款球机不支持萤石云对接,我将其接入阿里云ECS服务器上的HikDeviceGateway视频网关
- 需要支持录像和手机预览
- ECS下行带宽只有1Mb/s
- ECS为共享型,CPU很弱不能胜任转码的任务
计划:
- 鉴于带宽的限制和清晰度的要求: 将相机设置为1080P、变码率、15fps、最大码率2048Kbps、平均码率1024Kbps、H265、开启Smart 265、图像质量中
- 鉴于CPU的性能: ffmpeg拉取的数据不重新编码,直接推送到zlmediakit,供HLS预览。web端采用h265webjs,支持h265的mp4和hls
- 鉴于录像的要求: ffmpeg拉取的数据输出二路,一路用于rtmp推流,另一个路则往管道里写入rawvideo。使用PyAV从管中读取数据,demux为一帧帧数据,再mux为mp4。按时间对文件做分段(遇到关键帧时分段)
版本信息
操作步骤
RTMP服务器搭建
docker run -id -p 1935:1935 -p 8080:80 -p 8443:443 -p 8554:554 \
-p 10000:10000 -p 10000:10000/udp \
-p 8000:8000/udp -p 9000:9000/udp -v zlmediakit/zlmediakit:master
从管道中读取数据,保存录像(save.py)
<