前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >借力SRS落地实际业务的几个关键事项

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

作者头像
潇湘落木
发布2020-11-12 14:32:26
1.7K0
发布2020-11-12 14:32:26
举报
文章被收录于专栏:智媒黑板报智媒黑板报

问题背景:

今年疫情的原因导致直播卖货、快抖短视频、视频会议和在线教育都迎来了井喷。这些业务的落地技术方向基本就是两大类,一类是在传统直播技术上的一些演进,另外一类就是以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

问题6:265码流怎么适配多端播放?

两种解决手段:

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的一些方案和实现,搞一些创新性方案比如景区直播画中画,添加摄像头直播时的背景音乐和广告等;

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 智媒黑板报 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档