在线教育直播系统中的视频技术

319 阅读4分钟

对于直播平台来说,为了保障各种网络环境下能够流畅的观看视频,需要将高清的输入流转换出多路不同清晰度的视频流,以支持不同网络条件下视频清晰度的切换,而由于不同的端所支持的协议及封装格式并不完全相同,比如无线端的HTML5页面可以很好的支持HLS协议,但是对于RTMP这类协议基本无能为力,而PC端为了降低延时,需要采用RTMP这一类流媒体协议。

因此,为了支持多终端(PC、Andriod、iOS、HTML5)观看,需要对输入流进行编码及封装格式的转换。转码完成之后,还需要对视频流进行分发,毕竟源站的负载能力有限,节点数有限,离大部分用户的物理距离远,对视频这一类十分占用带宽资源的场景来说,为了提高播放质量减少卡顿,需要尽量减少到用户的传输链路。

因此,通常的做法就是将视频流进行切片存储到分布式文件系统上,分发到CDN,或者是直接通过CDN进行流的二级转发,因为CDN离用户最近,这样才能保证直播内容对于用户的低延时,以及用户的最短路径访问。客户端对延时的要求,以及采用何种协议,决定了视频是否需要分片,分片的目的在于,通过HTTP协议,用户不需要下载整个视频,只需要下载几个分片,就可以播放,实际上直播与录播的技术是相通的,区别在于直播的流无法预测终结时间,而录播的视频流终止时间是已知的。

对延时要求没那么高的场景来说,客户端可以采用HLS协议,毕竟IOS、Andriod、HTML5等无线端应用能够很好的兼容和支持,且常用的静态资源CDN可以不做相应改造,就能支持,但是HLS协议的一大天生缺陷就是延时较高,视频内容在切片、分发、客户端下载的过程中耗费了很长时间。对于时效性要求非常高的场景,就需要采用RTMP、RTSP一类的实时流媒体协议,来降低延时,并且,为了降低源站的压力,需要CDN边缘节点来做流的转发,那么,CDN就必须得支持相应的流媒体协议,也就是通常所说的流媒体CDN。

由于直播流由主播上传,如何控制违法违规内容特别是黄色内容,成了十分棘手的问题。令人欣慰的是,随着技术的发展,算法对于黄色图像的识别准确率已经很高,基本达到可以在生产环境应用的程度,因此我们也尝试在视频流分发之前,对视频帧进行提取,并且将图像交给算法进行识别,当超过预设的阈值时,可进行预警或者关停直播间。经过一段时间的实践,取得了一定的效果,降低了人力成本,但不可避免的是图像识别算法时间复杂度高,吞吐率较一般算法低。

直播整个链路是比较长的,包含有接流、转码、切片、分发、客户端下载、播放等众多环节,链路上任何一个节点有问题,都可能导致视频不能播放。因此,关键节点的监控就十分重要,除此之外,还需要对整个链路的可用性进行监控,比如,针对HLS协议来说,可通过监控相应的m3u8索引列表有没有更新,来判断视频直播流是否中断。

当然,如需判断视频流中的帧有没有花屏、有没有黑屏,就更复杂了,况且,监控节点所访问的CDN节点与用户所访问的CDN节点可能并不在同一地域。当前中国的网络环境,特别是跨网段的网络访问,对于流媒体应用来说,存在较大的不可控因素,客户端网络接入环境对视频的播放有决定性影响。

因此,收集终端用户的播放数据质量数据进行反馈,及时进行视频清晰度切换, 显得特别重要。这些数据包括客户端的地域分布、播放卡顿信息、视频分片加载时间等等,根据这些信息反馈,可以较为全面的评估CDN节点部署是否合理,是否需要新增CDN节点,视频的转码参数对于不同机型的兼容性等等,及时进行调整以改善用户体验。