在线教育平台,除了维护好师资、学生供需等核心内容资源,还得兼顾线上授课经常发生的技术问题,比如上课卡顿、录制中断等。
在线教育常见的技术问题 △
如何有效减少此类技术问题?也许上云是个好方案。
在线教育的互动直播系统上云,能够避免业务侧重复造轮子、提高资源利用率、降低开发和运维成本,且因其基于音视频开源标准和主流方案,能够更容易跟随技术发展的步伐。
本文以企鹅辅导为例,探讨在线教育上云业务的实践。
企鹅辅导是针对初高中生推出的在线教育平台,通过多媒体及其他数字化手段来模拟老师和学生之间面对面的实时互动教学,并提供习题练习、答疑等服务。点播、直播、互动互动直播作为企鹅辅导核心功能,上云后能够带来的好处:
· 实时、流畅、稳定的互动直播体验
· 支持多协议、多码率的流下发
· 支持超大规模直播房间
· 支持多路音视频连麦
· 直播自动录制&存储
· 云端在线/离线视频转码
· 支持视频内容加密
· 完善的监控和数据统计
01
整体架构
上图描述了从腾讯云互动直播到回放生成的整体架构,其中涉及到的关键技术点有:
1.旁路直播
腾讯云互动直播使用UDT(私有RTP)协议,互动直播系统支持自动旁路,能够将老师音视频、学生音视频/学生纯音频从UDT协议转封装成RTMP协议后旁路推送到直播系统。
2.自动录制
直播系统支持多种格式(HLS/FLV/MP4)的音视频流手动/自动录制,录制结束后会以HTTP回调的方式将录制文件的详细信息通知业务侧,教育后台将这些信息记录到DB。
3.时间戳上报
同一房间内可能有多路流,且同一路流可能生成多个录制文件,为能够将多个录制文件的基准时间戳统一到服务器时间,客户端在流状态变更(开启和关闭)时进行事件上报。
4.教育转码
教育后台判断一个房间内直播任务结束,会拉取该任务下所有录制文件,对齐基准时间戳后进行离线转码,生成PPT和画中画两个FLV回放文件,再上传到腾讯云点播系统。
5.云端转码
为了支持多分辨率,视频加密,水印,视频封面截取等功能,调用点播系统API进行云端转码,转码成功后会以HTTP请求回调业务侧。
6.实时绑定
如果画中画和PPT的云端转码都成功结束,会在回调接收时立即绑定到回放,用户便可以观看回放视频。
在线教育互动直播场景与一般互动直播场景的主要区别在于回放,老师通常会同时上行PPT(屏幕分享)和头像(摄像头)两路音视频流,同时可能有多路学生连麦互动的音视频流,在回放生成时需要生成多个录制文件,且保证回放播放时多路流是实时同步的。
在考虑老师流模式切换、异常断流、网络抖动等情况,腾讯云会录制成多个文件碎片,这些独立的碎片文件没有统一的时间坐标系,如何将它们进行时间对齐、补帧、拼接是需要业务侧自行处理,所以企鹅辅导后台需要拉取所有的碎片进行离线转码,再重传到腾讯云点播系统。云端转码结束后,辅导后台会在回调接收时立即绑定回放到直播任务上,用户便可以观看回放视频。
02
企鹅辅导回放处理流程
直播录制回放于在线教育有着核心的价值,因为:
(1)学生可能会因为各种原因错过直播时间,但又不想因此耽误学习进度。
(2)学习是反复练习的过程,回放提供了重新学习的机会。
(3)在机构和老师的角度,在知识付费的潮流下,回放是一种重要资产。
上云后,对后台系统的最大改变在于回放生成上,旧的架构基于旁路的私有UDP协议的,由业务后台自行录制和转码,上云之后录制被转移到云上,录制完成以回调的方式通知业务侧。
直播录制文件生成后,从回调接收到教育转码上传的整体流程,其中主要涉及3个服务(回调接收,离线转码,视频上传)、2个定时脚本(生成转码任务,发起视频上传)、1组数据库表。其中服务支持平行扩展,脚本采用分布式部署。
这套架构采用定时任务驱动,能在直播结束后约1.5小时内生成回放,还有较大优化空间:
1.去掉定时任务
流程中定时任务占用不少时间(接近一半),可以改为消息主动触发机制。
2.转码性能优化
·现逻辑每次读4个任务执行转码,全都完成整个进程才退出,容易导致CPU使用不充分和任务积压。
·分布式转码。
·ffmpeg调优。
3.上传服务优化
定时脚本发送请求给上传服务,上传服务使用线程池模型,高负载情况下容易丢失请求和超时。原因是定时脚本只负责发送,没有考虑到上传服务负载。
4.审核服务优化
简化审核逻辑。
03
版权保护
伴随着教育信息化产业迅速发展也出现了许多问题,其中就包括:作为教育从业者核心价值内容的教学回放容易被盗取和传播,版权保护难度大。企鹅辅导在上云之后,利用多种手段对教育内容进行版权保护,采用:HTTPS 防盗链 回调鉴权 视频内容 水印的手段给版权威胁者带来最大阻力。
1.使用HTTPS
HTTPS协议在网络传输层进行非对称加密,能够防止中间人窃听劫持,可以防止直播的视频数据被窃取。适用于HTTP-Flv和Hls直播场景。
2.直播防盗链
防盗链的基本原理:
业务侧和腾讯云约定加密密钥和校验参数,用来生成防盗链参数追加到媒体流的URL尾部, 直播时CDN或者接口机根据这些参数做校验,如果校验通过,则返回正常的视频数据,否则返回403错误码。
如下图所示链接,txSecret字段是加密参数,txTime是链接有效期。
rtmp://bizid.liveplay.myzijiebao.com/live/bizid_id?txSecret=xxxx&txTime=xxxx
3.实时回调鉴权
在防盗链的基础上,腾讯云支持在媒体流URL尾部附加更多参数,每当用户拉流时将这些参数实时透传给业务侧进行鉴权,这样业务侧可以灵活的设置鉴权参数,执行更加灵活的权限派发和续期策略。
rtmp://bizid.liveplay.myzijiebao.com/live/bizid_id?xSecret=xxxx&txTime=xxxx&uid=12345678&delutai=1&roomid=6666666&platform=1&op_cmd=XXX
4.HLS加密
防盗链和回调鉴权能够确保直播流地址的唯一性、时效性,可是无法防止拷贝链接和下载后传播。为此,需要对视频内容本身进行加密。
视频加密的原理:
流媒体传输协议都必须把视频流拆分成连续的小块之后再被传送,只不过不同协议分块大小和视频容器的格式不一样而已。流媒体加密技术的核心就在于对这每一小块视频分别使用对称加密算法,在服务端加密客户端解密,通过权限验证的用户才能拿到解密一小块视频的密钥。
腾讯云点播平台支持多种加密形式,在此举例HLS格式标准的视频加密方案,安全级别达到:
· 使用AES-128对视频内容本身进行加密;
· 支持对单个视频文件使用多个密钥进行加密,避免单个密钥泄露导致整个文件泄密;
·源文件地址保密;
5.水印&跑马灯
视频加密并非版权保护的最终手段,考虑如下场景:
·为支持下载后的离线播放,解密密钥需要保存在客户端,有可能被获取。
·有权限的用户,可以采用技术手段得到解码后的视频。
·用户录屏。
因此,水印和跑马灯成了版权保护的最后一个方法。
04
HLS加密播放架构
1.HLS视频格式
首先对HLS视频格式进行简单介绍,方便对HLS加密视频的播放系统架构更好的理解,HLS文件的多级索引结构如下:
·一级索引文件(MasterPlayList)
#EXTM3U
每个M3U文件第一行必须是这个tag,起标示作用。
#EXT-X-VERSION
指定了协议的版本号。
#EXT-X-STREAM-INF
BANDWIDTH指定视频流的比特率、RESOLUTION指定视频流的分辨率、PROGRAM-ID无用无需关注。
#EXT-X-STREAM-INF下一行
二级索引文件(m3u8)的路径,可以用相对路径也可以用绝对路径。
·二级索引文件(m3u8)
#EXT-X-TARGETDURATION
指定当前视频流中的切片文件的最大时长,即这些ts切片的时长不能大于该值。
#EXT-X-MEDIA-SEQUENCE
定义当前m3u8文件中第一个文件的序列号。
#EXT-X-PLAYLIST-TYPE
提供关于PlayList的可变性的信息,如果是VOD,表示当前的视频不是一个直播流,而是点播流。
#EXT-X-ENDLIST
表示这个视频结束,这个标志也说明了当前的流是一个非直播流。
#EXTINF
表示每个ts切片视频文件的时长。
#EXTINF下一行
出ts文件的实际下载地址,这里使用了相对路径。
·视频文件(ts)
ts文件中封装了真正的音视频数据,具体格式比较复杂。
2.发起加密转码
在完成教育离线转后,需要上传到点播平台并发起HLS加密转码:
1.上传回放到腾讯云点播平台后,发起HLS加密转码。
2. 点播平台根据调用方指定的加密参数模板,读取密钥获取方式、用户获取解密密钥的URL,然后从指定KMS系统中获取视频加密密钥DK、EDK。
3.拿到DK、EDK之后,点播转码平台依照指定的加密算法用DK对视频进行加密转码,同时将获取解密密钥的URL写入视频文件中。例如,对于HLS,该URL会被写入到m3u8文件的EXT-X-KEY标签中。但在写入之前,转码平台会在该URL的QueryString中增加三个参数:
· fileID:被加密文件的ID;
· keySource:KMS的类型,为以下三种之一:
·VodBuildInKMS:腾讯云点播内置KMS(默认);
·QCloudKMS:腾讯云KMS系统;
·PrivateKMS:用于自有KMS系统。
·edk:即DK对应的EDK。
4. 加密转码后的HLS视频,会输出到Cos系统中存储。
5.加密转码完成后会回调通知业务侧。
3.视频播放
回放绑定到直播任务上之后,用户可以使用腾讯云播放器播放加密后视频:
整体流程是:用户在播放加密视频的过程中,每当播放一个新的ts分片视频时,播放器首先请求“EXT-X-KEY”标签中的业务侧链接,请求中会携带观看者的身份认证信息(Cookie或者Url参数),业务侧根据身份认证信息执行权限校验,通过后会返回DK给播放器用于解密视频。
1.播放器请求“EXT-X-KEY”标签中的链接获取密钥DK。
2.业务鉴权服务根据观看者身份认证信息进行鉴权。
3.为了应对高并发场景,这里对密钥进行缓存,所以鉴权通过后会先去缓存中读取秘钥。
4.缓存失效时,再去腾讯云KMS平台请求密钥,并同时刷新缓存。
5.将密钥DK返回给播放器。
05
教育转码-多路对齐方案
直播结束后,在拿到同属一个直播任务的若干录制文件之后,企鹅辅导后台转码SDK需要将其进行碎片拼接、断流补帧、连麦混流、多路对齐等处理,完成这些操作基于一个关键前提:
输入转码SDK的音视频帧需要按PTS整体有序。
由于多个FLV文件之间无法按时间排序(实际上能做到秒级别排序,但是不满足业务要求),且每个FLV文件内部的音视频帧都是从0开始的,这样多个FLV文件内所含音视频之间便无法进行排序。
为解决此问题,必须将多路FLV文件的基准时间对齐到同一个时间坐标系。
转码服务架构
在完成了FLV文件基准时间戳对齐之后,每个FLV文件具有对齐后的基准时间,其内部的音视频帧的真正时间戳只需在其PTS基础上加上这个FLV基准时间。为了能并行读取多路录制文件进行整体排序,这里使用了多路归并排序方案,整体架构简图如下:
上云后,课程直播、视频转码、音视频不同步等基础视频技术问题,会由云厂商的技术兄弟们帮忙解决。想到这里,我不禁露出姨母般的微笑。
技术树洞
关注“腾讯云视频”
聊天窗口关键字“技术支持”,我们将会为您解答在线教育直播录制回放相关业务问题。
▼
音视频交流群友,正在召唤你
扫一扫下方二维码,加小编微信,进群交流
(由于群友已超100人,需加成员拉进群)
▼
扫一扫下方二维码,关注“腾讯云视频”公众号
获取更多视频技术服务
点击“阅读原文”
获取互动课堂方案