监控系统基于浏览器的无插件播放,基于移动端的扫码播放。

公司原有一套监控系统,只支持客户端应用程序播放,最近接到一个需求,用户要求能够在浏览器和手机端查看监控内容,并且不希望安装插件,及第三方app,公司原有的监控系统是整和了海康、大华等多家厂商的云平台及sdk,集成到一个客户端中,下面列出原有监控系统的架构图

可以很清楚的看到,监控设备将数据传输到云服务器,终端连接到云服务器提取监控信息。因为云服务器的软件系统是设备厂商提供的,所以终端只能通过厂商提供的SDK连接到云服务器。

考虑到浏览器无法调用SDK(IE必须通过ActiveX的方式),所以要修改现有的系统架构。经研究发现现有的主流直播平台大多使用 rtmp 和 hls 两个协议,并且 ios 默认只支持hls协议,所以准备采用hls协议进行后续工作。这里需要添加一台转码服务器,将云服务器的内容经过转码变成hls,还好设备厂商的sdk中提供了rtmp协议流的输出。接下来就用到一个神器ffmpeg,这个工具提供了一套完整的转码方案,并且支持rtmp 转 hls ,下面是经过修改后的架构图

可以看到,原有架构未进行任何修改,并不影响之前的业务,这也符合我们的设计原则。

 

架构讲清楚了,接下来讲讲具体实现的技术细节。

 

1、使用ffmpeg转码

这里为了简单我们没有基于ffmpeg源码开发,而是调用了已经编译好的ffmpeg.exe直接转码,转码的命令也很简单。

ffmpeg.exe -i "rtsp://admin:admin123@192.168.1.195:554/cam/realmonitor?channel=3&subtype=0" -c copy -f hls -hls_time 2 -hls_list_size 50 -hls_wrap 30 d:\test.m3u8

  转码命令及hls协议就不在这里细讲了。启动转码服务以后会在指定目录生成一个.m3u8文件 和一堆.ts文件。.m3u8文件是hls协议的头文件,.ts是分隔后的视频文件。我经过测试好象最小可以分到两秒一个文件。不过不建议这么做,会增加服务器压力。不过好处是可以减少缓冲时间。

   我在转码服务器中搭建了一个iis站点,转码后的文件直接放到站点内,对外提供一个文件的链接就可以进行播放了。把这个链接做成一张二维码,通过微信或支付宝等第三方应用就可以扫码直接播放了。下面是通过浏览器播放的一个效果图

 

2、动态链接

    虽然播放问题解决了,但又有一个问题随之而来,转码服务一旦启动会长驻内存,并不会主动关闭。所以用户在请求播放的时候,我们生成一个临时地址。因为hls协议的一个特点就是要不断的去服务器请求数据。我们正好可以利用这一点,实时监控这个临时地址的请求一旦超过我们定义的时间没有请求数据,就kill掉这个地址,如果当前转码服务没有任何请求的时候就可以通过程序主动kill掉这个转码进程。

好,以上是这个需求的解决方案。

 

转载于:https://www.cnblogs.com/shushukui/p/9295024.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值