利用摄像头的rtsp源实现音视频直播

背景说明

说起这个也是无意中的发现,说来也是闲的蛋疼。

期初依旧是在研究门口的那个摄像头,因为之前用的shinobi的docker容器来实现监控视频录制的,然而,还是太年轻,因为用的是unraid,容器居然识别了unraid的docker.img的剩余空间作为存储空间的大小(猜测),我尝试过分配其他的存储环境始终不行,拖延症一直没去解决。关键是某一天,需要看回放的时候,回放的内容被覆盖了,天哪!所以,干!

于是想到,每次NR推送门口有人的流里面加上视频录制不就好了,说干就干,也确实实现了这个,触发PIR满足条件,就开始录像,同时推送微信消息,但是因为是录像,所以要等,要等到设置的时间到了以后才能看到视频内容,但是宝宝有时候等不了怎么办?!

所以,想到了直播!

于是就有了这个啦,来啦~

实现方法

执行这个命令就好了

ffmpeg -i "rtsp地址" -c copy -vbsf h264_mp4toannexb -f hls -hls_time 30 /文件保存位置/playlist.m3u8

这里有3个地方要说明一下,

  • rtsp地址:就是摄像头的rtsp地址啦;
  • -hls_time 30:设置为30秒切割生成视频文件;
  • /文件保存位置/playlist.m3u8:播放列表和视频文件的存储位置,要外网播放的话,就要让这个目录能被外网访问,这个不用教的吧。。。
    要访问这个直播的话,只需要访问:http://URL地址/playlist.m3u8

测试效果

经过几个小时的测试,效果很棒,原始码流视频清晰,几乎没有什么CPU和内存占用,因为是直接复制的原始数据,并没有进行再编码操作。多客户端同时访问也没什么问题,手机打开也很快。

后续改进

当然这里也有几个问题还需要解决,

  • 直播有2分钟的延迟
  • 可选择播放清晰度
  • 直播不能回放
  • 回放指定具体时间的视频

三木桑,牛!!厉害了!感谢分享!!