互动直播、线上会议、在线医疗和在线教育是实时音视频技术应用的重要场景,而这些场景对高可用、高可靠、低延时有着苛刻的要求,很多团队在音视频产品开发过程中会遇到各种各样的问题。例如:流畅性,如果在视频过程中频繁卡顿,基本上就很难有良好的互动;回声消除,经过环境反射被麦克风重新采集并传输,这也会影响互动效果;国内外互通,越来越多的产品选择出海,海内外互通也是技术上需要解决的点;海量并发,这对音视频产品的抗压能力而言是很大的挑战。

5 月 29 日,在 「QCon 北京全球软件开发大会」上,由声网Agora 技术 VP 冯越作为专题出品人发起的「实时音视频专场」,邀请到了来自新东方、伴鱼英语、声网Agora 的技术专家,与大家分享了下一代视频引擎架构、大规模实施音视频系统的难点与跳转、语音测评及本地化实践、前端音视频播放器的研究与实践等话题。

01 声网下一代视频引擎架构探索

随着音视频技术快速发展,音视频实时互动在多个领域(社交娱乐、在线直播、医疗等)中都得到了广泛的应用。同时伴随着 AI 技术在图象处理中的快速发展,融合了 AI 算法的高级视频前处理功能也得到了越来越多的应用。场景的丰富多变对下一代视频灵活可扩展功能提出了很高的要求。

声网Agora 负责下一代视频引擎架构设计的架构师李雅琪首先为大家带来了关于《声网下一代视频引擎架构探索与实践》的分享。

为了能更好地满足对于视频体验的场景丰富性、用户差异性以及对直播体验的需求,声网将下一代视频处理引擎设计原则和目标总结为以下四个方面:

1、要满足不同的用户对集成的差异化需求;

2、要做到灵活可扩展,可以快速的支撑各种新业务和新技术场景落地;

3、要做到快速可靠,对于视频处理引擎核心系统要提供丰富强大的可能,且能够极大地降低开发人员心智负担。

4、要做到性能优越可监控,要持续优化视频直播处理引擎性能,同时提高监控手段,实现质量数据透明。

针对上述四个设计目标,声网具体采用了哪些软件设计的方法呢?

由于引擎的使用者是天然分层的,一部分使用者要求低代码快速上线,需要引擎尽可能提供贴近他业务的功能的API;而另外一部分用户,希望引擎可以为他们提供更多的核心视频处理能力,在这之上可以按照自己的需求定制视频处理业务。因此,根据这个用户形态声网也采取了业务组合加核心功能的分层业务设计,High Level API 面向业务提供易用性,Low Level API 提供核心功能和灵活性。为了把灵活编排能力作为视频处理引擎的能力开放给开发者,让开发者可以通过灵活自由的 API 组合,根据不同的业务需求进行灵活编排,声网的视频处理引擎核心架构采用了 Microkernel Architecture 的架构模式,分离了整个引擎的变量和不变量。通过微内核的架构模式实现灵活可扩展的目标: 各个模块功能可以快速扩展,视频处理管线也可以通过搭积木式的组合来实现业务的灵活编排。

如果我们没有一个稳定可靠的核心系统,一个开发人员要从零开始在视频处理管线上开发一个美颜插件,需要考虑其自身业务逻辑以外的很多问题: 模块的位置、数据格式转换、线程模型、内存管理、属性配置等问题,针对这一系列工程相关的集成问题声网将解决方案固化到底层核心系统当中,为用户提供了丰富强大的基础功能。这套视频引擎核心系统包括了基础视频处理单元、管线搭建和控制、视频基础格式算法支持以及系统基础设施等功能。有了这个核心系统,集成就会变得非常简单,插件只要按照核心系统接口协议约定,实现相关的封装接口就可以了。丰富强大的核心系统功能极大地降低了模块开发者的心智负担,从而帮助开发者提升整体的研发效能。

