七牛云霍锴 WICC 2020 谈构建互动直播场景的闭环解决方案
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、内容审核的处理流程 (编辑:应用网_阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |