10月31日,第二届全球互联网通信云大会(简称 WICC 2020 )在深圳圆满落幕。七牛云架构师霍锴受邀出席此次会议,并带来了主题为《构建互动直播场景的闭环解决方案》的分享。
七牛云架构师霍锴
以下为演讲实录,略有删减。
视频直播发展到今天,在直播过程中加入互动元素已经成为标配。"无互动,不直播"这句话在今天变得越来越常见。互动直播的场景是多种多样的,主要集中在娱乐直播、在线教育、视频会议和电商直播。比如说娱乐直播中多个主播进行 PK 的场景;在线教育领域的互动课堂;企业的内部培训;或者是电商的带货直播,都可以用到七牛云互动直播解决方案。
七牛云互动直播方案的架构
对于整个方案来说,首先需要主播端通过摄像头和麦克风采集音视频数据,然后根据需求进行直播或连麦等不同场景的实现。在编码数据之前,也可以针对采集到的音视频数据进行预处理,比如说加上水印,美颜,滤镜,混音等效果。主播还可以通过人脸核验进行登陆验证,或者通过 IM 聊天室分享信息。
在主播端完成音视频的采集处理以及编码后,会将编码后的数据发布到七牛实时音视频云上,实时音视频云会根据主播的场景来选择它是单路转推还是合流转推服务,进而把单主播的画面或者把多个主播合流之后的画面通过 RTMP 转推到我们的直播云上。在直播云上,我们可以把这些音视频数据进行实时转码,比如按照不同的码率或分辨率进行转码,以匹配观众端的网络状况。并且,我们还可以把这些音视频数据进行内容审核,从而判断哪些数据是违规的,哪些数据是合法的。此外,我们也可以把这些数据进行落存储操作,用于以后的点播服务。
上面这张图我们可以比较清楚的看到音视频数据的流转过程,从客户端的采集,到互动服务器的处理转发,再到流媒体服务器的审核分发,这整个流程是怎么交互的。接下来,我会给大家介绍一下每个环节都是怎么工作的,也就是我们互动直播方案的相关技术的实践。
七牛云互动直播方案的相关技术实践
1、客户端的技术与挑战
这张图的右侧是我们在服务了众多客户后,沉淀下来的我们客户端 SDK 的几个指导性的原则:
第一是接入极致简单,接口必须人性化。我们的第一用户是程序员,所以我们必须能够做到和大家感同身受,把接入流程简化到极致,用以减轻大家的接入成本。第二是一定要保证我们的音视频体验良好。整个方案的核心还是在音视频上,所以要特别重视清晰度,延迟,卡顿,回声等这些影响音视频体验的重要因素。第三是可扩展性要强,生态化要好,可以满足客户的多种拓展性需求,如美颜处理、降噪处理等。第四是客户端自己要感知到线上运行的情况。比如有没有崩溃,堆栈信息是什么,哪个接口引起的,我们一定要做到对线上的真实情况可感知。
左侧是七牛互动直播解决方案客户端相关的主要功能,总体分为三大类型,首先是数据的采集,处理,编码,传输,播放,回声消除等这些音视频相关的核心功能。然后就是像高级美颜,人脸核验,IM 等外围业务相关的功能。最后就是数据上报、崩溃捕获等至关重要的 QoS 功能。
2、客户端的分层架构
我们整个的客户端可以抽象为三层,底层,核心层和扩展层。
底层是指包括 WebRTC,FFmpeg,WebSocket,xCrash 等我们所依赖的第三方开源库。
再往上是我们的核心层,在这一层我们会对底层进行封装,并实现我们核心的业务。比如,我们基于 WebRTC 来实现摄像头与麦克风的采集,音视频编码传输,多 Track,大小流,回声消除和降噪等一系列实时音视频的相关功能;我们通过 OpenGL 来实现水印,纹理剪裁,美颜处理等一系列视频数据的处理;通过 FFmpeg 来实现像混音,重采样等一系列音频数据的处理;通过 WebSocket 去封装信令,实现房间管理;通过 xCrash 来捕获 Android 系统上的崩溃信息。
最上层是我们的扩展层,主要是用来扩展第三方的 SDK,比如 IM,FaceID,高级美颜等外围业务相关的功能。
举例来说,有不少客户觉得接入美颜 SDK 是一个痛点,因为每一家的美颜 SDK 的接入步骤都会有所不同,他们和音视频 SDK 之间还是有着不小的 gap ,那么怎么让大家用最快的方式接入,不用考虑 OpenGL 环境,不用考虑纹理的转换,资源的加载,甚至在接入的过程中感知不到自己其实是用到了多家美颜的,这就需要我们在中间做一层可扩展性美颜插件。
3、可扩展性美颜插件
我们会把 RTC SDK 从摄像头中采集的视频数据通过回调先送到 Beauty Plugin 中,然后 Plugin 会根据美颜 SDK 需要的规格进行视频数据的转换,比如纹理数据的镜像,旋转,OES 转 2D 纹理等操作。同样的,也会对 YUV 数据按照要求进行转换。通过 Plugin 层处理之后的数据,再传入美颜 SDK 层,就可以增加美颜,美妆,贴纸,滤镜等一系列效果了,最后再把处理之后的数据通过回调函数传入我们的 RTC SDK 中进行预览和编码。在这个过程中,我们的美颜插件还会对美颜资源进行整理和加载,以方便用户对资源的控制。而对外来说,我们仅仅提供几个最简单的方法,从而极大地减少了接入成本。
4、单主播直播
主播端的数据到了实时音视频云之后,如果是单主播直播,没有连麦的场景,那么我们就通过单路转推,把 RTC 流转换为 RTMP 流,然后再转推到我们的视频直播云上。
5、多主播连麦直播
如果是多主播连麦直播的场景,那么就通过合流转码,也就是首先要把各个主播的画面进行合并,然后再转成 RTMP 流推送到视频直播云上。
6、内容审核的处理流程
音视频数据到了直播云上,我们还可以对这些数据进行内容审核,只有通过内容审核的音视频数据才能够给到观众进行观看。
首先我们把数据流分为视频数据和音频数据,对于视频数据,会抽帧成一张一张的图片,然后进行图像识别和文字识别。对于音频数据,则会分切成一小段一小段的音频,然后对这些数据进行语音识别,也就是把语音转换为文字,从而能够知道具体的内容是什么;另外还可以对音频数据进行自然语言的理解,因为一些违规音频表达变化多端、 内容隐晦,所以需要通过语义理解知道它真实表达的意思是什么;最后,还可以通过声纹识别鉴别出里面是否有一些敏感人物的发言。
经过审核的音视频数据会被打上是否违规的标签然后实时地回调给用户,我们的用户可以通过这些信息从而把违规的数据丢弃掉。同时,也可以在我们的复核平台可视化地对这些数据进行复核。
7、数据驱动下的运营分析与质量监控
我们的互动直播方案是和七牛自研的 Pandora 数据分析平台内部打通的,所以我们可以通过数据打点,把一些质量数据(如分辨率,码率,帧率,丢包率,延迟等),业务数据(如房间数,连麦时长,用户量等),设备数据(如手机型号,系统版本,CPU,内存占用情况等),或者一些事件数据(如服务端的内部状态,客户端的信令日志等)给上报到数据分析平台之上。而我们的 Pandora 平台就可以对这些数据进行清洗,存储,搜索,监控,分析,最后形成报表。有了这些数据,我们就可以全方位地感知到线上的情况,例如,可以进行运维风险的预警,实时质量的监控,或者进行优化功能迭代,分析运营数据等,如下图,是我们一个 demo 的运营数据报表。
下图是我们的可视化质量监控系统,可以看到,我们能够定位到某一位客户,某个房间,某一路 Track,某一段时间的相关数据,包括丢包率,帧率,码率,RTT 等。
通过我今天的分享其实可以看到,打造一个互动直播的闭环解决方案是非常复杂的,不仅要包括一套端到端的音视频数据的实时传输通道,要有美颜、人脸核验等这些外围业务的扩展方案,数据的存储方案,最后还要有一个强大的数据分析平台。七牛云通过 One Product 的理念,把各个环节以数据为线索,自然地串联起来,让开发者真正感受到一站式的接入体验。