借力SRS落地实际业务的几个关键事项

问题背景:

今年疫情的原因导致直播卖货、快抖短视频、视频会议和在线教育都迎来了井喷。这些业务的落地技术方向基本就是两大类,一类是在传统直播技术上的一些演进,另外一类就是以WebRTC技术为核心或者极其变种的低延时实时通信。

前者无非就是上行编码推流------->传输----->下行拉流解码,这一块技术方案是比较成熟的,其中就以SRS为代表,可以用SRS搭建运营级的互联网直播服务器集群。以前公司业务针对下行,有很多模块,有些是HLS协议下行分发,有些是RTMP下行协议分发,HTTP-FLV也有。这些模块零零散散,对应核心功能在SRS中都已经实现而且比较稳定,着实没必要重复造轮子。近期我们就做了一些事情,把这些成熟下行协议逐渐迁移到SRS中来,迁移过程肯定有些坑,这里简单记录下,对于一些问题给出基本的解决思路和方案,供大家参考,详细内容可以后台留言沟通。

 

方案落地:

问题1:怎么公司内部私有流、私有协议对接到SRS?

思路:开发一个流媒体代理服务,将公司私有流、私有协议转成成标准协议如RTMP-FLV即可,这样就可以将该路流推到SRS,接下来这一路流到用户端用HLS、RTMP、HTTP-FLV都可以,只取决于业务调用方调用代理接口指定需要的拉流方式即可,代理服务返回对应的拉流URL,真正做流媒体分发逻辑的SRS只需要添加相关配置启动即可,一般情况下不用改任何代码;

 

问题2推流链接和拉流链接怎么生成和管理

由于需要先将公司私有流先推到SRS上,则需要代理服务生成RTMP推流链接和播放端想要的拉流链接,推流地址的ip和端口就是SRS的RTMP所在服务器IP和端口,如果在一个机房则直接用内网地址即可,app/stream这块规划是:app跟业务有关系,其中表示将公司那块业务的流转成标准流推出去(有些流来自自营摄像头有些来自国标第三方设备和平台。也有些来自回放云储存流),stream则根据每次请求会话生成,主要包含了流源端的一些信息如设备ID号和会话ID等信息。拉流URL则配置拉流协议类型、Domain、app、stream等信息,这里的app/stream和推流链接中是保持一致的(只要请求的该路流已经在推流则有会话复用逻辑),从而便于SRS完成该路流不同协议的下行分发。

后续只要是对该路推流的观看,都是app/sream不变,只变URL的Token部分即可。

如果你对这块内容不清楚可以先参考:

https://blog.csdn.net/weixin_34143774/article/details/92715230

对一个设备的推流链接和对该路流的多个播放链接示例:

RTMP-FLV推流链接:

rtmp://10.12.10.108:1935/oss/eHh4eFNfN2NhN2IwMzE1N2M1OmEwYzBhshwMtMWRjNWUyMC0wMzY4NWM4NA

HTTPS-FLV播放链接:

A播放端播放链接:

https://stg.cqwlw.com/oss/eHh4eFNfN2NhN2IwMzE1N2M1OmEwYzBhshwMtMWRjNWUyMC0wMzY4NWM4NA.flv?token=YTBjMGE2Yy0xZGM1ZTIwLTAzNjg1Yxx0OjE2MDM0MjQzNjU

B播放端播放链接:

https://stg.cqwlw.com/oss/eHh4eFNfN2NhN2IwMzE1N2M1OmEwYzBhshwMtMWRjNWUyMC0wMzY4NWM4NA.flv?token=YTBjMGE2Yy0xZGM1ZTIwLTA1OTVlY2U0OjE2MDM0MjQ2NTY

 

问题3拉流链接URL的Token鉴权怎么管理?

代理服务给播放端返回了拉流URL,则含有token信息其中包含了有效期等,当客户端用拉流链接向SRS拉流时则会回调到代理服务中做鉴权,通过则让SRS下行分发,鉴权不通过直接拒绝客户端请求,其中SRS回调代理服务的地址可以在配置文件中直接配置。

具体参考:

https://github.com/ossrs/srs/wiki/v3_CN_HTTPCallback

https://github.com/ossrs/srs/wiki/v3_CN_DRM#token-authentication

 

问题4拉流请求链接如HTTP-FLV方案如果走HTTPS,怎么进行?

SRS前面加一个反向代理服务如Nginx,生成证书和私钥配置下就行。其次代理服务需要返回对应的HTTPS-FLV拉流链接。

当然官方也给了类似的方案:

https://www.bilibili.com/video/BV1bK4y1x7Ut/

 

问题5怎么适配多端播放需求?

这个要看业务诉求(对延时、视频质量,以及对接的业务方是否有开发能力等因素),一般情况下:

