本文演示了如何从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)

<
03-08 08:26