在性能优越可监控部分,声网优化了移动端数据处理链路,分离了控制面和数据面,提升了整体数据视频的传输效率。另外还构建了视频处理特性相关的内存池来降低系统资源消耗。最终实现了全链路视频质量监控机制,使视频优化性能达到闭环反馈的效果。

02 自研大规模实时音视频系统的难点与挑战

来自声网Agora 的行业架构师董海冰作为 RTC 领域的长期深耕者在大会中为大家普及了 RTC 相关的基础概念,同时也详细分析了 RTC 的场景特点以及在自研过程中的架构设计和难点。最后,对于 RTC 未来的发展方向也分享了他自己的看法。

相较于传统互联网应对大规模、高并发已经较为成熟的解决方案:缓存、异步、分布式,实时音视频领域所面临的挑战其实会更为复杂。“实时”要控制在 1 秒以内才能叫做“实时”。比如做缓存,其时间都是秒级别的,或者分钟级别的,很少出现毫秒级别。实时音视频(RTC)在应对大规模、高并发场景时,需要考虑到音视频质量、流畅性、低时延、可伸缩以及可用性等问题,这是做实时音视频和传统互联网很不一样的地方,也意味着其解决方案也会更为复杂。

在开发过程中,用户常见的挑战有开发成本、网络搭建、质量监控、音频处理和最后测试等问题。在分享中,董海冰就举了一个音频自研的例子。首先,音频传输最关键要解决的问题有 3 个:无声/声音小、回声、噪声/杂音。其次,弱网对抗能力也非常重要,在网络发生变化的时候,怎么通过码率和帧率调整能够缓解变化,同时要解决在智能路由算法里面实现最优路径的选择与传输等问题。另一个挑战就是多维度的质量评估,而且要做到实时化的评估,同时和动态调整形成一个闭环,这样才是最好的方式,能够在弱网对抗里面起到比较好的作用。而对于使用开源服务端的难点,董海冰也对几个常见的方案(Jitsi/Jitsi VideoBridge、Kurento、Licode/Erizo、Pion、Janus)进行了探讨与分享。

除了服务端的开发,实时音视频的运维及质量监控也与传统的互联网方式有些不同。比如在运维方面,除了常见的容灾规划、容器化部署、自动化运维、性能分析及日志系统外,实时音视频中的运维还需要面对全球网络(跨区域、跨运营商)、Lastmile 策略等挑战。

如果用户选择了自研的方式,可能还会面对大规模连麦、RTC录制/回放方案、运营成本的控制等问题。但即便我们需要面对和解决如此多的困难和挑战,不能忽略的是实时音视频技术正在被应用在越来越多的场景下,也拥有着越来越多的可能性。

MetaVerse 译作元宇宙,是近期比较热的一个概念。在现实生活中我们可以把它理解为是一种角色转换,在虚拟世界中是另一种全新体验,实现多种虚拟世界角色的切换。VRCHAT 也是类似的,通过 VR 来做社交或者娱乐,帮助大家进行更好的线上交互,这很可能是未来互联网的发展和探索的方向。董海冰提到,作为自研团队不能闭门造车,要紧跟时代脉搏和行业发展趋势,尽可能把自己的力量投入在自己核心业务和擅长的方面,大家一起把实时音视频这个领域做得更好。

03 新东方云教室 Web 端音视频播放器实践

线上教育应该是近两年大家最为熟悉的实时音视频应用场景之一,此次专场,我们邀请到了来自新东方云教室前端交互架构师李便茹为大家分享新东方是如何实现线下到线上快速迁移的最佳实践。

新东方在 18年底开始做自己的云教室,2020 年过年期间一个礼拜,做到了从支撑万级的并发跃进到了支撑30万并发。

新东方云教室是一套完整的在线上课解决方案,提供saas服务,其显著的一个特点就是更新迭代的节奏非常快。如果在端上做原生开发,比如与PC、Windows、移动端与安卓和 iOS,那么更新迭代一定是赶不上节奏的,因此他们将策略定为客户端内嵌 H5 页面,除实时音视频外,交互功能基本由 H5 实现。Web 适配到各个端,这就是最快的开发模式。

