随着低延时流媒体技术的不断进步,在线教育行业持续升温。基于WebRTC架构的低延时直播技术突破以及其在教育行业中的实践与思考。
GitHub:
先放github连接
(更多完整项目下载。未完待续。源码。图文知识后续上传github。)
( VX:mm14525201314)
很是荣幸能够跟你们分享我所作的一些项目和实践,本次我要分享的主要内容包括如下几个方面:git
1,视音频技术的演进;
2, WebRTC 课堂实践;
3, WebRTC 在教育行业的思考;
首先,咱们一块儿来看上面这张图,这张图是由国际电信联盟电信标准化部门统计所得,图中的横轴坐标是毫秒,表明着时延,纵轴坐标是用户的体验度。由上图,咱们不难发现,时延达到150毫秒的时候,用户的体验度开始降低,当达到400毫秒的时候,用户的感觉是没法容忍。由此,ITU-T G.114国际标准规定,延时超过150毫秒表示已经开始影响用户体验,而且用户能够容忍的最高延时是400毫秒。程序员
举个例子,当发生台风天气时,电视台的主持人一般会连线现场的记者,当连线返回现场报道时,基本是过了两秒左右的时间,现场记者才收到主持人的话,听众的体验感至关很差。相似于上面的状况基本上是没法实现实时互动的,想要进行实时互动的关键点就在于低延时。我之前也曾经作过八年直播相关的研发,从最初的底层协议到RTMP协议再到如今的WebRTC,用户需求为什么会逐渐从点播域向直播域靠拢,直播流媒体实时音视频为什么会愈来愈关注互动,也正是由于有了低延时,互动才得以慢慢发展出来。github
不知道你们是否清楚,为何流媒体在以前都没有发展起来这种很好的互动性呢?有不少人认为RTMP协议很不错,而且如今外面大部分采用的都是RTMP协议。算法
既然如此,为何你们都去研究WebRTC呢?首先,RTMP是基于TCP协议的,TCP是一个安全可靠的协议,它包含了不少机制,如数据的安全保障、三次握手、重传机制等,可是这偏偏会影响到它的传输时间。数据库
举个例子,我如今手上有一份数据要发送给另一我的,发送过去以后因为网络抖动致使丢包。他没有收到包则会返回一个消息来告诉我他没收到个人包,这样就会产生很大的延迟。那么,能不能直接用UDP呢?三年前的广电系统,好比北京卫视等采用的是TS流,TS流就是基于UDP的,它的传输很是有效。TS传输具备高可靠度,流媒体安全且质量好,可是基于UDP都是基于内网的,对网络的要求很是高。北京卫视也只有内部的网络所有用的是TS流,采用UDP的协议来传送,一旦离开公司,就不可行了。由于UDP是不安全的,它没有重传机制,没有各类保障的能力。从上图中能够看出,UDP相对来讲延时是最低的,但总体质量很低,对网络的依赖程度也很是高,因此我认为这是一个成本的问题。在这里推出一个概念,叫作RUDP(Reliable UDP)。RUDP指的是将TCP和UDP各类优点结合在一块儿,包含的功能有:浏览器
1)冗余编码和前向纠错;
2)场景化的重传策略;
3)带宽自适应调整;
4)更优的拥塞控制算法;
5)多点 relay…
简单解释一下什么叫作场景化的重传,UDP由于没有重传策略,对于咱们来讲绝对不安全,场景化重传就是说,若是是I帧这种关键帧丢失,那就重传一个I帧,若是是一个不是特别重要的帧丢失,则不重传,或者说有一些能够作同步的信令标准没有到达,我也不重传,这样就能够极大的优化传输效率。安全
接下来介绍的是WebRTC的核心,你们也能够在Chrome,Google或WebRTC的官网上找到它的解释。归纳一下,WebRTC 内核提供的技术能力包括:服务器
此外,WebRTC还提供一系列的业务能力:网络
接下来,从垂直领域来为你们介绍一下WebRTC在教育行业的课堂实践中的一些能力,包括电子白板、高质量通信、IM和协做能力。架构
电子白板是用于解决多人互动场景下,用户理解和分析的黑板能力。在教育行业中,不管是视频仍是音频,都离不开这个白板。在学校里,对比如今和过去的课堂咱们会发现变化是很是大的,可是只有同样东西没变,就是黑板,因此足以证实黑板有多么的重要。当我在一块黑板上面写字,通常人的作法是将它变成一个视频而后传播出去,让你们看到。可是这样有一个很大的问题,视频资源最少须要300kbps的带宽,这会占用用户不少的带宽,对于资源消耗是很是高的。
咱们作了一件事情,就是让黑板变成一种描述性的语言。用描述性语言来替代白板,用它来描述白板到底画了一些什么,而它所占的带宽资源最高是9kbps,也就意味着,它的带宽消耗是用传统方式传输最低质量视频这种方式的1/30。这是一个很是伟大的突破,能够为客户节约大量的成本和资源消耗。视频化白板的体验问题包括没法放大缩小、不具有交互能力。但若是它是一个描述性语言,就能够随意放大缩小,并保持清晰。另外,对于视频,我没法在上面作第二次操做,但描述性语言能够。在数据扩充性方面,视频化白板是不好的,因为视频内容是非结构化的,致使很难被存储。
另外,AI是没法识别视频索引的。举例说明,我画了一只猫,如今AI的能力还不足以识别它是一只猫。由于我画的并非特别有效,所以识别不了,但若是是描述性语言来表示,就能马上识别出是只猫。最后是视频化白板的数据识别转换低。举个例子,有些AI公司会将一些视频中的数学符号识别成了数字,这是由于它没法识别。但对于描述性语言就能够轻松识别,由于它是一个矢量数据,它能够体量。这些说明了使用描述性语言改善了白板是有效的,在这里总结了一下,使用描述性语言白板带来的好处:
1) 对白板改变进行冲突管理
2) 描述性语言下降整个白板视频带宽
3) 下降 CDN 使用成本
4) 回放和录制存储要求极低,几乎能够忽略
5) 矢量信息可无限放大细节
6) 多端同步,相互备份
Mesh、MCU和SFU是WebRTC的三种模式,目前能够说大部分使用WebRTC的厂商都选择了SFU模式,由于它是最高效的。MCU通常应用于广电领域,MCU就是不一样端的推流,都发送到一个中央处理器上进行混流处理,处理完成后再分发给每一个客户端。SFU指的是每一个客户端都推流到服务器,由服务器转发全部的数据到各个客户端。若是广电要用到画中画的功能,MCU是没办法实现的。通俗的讲就是MCU将东西都固定好了,不能进行某一个区域的放大,它在服务端就已经进行了拼合。可是对于SFU,在收到服务器返回的数据流后能够再随意进行拼合。Mesh是一个最基本的,相对高质量的模式,但因为它消耗的资源及带宽功耗都比较高,因此不会常常用到。
高质量的通信包括画质、流畅度和协同,画质包括了编码方式、码率和编码效率,流畅度包括了中间层构建、Plus插件和带宽优化方案,协同包括配套播放器和冲突管理。那在这里有几个问题想和你们分享一下:
对于第一个问题,我问了不少人,最后发现一个很神奇的事情,仍是有不少人会选择3M码率的1080P的清晰度高。我想跟你们说,Adobe官方有一个推荐,刚开始推RTMP协议的时候,对编解码也给出了一个标准的推荐值,720P推荐的是1.8Mbps,1080P推荐的是5.5Mbps,只有这样才能知足相应画质的传输。那么这个问题的答案也就天然而然了,用3Mbps去传输1080P是不知足对应画质的,看起来的效果不如1.8Mbps 的 720P 清晰度高。
对于第二个问题,H264 Profile有3.0、3.一、4.0、4.1等不一样level,这些算法依次是复杂程度越高,图像的精度也越好,这也决定了画质和效率,而用户体验指的是流畅度。对于第三个问题,为何有些场景下只能用H264 Profile Level 3.1,而它的画质没有那么清晰?举例说明,有一天小天才的负责人跟我说,他要作一件事情,就是让孩子的父母能够用着手表进行有效的沟通。那这当中有个问题,咱们当时给它设计的是画质优先,将profile level调到了4.1,结果发现,手表8分钟就烫得戴不了,功耗实在是有点高。后来,咱们想到把这种嵌入式设备的profile level降到3.1,因此这就回答了为何是有些地方情愿不须要画质,而须要它的profile level更高效,这跟功耗有关。
对于最后一个问题,就画面匹配这件事情来讲,究竟是提供一个高profile level的算法,仍是低功耗的性能?这是两件事情,须要有一些权衡,肯定其中一个有最大化利益。
在这里我想给你们讲一些案例,就是AI在视频里的一些应用。某英语的老板,给了我一个案例,他说有一个小孩上他们的课,都是一对一模式上课,结果那个小孩上来跟老师说, “老师啊,那个我不想上课,是我爸让来的,你该干吗干吗去吧,我打游戏去了”。最后,这个课堂只是摄像头开着,可是两边都没有人,成了一个无效的课堂。
后来,我设计了同样东西,就是AI在视频里面的应用。这个东西就是用一个机制去计算摄像头的两端,若是超过一分钟没有识别到人脸,那么它触发一个报警给到教务,告诉他说,这是一个无效的课堂,你应该管管。
第二个案例,为了防止高校中的翘课现象,我在课堂上装一个摄像头,而后对视音频进行AI的识别,事先知道每一个人是谁,而后不间断去识别。若某位同窗进来后,10分钟以后他从后门溜走致使识别不到他,马上出现一个报警,表示没有检测到某位同窗。
还有一个应用是我在跟浙江传媒大学一块儿沟通的时候发现的,中国的教育到如今尚未一个庞大的数据库,没有对某一个学生从0到1的分解。举个例子,如今的探头在视频里的应用能够侦测不少行为,我发现上语文课时,有个小姑娘永远坐在第一排,而且侦测她举手次数超过30次,而后又发现她上数学课时,永远在最后一排睡觉。它触发的是系统自动进行一个大数据分析来告诉说这个女孩是适合文科,而不适合理科的,而后把这个信息交给教务,在这个女孩身上她打了一个标签,大数据识别出来她适合文科,这就是社会价值、教育的价值。还有就是在教育领域也已经作了的,利用AI来作课堂笔记,在讲课的同时,将老师和学生的语音进行语音识别直接转成了文字,也就意味着,当这个课堂结束,课堂的全部笔记以及老师说的每一句话,已经所有变成一个文档留存下来。
最后,说说咱们在教育行业里面的思考。第一,传统教育是解决更多场景化的共性需求。举一个简单的例子,场景化教育就是当我有一天站在某个传统高校的讲堂进行演讲的时候,该如何帮助提高效率。第二,垂直教育,利用WebRTC能力,构建创新型协做思惟,让程序员也能够作教育。第三,PUDC的开放,我认为如今中国教育仍是有不少机构参与的,但将来会是一个PUDC的时代,每一个人都是老师,每一个人都是学生。最后,智能改变,就是去实现各类AI的教育。