1. PC Web端播放,前端借助flv.js直接返回HTTP(s)-FLV拉流链接即可;

2. 移动APP用SDK开发即可,本质那种协议都可以对接,包括公司的私有流私有协议都可以;

3. 如果微信小程序对延时不敏感返回HLS播放链接,对延时敏感客户端有开发能力则用RTMP-FLV和HTTP(s)-FLV都可以,一般基于微信小程序的live-player媒体组件即可。

参考:

https://developers.weixin.qq.com/miniprogram/dev/component/live-player.html

 

问题6265码流怎么适配多端播放?

两种解决手段:

1. 一种协议自身就支持或者稍微改改就可以支持的,如HLS对于265码流则用HLS+FMP4方案或者DASH+FMP4,对于RTMP和HTTP,则只需要FLV扩展下CodeId即可,这个SRS4.0已经支持,我们用的3.0则自己实现了下。

2. 另外一种则服务端进行转码,我们在代理服务向SRS推流之前则完成H.265到H.264的转码,然后还是用标准的RTMP推流出去即可。

https://github.com/ossrs/srs/pull/1747

 

问题7代理服务什么时候停掉推流?

如果向SRS3.0推一路RTMP流,如果不主动停掉则会一直推流下去,浪费带宽也没必要。我们采用的手段是代理服务会定时查询app/stream这路流是否有人观看和拉流,如果没有则会主动停掉,浪费不必要的带宽和资源。

参考:

https://github.com/ossrs/srs/wiki/v3_CN_HTTPApi

 

问题8问题排查是否有啥好的手段?

用下来,SRS对于常用的协议支持还是比较稳定的,除了性能并发数限制外,没有啥大的问题。其次SRS提供了RESTFul API来查询会话拉流等信息,这块稍微集成下搞一个查问题工具即可,当然也可以通过看日志+核心业务监控等方式,对于代理服务也提供类似API,供外部排查问题工具集成。

https://github.com/ossrs/srs/wiki/v3_CN_HTTPApi

 

后续规划:

利用了SRS之后的确可以解放一部分人力,排查问题和一些重复劳动都可以利用SRS的现成能力取代,比如集群,协议转换和转封装、录制等,即使没有去SRS代码上扩展也是比较容易的。

1. 对于低延时场景后面会将代理服务或者设备侧推流逐渐切换到SRT协议上和SRS4.0进行对接,下行可以使用基于UDP的WebRTC协议等,为一些低延时场景提供方案;

2. SRS4.0提供了国标GB28181接入,我们有自己的国标接入网关,所以暂时没用,后面可以考虑接入,这样可以减少视频流传输路径经过的节点,让整个后端流媒体服务架构更清晰。

3. 可以参考SRS的一些方案和实现,搞一些创新性方案比如景区直播画中画,添加摄像头直播时的背景音乐和广告等;

 

华丽分割线


顺便打个小广告,老父亲种的苹果熟了,陕西水晶红富士。味道相当不错,酸甜适中,欢迎购买。规格:50元十斤净果,支持两种方式:

1. 添加个人微信提供地址和联系方式购买:

2. 有拼多多的可以长按图片扫描进去购买,有2元优惠券:



往期文章回顾:

视频码控:CBR、VBR和ABR

音视频常见问题分析和解决:HLS切片丢帧引起的视频卡顿问题排查

译:构建音视频直播应用需要考虑的12件事

HLS+FMP4方案对H.265+AAC支持要点

流媒体传输协议:RTMP、HLS和RTSP介绍

基于HLS-TS&RTMP-FLV的微信小程序点直播方案

一图看懂音视频核心技术栈(框架、工具和场景))

国产开源流媒体SRS4.0对视频监控GB28181的支持

从方块效应&呼吸效应看编码量化参数对流控的作用

家庭消费类摄像头选择攻略和隐私保护小建议

音视频封装小总结(PS TS 和FLV)

SDP在RTSP、国标GB28181、WebRTC中的实践

视频监控摄像头的互联网化实践思路

在HTML5上开发音视频应用的五种思路

周末活动回顾:视频质量主观评价、实时RTC和AV1

音视频封装:MP4结构概述和分析工具

音视频解封装:MP4核心Box详解及H264&AAC打包方案

音视频基础知识-时间戳的理解

音视频封装格式:AAC音频基础和ADTS打包方案详解

从人类的第一次直播聊聊视频监控行业

音视频压缩:H264码流层次结构和NALU详解

音视频传输:RTP协议详解和H.264打包方案

音视频常见问题分析和解决:延时和抖动

个人转载内容至朋友圈和群聊天,无需特别申请版权许可。

引用转载该订阅号文章,注明文章来源即可。

记得右下角点“在看”,还可以关注该订阅号,防止遗漏推送哦

 

 


今天就说这么多,祝您工作顺利!

 

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页