三一智能:SRS流媒体在交通行业的实践

背景

1. 工程车辆的智能化近两年,汽车新四化的在很多车企中快速地推进。所谓汽车新四化,是指“电动化、网联化、智能化、共享化“。三一重工作为工程车辆的行业领头羊,也刻不容缓地开始数智化和电动化的研发和转型。汽车新四化中最重要的一环是:智能化,即整车智能化,而整车智能化除了自动驾驶之外,最核心的部分就是智能座舱。

图片隶属三一重工泵路事业部的三一智能推出了针对工程车辆的智能座舱,除了包括带给驾驶员和乘客更加安全、舒适、智能的驾乘体验所需模块外,还提供了工程车辆所特有的功能模块。比如,通过中控或AI-Box提供低延时直播功能,可远程监控和观看工程车辆现场作业的实时画面。

2. “两客一危一重货”的智慧监管“两客一危一重货”重点车辆的安全行车问题一直备受社会关注。2020年以来,交通运输部门牵头在“两客一危一重货”重点车辆上安装智能视频监控系统。


图片在现有行车记录仪(GB19056)的基础上,新增了监控终端(JT808)和视频监控终端(JT1078),对驾驶人驾驶行为及车辆运行轨迹(车速、地理位置等)进行24小时实时监控,以便识别和预警提示双手脱离方向盘、疲劳驾驶、长时设备遮挡失效等交通违法行为。

解决方案

基于上述背景,不论是工程车辆智能化还是“两客一危一重货”智慧监管,都必须支持远程视频监控和观看的功能。图片目前,三一智能采用的控制协议+流媒体协议的技术方案以实现视频直播,其中控制协议用于远程下发控制指令,比如通知终端的推流等,而流媒体协议则只用于音视频传输。在综合对比了全网主流的开源流媒体服务器后,如:SRS、EasyDarwin、ZLMediaKit和Monibuca等,最终选择了SRS。SRS的主要优势在于:

  1. 部署和配置简单
  2. 高性能
  3. 启动快,毫秒级别
  4. 有完整的日志模块
  5. 边缘+源站集群模式,支持热备
  6. 支持多种实时流媒体协议,包括RMTP、WebRTC、HLS、SRT等
  7. 支持转码和录制
  8. 文档齐全,社区活跃
  9. 代码开源,方便定制

具体实现

三一智能目前实现了一整套成熟的视频直播技术方案,大体可分为三部分,分别是推流端、流媒体服务器和拉流端。图片

1. 推流端不论是智能座舱还是视频监控终端,推流端都属于车机的一部分。其中,推流端的通信模块通常采用4G模块。4G模块的好处是不受地域限制,更符合工程车辆真实的使用场景,缺点也很明显,即流量受限和信号的稳定性没有保障。2. 流媒体服务目前的流媒体服务部署方案是:Nginx + RTMP + SRS4.0 + Docker,可实现8路720P@30帧的视频流同时观看,且延时5秒左右。目前,在设备终端与SRS流媒体服务器之间有一层独立网关,以支持JT1087到RTMP的协议转换,未来这一JT协议转换层会合并到SRS中。另外,三一智能研究院基于工程车辆的具体使用场景,对SRS做了定制化。其一就是自动踢流的功能,此处按下不表,下文再详细介绍。3. 拉流端目前拉流端主要包括微信小程序和浏览器网页,这两种终端模式的好处的易于开发且使用方便,缺点是解码性能较差。

SRS定制化

三一智能根据工程车辆的具体需求,对SRS做了一些定制化修改,其中之一就是针对RTMP协议的自动踢流功能。由上可知,车机的通信服务是基于4G模块且流量受限,而流媒体服务恰恰需要消耗大量的流量。因此,如何节省流量成为不可避免的现实问题。除了采用降低传输码率这种牺牲用户体验的无奈之举外,及时地断开空闲的推流也是很有必要。在真实的使用场景中,以下几种情况均会导致流量的浪费:

  1. 用户打开小程序观看直播后直接将小程序切换至后台,此时小程序很可能被系统强制断网。这种情况下由于小程序可能并未告知推流端停止推流。因此即便此时已无人观看,推流端仍处于推流状态;
  2. 小程序作为观看直播的入口,当同时观看多路视频时,由于性能受限很可能出现崩溃的情况,这种情况最终导致的问题和情况1类似。
  3. 用户的手机突然关机或死机,这种情况最终导致的问题也和情况1类似;
  4. 用户通过浏览器打开网页观看直播时,浏览器很可能出现间歇性断网的情况。这种情况下,网页端很可能不会或者来不及告知推流端,最终导致推流端一直处于推流的状态。
  5. 由于流媒体传输和控制命令分别使用不同的协议,且部署服务器和方式也可能不同。一旦控制协议所在的服务器或传输过程出现问题,很可能导致推流端不能及时响应命令,最终导致推流端不能正常的推流或断开。

针对上述情况,三一智能在SRS4,0上新增了RTMP协议的自动踢流功能,且该功能已合并到SRS的develop分支中,以下是该功能的详细介绍:

  1. 实现原理:在SRS中,每一路RTMP在握手成功后会创建一个线(协)程,用于接收和处理推流端数据。因此,可在每一次轮询时检测当前的推流端是否已经处于空闲,即当下是否还有播放器在进行拉流播放。如果推流端空闲状态超过一定时长后,SRS服务器便会主动断开推流端,即自动踢流,以节省推流端的流量。
  2. 配置和启动:该功能默认是关闭的,有两种开启方式:
  1. 用环境变量设置:图片
  2. 用配置文件:在配置文件中srs/trunk/conf/full.conf中有关于kickoff_for_idle字段的详细介绍:
    图片
    可在某个指定的conf文件下的public对象中,新增一个kickoff_for_idle字段,并赋值为正数即可开启,如下所示:
    }

未来期望

SRS作为全网最受欢迎的高性能流媒体服务器之一,目前已支持RTMP/WebRTC/HLS/HTTP-FLV/SRT/MPEG-DASH/GB28181等多种流媒体协议,几乎覆盖了日常生活中的所有应用需求。目前SRS已经决定支持JT1078协议,三一智能也正式加入了SIG,正在准备推进JT1078的开发。同时也欢迎交通行业音视频开发者一同参与,一起打造交通领域最好用的开源音视频服务器。


供稿:三一智能

编辑:石文奇

审校:杨丽蕴

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论