开源流媒体服务器:为何一定得再撸个新的( 三 )


安全方面,CDN也有播放的鉴权,例如限制一定的参与人数,对内容进行加密等,Token也是一种鉴权方式 。除此之外,我们还需要一种接入标准如GB28181《安全防范视频监控联网系统信息传输、交换、控制技术要求》,尽管其属于一种标准,但非常私有,CDN不太好去支持该标准 。云计算CDN更适合去做标准的事情,基础设施、分发等都需要标准来规范 。如果接入协议非常私有,那么自建一套媒体中心更符合企业需求 。将内容转换成标准协议发送至CDN或者其他企业,相对而言更加容易实现互联网化 。
在特殊场景下,如为跨国直播设计的远距离传输当中,数据大多是通过专项网络进行传输,也可以走互联网或SRT 。这些特殊的场景与业务强相关,并不太适合用统一的标准来框定,其规模不足够大也不能够成为标准 。
2. Scalability——基于Cloud或对接CDN

开源流媒体服务器:为何一定得再撸个新的

文章插图
 
上图展现了基于云部署或对接CDN的部署图,SRS的Demo网络就是这么部署的 。其主要用K8s来部署,也可以用二进制来部署,包括边缘集群、媒体中心、源站等 。流的输入端会退回非标准协议下的传输流,并将标准的RTMP流推送到源站 。随后沿边缘CDN,经过RTMP、FLV等标准协议进行分发,如果规模不够大则直接从云机房当中播放分发,即便是切片协议也可以通过NGINX分发 。因为数据可以对堆积到CDN,所以该系统具备伸缩能力 。协议主要通过RTMP,也可以通过CDN,CDN现在也支持WebRTC,也可以通过RTC来对接,但RTC中有很多私有的东西,未来RTC可以走CDN,但还需要一定时间才能实现 。
3. Latency3.1 实时流媒体直播
开源流媒体服务器:为何一定得再撸个新的

文章插图
 
关于延迟,SRS现在支持了WebRTC的播放,推流很快会被支持 。上图视频画面显示的是一个时钟,OBS抓取时钟运行的画面 。OBS本身有100毫秒左右的延迟,通过RTMP和WebRTC播放器播放该时钟运行画面,可以看到时钟指示数字出现明显不同,这也体现了二者的延迟差异 。
3.2 实时流媒体系统
开源流媒体服务器:为何一定得再撸个新的

文章插图
 
对GB28181进行测试,从上图实验结果我们可以发现,HIKVISION监控内网摄像头延迟为280毫秒、阿里云服务器WebRTC延迟约为210毫秒、阿里云服务器RTMP延迟1100毫秒 。我们可以看到WebRTC服务器比内网监控摄像头的延迟还要低,出现这种情况主要是因为延迟并不单纯是网络问题 。该场景下WebRTC延迟比监控还要低,且具备场景下载的能力 。监控大多会走私有传输路线,传统方案若想正常播放则需要安装IE插件 。而通过标准协议大家想要从手机端看到,手机只需要直接集成SDK,同时浏览器也可以直接看到画面,这样不需要安装任何插件,各个摄像头的流都可以看得到 。
4. 举例4.1 Cloud Native
开源流媒体服务器:为何一定得再撸个新的

文章插图
 
第三部分是部署,SRS支持K8S和Docker部署,包括我们每个新发布版本都会支持Docker 。上图主要展现了如何部署K8S,这里我就不再赘述,大家可以仔细观看相应文档 。
以前我们主要通过二进制安装包来部署,其实SRS有多个镜像仓库,可以加速代码下载 。仓库小下载速度也很快,编译、安装、启动等相对容易,其实Docker的部署方式更容易 。最近陆陆续续有一些朋友反馈说编译存在一些问题,但Docker实际上可以在任何平台上部署,例如windows就完全可以部署Docker并运行,ARM平台上则可以交叉编译 。有时需要我们解决的问题会比较多,但如果使用ARM的Docker编译就没有问题 。因为Docker的环境是不变的,Docker是将环境、编译等问题统一解决,包括k8s等都可以在发布的时候实现不中断服务升级,业务低峰期时就可以发布新版本 。
4.2 错误&日志
开源流媒体服务器:为何一定得再撸个新的

文章插图
 
上图展示了SRS的日志,其中存在进程号与ID 。一个ID代表服务器上的一个连接,一个服务器为成百上千个用户与进程提供服务,ID用于定位问题出现的位置与所属上下文日志 。流媒体与HTTP不同,作为传输流存在上下文 。长时间的数据交换使得其日志不仅仅只有一条,中间发生的事情都会通过日志来呈现 。特别是RTC的日志非常多,如何从服务器中摘取关键信息?其实SRS设计了一套机制,也就是知道每个用户的日志究竟是什么,并及时从中摘取出 。


推荐阅读