Skip to content

基于FFmpeg , 使用Python3 开发的 rtsp 视频转流成 hls 格式视频的自动控制工具

License

Notifications You must be signed in to change notification settings

sang8052/hn_rtsp2hls

Repository files navigation

hn_rtsp2hls

公司曾经有个监控视频的播放需求,我们需要从海康威视,大华等品牌厂商的录像设备中拉取 rtsp 格式的视频流并在前端实时播放。rtsp 协议的视频想要在不借助插件的情况下在现阶段的主流浏览器中播放,几乎是不可能事件。(Chrome 已经从2021年起彻底终止了Flash 支持,所以借助Flash 控件这种方案是肯定不行的了)。在这种背景下,想要在前端播放视频监控,就必须在服务器上对视频进行转码。

  • rtsp => rtmp => nginx => hls 该方案是我们公司采用的第一套方案,也是网上百度一搜就能搜到的通用方案。主要是通过 ffmpeg 将视频转码成rtmp 格式的视频流,并推送到 nginx ,客户端在前端浏览器中通过 rmtp 拉流,或者 hls 拉流。下面说说我的看法,这种方案好处时 rtmp 的视频流延迟较低,(实在想不出其他好处)。但是缺点非常多,首先服务器需要对视频流做两次转码,开销极大。rtmp 转 nginx 时,nginx 还需编译安装相关的模块才能实现,环境复杂。多重转码的过程中,稳定性较差,其实主要是网上写的那些例子真的不想说什么,丢失了很多重要的参数。 我们公司在执行该方案时,后端是使用Java 写的一个shell , 由于我本人不是搞Java 的, 而且加上 rtsp 视频流本来就很不稳定,所以客户体验较差,画面卡顿,经常出现播放 1分钟左右就无画面的现象

  • rtsp => hls 该方案是查阅了大量资料后的改进版,其核心思路依然是使用 ffmpeg 对视频进行转码,但较第一套方案,这套方案,对切片过程中的参数做了详细的学习,切片质量更好,速度更快,延迟更低,且不需要借助 nginx 二次转流,可以直接在公司现有的 tomcat 环境下运行。为了解决 Java 对服务器底层控制难的问题(我认为是能力问题),用Python 写了一个控制器 , 借助 Flask 框架 暴露REST 接口
    1.设定了视频转流进程的最大运行时间,超时自动终止。
    2.设定了转流进程监听机制,异常退出自动重启进程。
    3.视频Id 缓存机制,一个视频Id只会拉起一个进程

Version:1.0.beta

具体部署说明 和传参标准 请参阅语雀文档 https://www.yuque.com/docs/share/de97729f-d303-4d1d-b278-90e314cae6db

About

基于FFmpeg , 使用Python3 开发的 rtsp 视频转流成 hls 格式视频的自动控制工具

Resources

License

Stars

Watchers

Forks

Packages

No packages published