实时音视频(RTC)延时是百毫秒级,最多不会超过 500 毫秒,人耳是基本感知不到的。在线上教育中会有小班课和大班课两种不同的场景。小班课对于低延时的实时互动要求就会比较高,但对于一些大学的课程和讲座,或是名师公开演讲的大班课场景如果用 RTC 的话,成本其实相对就会较高一些了。针对大班课,新东方云课堂采用了 H5 超大班型的方法,支持百万人同时上课,老师端用 RTMP 推流,学生端依然走 HTTP 拉流。

Silver Web 直播播放器架构图

对于未来可扩展部分,如果云教室的视频编码采用 H.265 的标准,那么压缩就会比 H.264 小一半,网络压力就减少了很多。H5 拥有应用范围广泛且支持跨平台的优势,能够实现同一套方案适配不同客户端,快速开发一套产品,就能够快速上线。自研通用播放器可以更改输入源流,定制化或者快开发。

04 语音测评和本地化

为了可以更好地提供教育服务,近两年在线教育平台也结合深度学习实现了许多新的功能,语音测评就是其中一项,尤其在英语教育中少儿口语的测评次数需求量巨大。如何降低测评时延,提升评测服务的体验,同时降低服务器压力和成本?来自伴鱼技术中台 AI 算法负责人黄智超分享了《语音测评和本地化》。

语音评测是通过机器替代人工,为少儿口语发音进行智能打分的一项功能。语音测评在伴鱼的实践,主要包括算法和框架选择、声学模型训练、效果和速度的优化。算法方面,伴鱼选择的是用深度神经网络和隐马儿可夫,主要原因是深度学习框架目前非常成熟。而框架选择是kaldi,语音界使用人数最多,而且资料齐全。

深度神经网络和隐马尔可夫算法 (dnn + hmm)的测评过程如上图所示。首先要训练一个dnn声学模型,训练hmm拓扑参数,训练完之后,我们会对输入的文本进行构图,对音频进行特征提取,然后经过声学模型。经过一个打分模型后,得出句子得分。

在这个过程中,数据筛选、声学模型的训练、评测准确率的优化都是关键。黄智超在之后的分享中还详细分享了伴鱼的语音评测在本地化的过程中模型体积优化、测评服务鲁棒性,以及如何解决异常 Case 分析困难等问题与经验。

为了让大家能更便捷且深入地了解到实时音视频开发的“台前幕后”,我们后续将会对本次专场的所有内容进行更为详细的整理与解读,详情可点击【阅读原文】,关注社区最新动态!

Qcon 实时音视频专场:实时互动的最佳实践与未来展望的更多相关文章

  1. 云-腾讯云-实时音视频:实时音视频(TRTC)

    ylbtech-云-腾讯云-实时音视频:实时音视频(TRTC) 支持跨终端.全平台之间互通,从零开始快速搭建实时音视频通信平台 1.返回顶部 1. 腾讯实时音视频(Tencent Real-Time ...

  2. 了不起的WebRTC:生态日趋完善,或将实时音视频技术白菜化

    本文原文由声网WebRTC技术专家毛玉杰分享. 1.前言 有人说 2017 年是 WebRTC 的转折之年,2018 年将是 WebRTC 的爆发之年,这并非没有根据.就在去年(2017年),WebR ...

  3. 实时音视频互动系列(上):又拍云UTUN网络详解

    如何定义实时音视频互动, 延迟 400ms 内才能无异步感 实时音视频互动如果存在1秒左右的延时会给交流者带来异步感,必须将视频播放延迟限制在400ms以内,才能给用户较好的交互体验. 当延迟控制在4 ...

  4. 实时音视频互动系列(下):基于 WebRTC 技术的实战解析

    在 WebRTC 项目中,又拍云团队做到了覆盖系统全局,保证项目进程流畅.这牵涉到主要三大块技术点: 网络端.服务端的开发和传输算法 WebRTC 协议中牵扯到服务端的应用协议和信令服务 客户端iOS ...

  5. 腾讯互动白板+即时通讯+实时音视频,Android学生端接入

    腾讯互动白板+即时通讯+实时音视频,Android学生端接入 一.简介 线上教学方案:腾讯云互动白板(Tencent Interactive Whiteboard,TIW)+即时通信(Instant ...

  6. 融云携新版实时音视频亮相 LiveVideoStack 2019

    4 月 19 日,LiveVideoStack 2019 音视频大会在上海隆重开幕,全球多媒体创新专家.音视频技术工程师.产品负责人.高端行业用户等共襄盛会,聚焦音频.视频.图像.AI 等技术的最新探 ...

  7. 从零到一,使用实时音视频 SDK 一起开发一款 Zoom 吧

    zoom(zoom.us) 是一款受到广泛使用的在线会议软件.相信各位一定在办公.会议.聊天等各种场景下体验或者使用过,作为一款成熟的商业软件,zoom 提供了稳定的实时音视频通话质量,以及白板.聊天 ...

  8. BBR在实时音视频领域的应用

    小议BBR算法 BBR全称Bottleneck Bandwidth and RTT,它是谷歌在2016年推出的全新的网络拥塞控制算法.要说明BBR算法,就不能不提TCP拥塞算法. 传统的TCP拥塞控制 ...

  9. 小程序升级实时音视频录制及播放能力,开放 Wi-Fi、NFC(HCE) 等硬件连接功能

    “ 小程序升级实时音视频录制及播放能力,开放 Wi-Fi.NFC(HCE) 等硬件连接功能.同时提供按需加载.自定义组件和更多访问层级等新特性,增强了第三方平台的能力,以满足日趋丰富的业务需求.” 0 ...

  10. 微信小程序+腾讯云直播的实时音视频实战笔记

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

随机推荐

  1. nacos之配置中心使用

    发布配置 dataId 数据的key group 组id 获取配置 通过group,dataId获取配置信息 监听配置 Listening-Configs里的值是重点,组成方式 dataId的值%02 ...

  2. java 类对象四种方法加载方式

    public static void main(String[] args) throws Exception { //第一种 //这里需要做异常处理,或的加载类的类对象类. Class<?&g ...

  3. C语言||一作业03

    1.作业头 这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-3/ 这个作业目标在哪 https://edu.cnblogs.com/cam ...

  4. Django基础篇 04-模型类注册到后台Django Admin中

    一.django自带的admin的url地址 urls.py文件中 from django.contrib import admin from django.urls import path from ...

  5. centos8 安装 spdk

    1. 下载 2.配置 ./configure --enable-debug --disable-tests --without-isal --without-ocf  --with-uring --w ...

  6. c++学习 5 预处理

    一 内存分区 内存的分区变量存储,一般可以分为以下五个区,它们分别是: 可读可写     堆区:使用malloc.calloc.realloc.free以及c++里面的new和delete去动态申请. ...

  7. 使用commitizen规范提交

    npm install -g commitizen cz-conventional-changelog echo '{ "path": "cz-conventional- ...

  8. vue-cli项目以script标签方式引入js的方法

    在public/index.html中强行添加script标签(可引入本地js和远程js,本地js需放在public内,不能放assets内) 在要使用这个js的地方,将相关对象添加到eslint的全 ...

  9. jmeter dubbo测试

    一.环境准备 1.安装jmeter 2.安装dubbo插件,下载地址jmeter-plugins-dubbo, 将jar包放入${JMETER_HOME}\lib\ext路径下,重启即可 二.添加一个 ...

  10. Erlang Mnesia数据库迁移方法

    本文参考https://blog.csdn.net/yangzm/article/details/51686249 需求 因为一些原因,需要把一个Mnesia节点的数据库搬迁到另一个节点,然后弃用原来 ...