作者:邵峰

网易杭州研究院-后台技术中心

随着互联网视频化的发展,各类网络直播产品层出不穷,涌现出了秀场直播、游戏直播、教育直播、演唱会直播和监控直播等多个直播生态圈。这些生态圈形成的背后,是视频直播相关技术的不断发展,例如互联网带宽的日益增加,视频压缩标准的日渐完善,视频云技术的出现等。特别是视频云技术的出现,它降低了开发者的准入门槛,解决了视频企业的“三高”之痛,即技术门槛高、成本高、卡顿延时率高,为未来几年视频直播的大爆发奠定了坚实的技术基础。

1.简介

所谓视频云直播技术,就是用云端模式,提供视频直播解决方案的技术,它涉及视频直播的各个环节,例如直播视频采样、编码、推流、转码、分发、拉流、解码和播放等。使用Iaas、Paas和Saas三种形式,视频云直播能为各种场景的直播应用提供接口级服务、平台级服务和产品级服务。依托视频云,直播开发者不在关心视频和网络的细节,他们只要把精力集中于产品应用层面即可。未来,网络直播产品将会表现为如下一种形态:上层多样化的直播模式 + 下层组件化的视频云模式。

深入视频云直播内部,会发现其具有复杂化、多样化和组件化的特点。所谓复杂化,是指音视频技术复杂和互联网环境复杂;所谓多样化,是指直播应用场景具有多样性;所谓组件化,是指直播技术各个环节的模块化和独立性。在视频云直播中,技术主线永远是音视频流的输入、传输和输出。但针对每一类直播场景,使用的具体技术和实现手段都不一样。随着直播量级的变化,必须对视频云各个环节进行优化,以化解流量暴增带来的压力。因此,视频云直播的构建是一项艰巨的任务。接下来,本文将从场景、技术和优化三个角度,详细阐述视频云直播。

2. 一对多直播场景

考虑如下一种场景:一个主播者坐在电脑前,通过前置摄像头和麦克风,把自己的音视频信息输出到网络上,多人在各地通过互联网实时观看主播者的表演。这就是经典的秀场直播。这里存在几个关键点:一、 音视频传输;二、 实时;三、一对多。

首先讲音视频传输,它又细分为三点:源端的音视频输出、网络端的流传输和播放端的音视频获取。第一点音视频输出,首先必须收集主播的声音和图像,就是所谓的音视频采集;采集后的声音和图像,需要转换成字节码、混合并压缩,最后封装成某种音视频格式,就是所谓的音视频编码;编码后的音视频格式,还不能在网络传输,需要转换成某种码流,如RTMP,然后推送到网上,即上传码流到服务器,就是所谓的推流。上述“采样-编码-推流”,构成了视频云直播端的核心功能。第二点音视频码流的网络传输,把主播者的音视频流分发传输给所有观看者;对于无法适配源端码流的观看者,在网络端转换码流,使其也能正常观看。上述“分发-转码”,构成了视频云服务端VDN(Video Delivery Network 视频分发网络)的核心功能。第三点播放端的音视频获取,首先从网络获取合适的音视频码流,就是所谓的拉流;然后对流进行解析,其中的音视频格式进行解封,就是所谓的解码;最后提取出单独的音频和视频,进行播放。上述“拉流-解码-播放”,构成了视频云播放端的核心功能。因此,如下图所示,仅秀场直播场景的音视频传输,就涵盖了视频云三个核心点: 直播端、播放端和视频分发网络,实现技术门槛很高。

接着讲实时这一点,在直播场景中,延时性要求很高,基本不超过10秒。因此,传统的文件上传/下载模式,对于直播不可行。传统的内容分发网络(CDN)也不适用直播。视频云必须开发独特的流分发网络,应对直播场景实时性。同时,经典秀场直播无实时交互需求,延时性不要求1秒之内。因此流媒体传输,一般选用基于TCP的RTMP协议,无需选择实现难度更大但延时更低的RTP类协议。

最后讲一对多模式,就是一人讲,多人听。这是一种视频云直播最擅长解决的模式。在互联网现实应用中,还有很多种其他模式,例如多对多模式,就是多人互动直播,即视频会议;二对多模式,就是两人互动,然后多人听,即连麦;一对一模式,就是两人视频互动,即实时视频聊天。各种模式,由于实时性要求不同,参与人数不同,实现难度各不相同。本文围绕的场景是一对多模式,该模式最常用。



3. 直播关键技术

如下图,视频云直播总体框架分为三层:上层是直播SDK、中间为API接口层、下面为云端服务层。各层都有一些关键技术点,例如直播SDK层主要包含直播端推流和播放端拉流两项关键技术;API接口层涉及安全控制这一关键技术;云端服务层涉及VDN流分发这一关键技术。接下来,我们详细描述这些技术点。

3.1 直播端/播放端

直播端和播放端是视频云直播SDK的核心。直播端是直播应用的起点,负责采样、编码和推流。播放端是直播应用的终点,负责拉流、解码和同步播放。如下图所示,播放端的处理基本上是直播端的一个逆过程。

采样
直播SDK从设备驱动获取音频采样数据和视频采样数据。其中,音频采样数据一般采用PCM格式、视频采样数据一般采用RGB或YUV格式。音视频采样数据体积非常大,因此需要经过压缩处理,来降低数据量。

编码
编码包含音频编码和视频编码。其中,音频编码负责压缩音频采样;视频编码负责压缩视频采样。常用的音频压缩编码算法有AAC、MP3、WMA等,其中AAC最常用。常用的视频压缩编码算法有H.264,H.265和VP8,其中H.264最常用。

封装
独立的音频压缩数据和视频压缩数据,需要经过封装处理,放到一个统一格式的文件中。常用的分装格式有:MP4、TS、FLV、RMVB、AVI等,视频云中,常用的有MP4、TS和FLV。

推流
分装后的音视频数据,还需要再次进行传输协议封装,变成流数据,用于网络传输。常用的流传输协议有RTSP、RTMP、HLS等。生成的音视频流数据,也称码流,首先放到流缓冲队列中,然后按照一定的Qos算法发送到网络端。关于Qos,我们将在下文中描述。自此,整个直播端的流程已描述完毕。接下来,讲述播放端。

拉流
拉流是推流的逆过程。首先,从网络端获取码流,并把数据放到缓存队列。然后,按照一定的速率,从缓存获取码流,解传输协议,获取其中分装数据。

解封
解封装过程,从封装格式中提取音频压缩数据和视频压缩数据。为封装过程的逆过程。

解码
解码过程,各种从音频压缩数据和视频压缩数据中,提取原始数据。由于编码算法一般为有损压缩算法,提取后的原始数据,并非原始采样数据,存在一定的信息丢失。

同步播放
各种获取的音视频数据,必须经过同步处理,才能播放。

上述,就是直播音视频在客户端的整个流程,其技术基本分为两块:一块为传统音视频处理技术;第二块是码流处理技术。传统音视频处理已经很成熟,作为视频云直播一般会选用通用框架实现这部分功能,例如ffmpeg、vlc、gstreamer等。音视频处理中,唯一需要重点考虑的是视频编码选择。在音视频流中,视频大小占据90%以上空间,视频编解码算法的好坏,直接决定直播码流大小,因此是视频云直播的一个性能瓶颈点。当前,业界一般会选择H.264作为视频编解码算法。

接着讲码流处理。码流处理就是音视频码流在客户端的处理和控制技术,主要包括码流算法实现和Qos服务。常用的码流算法有RTSP和RTMP,其中RTSP基于UDP或TCP,在视频会议领域广泛采用;RTMP基于TCP,在直播中广泛采用。这些码流算法协议公开,存在各种版本的lib库,因此在客户端实现难度较小。Qos服务是用来解决网络延迟和拥塞等问题的技术,通俗的讲就是用来解决网络不稳定的一项安全机制。在直播场景中,Qos需要保证网络不稳定情况下,观看者仍能观看直播内容,基本无卡顿。这需要客户端提供一系列的功能保证Qos,其中最主要的功能如下:一. 直播/播放两端设置缓存,使码流处理匀速,以避免播放抖动;二. 在播放端根据场景或网络情况,动态选择码率、帧率等参数;三. 选择一定的丢弃或重传算法,以应对网络极差情况;四. 按照一定的延时性/流畅性要求,选择缓存大小等。Qos服务无固定算法,视频云根据特定的场景提供特定的Qos保证,需完全自主开发设计。

3.2 流分发

视频云直播服务端的核心是流分发,由流分发网络VDN负责实现。整个VDN的框架如上图所示,包含:流媒体服务集群、边缘服务器集群、转码服务器集群和智能负载均衡系统。与静态文件分发网络CDN类似,VDN系统分为中心和边缘两层,边缘层直接跟用户连接,中心层负责服务器间的内容转发。边缘层的核心是边缘服务器,它部署于全国各地及横跨各大运营商,例如北上广、移动联通电信等。负载均衡系统,根据用户的地理位置信息,就近选择边缘服务器,为用户提供推/拉流服务。中心层的核心是流媒体服务集群,该集群接收来自边缘服务器的码流数据,并转发给需要该码流的其他边缘服务器。同时,中心层也负责转码服务,例如把RTMP协议的码流转换为HLS/TS码流等。负载均衡系统负责中心层和边缘层的路由。整个VDN的设计非常复杂,本文不具体展开,接下来只是简单介绍一下上/下行加速、低延时设置等机制。有兴趣的朋友可以查阅SRS(Simple Rtmp Server)开源文档,了解VDN详情。

上行加速
上行推流加速,又称上行边缘加速。客户端根据VDN智能路由系统,选择最近的边缘服务器。然后,客户端推流到该服务器,边缘服务器把流转发给中心服务器。由于上行推流和下行拉流可能在同一台服务器,因此上行边缘服务器只会做简单的代理转发,把流转发给中心服务器或上层。

下行加速
下行拉流加速,又称下行边缘加速。客户端首先向边缘服务器取流,边缘服务器存在流,则直接给用户;如果不存在流,就执行回源模式,向相应的中心服务器取流。对于非原始格式流,则进行转码操作。转码可在中心层,或边缘层执行。

低延时机制
对于直播场景,特别是交互直播场景,需要低延时,一般为1-3秒。对于RTMP流分发,可以通过如下几个机制来降低延时:一. 降低读/写合并时间;二. 降低GOP;三. 减少累计延时队列。跟磁盘flush策略一样,VDN也通过一次性读/写几毫秒流数据,来提高吞吐量,但增加了延时性。通过关闭读/写合并,或者降低读写合/并时间,可以降低延时性。GOP是音视频术语,指两个I帧之间的时间距离。I帧就是关键帧。GOP的大小,决定了延时性。GOP设置越小,延时性越低,但压缩率也越低。VDN提供累计延时队列,避免流数据丢失。如果减少队列长度,会增加数据丢失概率,但降低了延时性。

3.3 安全机制

视频云直播在API层提供了一整套的安全机制,避免非法访问,盗链等安全问题。如下图所示,视频云安全机制的原理比较简单,利用一对公私钥,对访问请求进行签名加密,生成签名令牌TOKEN。在云端通过相同的算法,验证TOKEN的有效性,从而达到安全保护的目的。

在视频云场景中,请求认证来自于两端:用户服务器端和用户客户端。这两端的安全认证逻辑略有不同。对于用户服务器端,本身保存有公私钥对,根据签名算法,能自动产生TOKEN。对于用户客户端,因为无法获取公私钥对,TOKEN必须由用户服务器产生,并下发给客户端。因而,每次客户端访问视频云,必须首先向服务器获取TOKEN。这是最为安全的做法。该安全策略,客户端一次访问云服务,需要两次交互,较为繁琐。有些视频云实现,降低安全性,为每个客户端下发一个带时效性的TOKEN,甚至是一个永久有效的TOKEN。这样交互流程更加便捷,但极大的降低了安全性。

直播推拉流也采用了TOKEN签名算法机制,以实现防盗链。根据应用的需要,我们可以设置推拉流加防盗链。考虑如下一种场景,演唱会直播,观看者必须买电子门票,这种应用拉流必须加防盗链。再考虑一种情况,秀场,希望观看者越多越好,这样应用拉流无须加防盗链。

视频云直播中,安全认证算法一般采用SHA1或者MD5这样的数字签名算法,第一这些数字签名算法很难被逆向破解攻击;第二相比非对称加密算法,数字签名算法执行效率更高。对于一些安全性要求特别高的应用场景,视频云还可提供频道粒度的流加密,用对称加密算法,例如RC4之类的,把整个流进行加密,从而达到了绝对的安全。


4. 技术优化

前一节描述的视频云直播技术,能满足基本的一对多直播场景需求。但随着人们对音视频需求的不断提升,以及直播场景的不断丰富,单纯基于RTMP的直播方案已不能满足所有需求。因此需要在技术上提出一些变革性的优化,以适应场景变更。本节提出了五个优化点:一. 视频压缩技术优化;二. WEBRTC技术普及化;三. 基于UDP的VDN构建;四. 多码流合并优化;五. 终端多样化;。可以说,这五点也是视频云技术未来的发展方向。

视频压缩技术优化
视频压缩技术一直是音视频领域的核心,视频直播也不例外。一个好的视频压缩算法,能极大的降低视频内容大小,从而减少音视频流码率。当前,视频云厂商基本使用H.264(AVC) 视频压缩算法。但该算法对高清晰度和高帧率场景,以越来越力不从心。一些行业联盟提出了一些替代方案,例如H.265(HEVC)和谷歌正在研发的VP10。特别是H.265,以得到了众多厂商的支持,其压缩率比H.264高40%左右。使用x265编解码库替换现有的x264库,以支持H.265,成为了视频云发展的一个重要方向。

WEBRTC技术普及化
WEBRTC是谷歌公司提出的纯WEB端实时交互框架。视频云直播集成WEBRTC,能解决实时交互问题,例如网络视频会议交互和二对多连麦交互等。同时,WEBRTC和HTML5天然集成,是纯WEB视频场景的最佳候选项。但视频云集成WEBRTC必须解决一系列难题:一. WEBRTC流媒体服务器搭建;二.多路码流合并;三. RTMP流传输协议和基于RTP的WEBRTC流传输协议互转等。解决难题一,能够构建出多人网络视频会议;解决难题二,能够降低带宽流量消耗,对于交互场景节省成本;解决难题三,能够实现视频会议直播化,或者互动场景直播化。

基于UDP的VDN构建
现有的VDN采用RTMP流传输协议,延时超过1秒,无法应对低延时交互场景,例如视频会议。而基于UDP的RTP流传输协议,能够解决低延时问题。要构建UDP-VDN,首先要改造已有VDN网络,使源流媒体服务器和边缘流媒体服务器都支持UDP模式;其次必须支持通用的传输控制协议和信令协议,例如支持RTSP或者符合WEBRTC的SRTP+DSP;最后,对于交互场景,UDP-VDN也必须使用硬件MCU或者软件MCU, 支持多路码流合并。

多码流合并优化
多路码流合并,一般涉及MCU。MCU是多路控制单元的简称,在传统视频会议领域广泛应用,它能把多路码流进行合并转换,是视频会议解决方案的核心。传统的视频会议厂商,如思科、英特尔擅长于做硬件级的MCU,但是随着CPU性能的提升以及多核的广泛应用,软件级MCU开始出现并流行。如果在视频云集成MCU,特别是软件级MCU,能帮用户节省带宽。例如,秀场连麦场景,原来两路拉流,现在只需要拉一路,能降低一半成本。

终端多样化
现有的视频云直播,只支持PC端和移动手机端。但是在现实生活中,有更多的端需要接入直播服务,例如智能摄像头、VR设备、电视终端等。如果能把这些端接入视频云直播中,将会极大的丰富直播的应用场景。例如接入智能摄像头,就能使是视频会议直播化;接入VR设备,就能实现虚拟现实直播;接入电视终端,能够通过电视看网络直播。要实现多终端接入,需要视频云直播实现终端适配层,该适配层能把不同信号源转成视频云能够识别的RTMP码流,同时也能把RTMP码流转换为不同终端能够播放的信号数据。

结语

本文,只是简要介绍了视频云直播的基本内容。随着互联网的发展,视频云直播技术将会不断演化完善,成为云大潮中必要的一环。

推荐阅读

猛戳底部阅读原文

《网易视频云关键技术》

网易云信∣真正稳定的IM云服务

ID:neteaseim  长按识别,关注精彩

视频云直播:场景、技术及优化相关推荐

  1. 苏宁视频云直播客户端的优化方案

    解析优化 DNS过程,如下图: 基于可控和容灾的需要,移动端代码一般不会hardcode 推流.播放的服务器IP地址,而选用域名代替.在IP出现宕机或网络中断的情况下,还可以通过变更DNS来实现问题I ...

  2. 阿里云视频云互动虚拟技术,打造虚拟直播最佳沉浸式体验

    2022是"体育超级大年",冬奥会.亚运会.大运会.世界杯等各类大型体育赛事贯穿全年.由于受到疫情管控和物理空间的限制,赛事直播至关重要,观众体验需求也在不断升级. 于此,企业对直 ...

  3. ​周锦民:腾讯在线教育视频互动直播间技术实践

    本文来自腾讯云技术沙龙,本次沙龙主题为在线教育个性化教学技术实践 演讲嘉宾:周锦民 | 2011年毕业进入腾讯, 现任在线教育部在线教育后台中心高级工程师,多年linux后台开发工作经验,目前主要负责 ...

  4. 在线公开课 | 5G时代的视频云服务关键技术与实践

    课程概要 5G时代来临在即,视频技术将会如何发展呢?基于视频云服务的技术开发又有怎样的变化呢?为此,京东云视频云产品研发部高级总监魏伟为大家做出了详细解读. 魏伟拥有10多年视频行业研发经验,先后从事 ...

  5. SkeyeVSS将安防网络摄像机进行类似于萤石云、乐橙云等模式的互联网视频云直播的几种方案

    SkeyeVSS将安防网络摄像机或者NVR进行类似于萤石云.乐橙云等模式的互联网视频云直播的解决方案有几种: 一.RTMP推流的方式 第一步,拉取RTSP流,获取到音视频编码帧数据: 第二步,通过RT ...

  6. 阿里云视频云,用技术普惠打造平民化“虚拟人”

    近日,国内首个超写实数字人 AYAYI 宣布入职阿里,成为天猫超级品牌日的数字主理人,二者将共同开启元宇宙的营销世界.在未来她将与天猫解锁多个身份,如 NFT 艺术家.数字策展人.潮牌主理人.顶流数字 ...

  7. 如何构建全球实时音视频云及其海外网络传输优化

    点击上方"LiveVideoStack"关注我们 全球不同国家和地区的网络基建水平参差不齐,如何利用有限的网络资源提供更高质量的音视频通话体验是音视频服务商必须面对的挑战.在此次L ...

  8. 网易视频云专注于技术服务——异步通知系统

    随着互联网技术的发展,云计算在资源层面竞争已经进入白热化的阶段,网易视频云定位于PAAS层面,从各个技术领域进行技术钻研以提供给用户更高效.更稳定.更便捷的视频直播技术服务:notify系统作为网易视 ...

  9. 网易视频云:游戏开发性能优化经验总结

    网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,为客户提供稳定流畅.低时延.高并发的视频直播.录制.存储.转码及点播等音视频的PaaS服务.在线教育.远程医疗.娱乐秀场 ...

最新文章

  1. 解决webApiMessageAn error has occurred./Message不能写多个Get方法的问题
  2. linux内核模块编译出现找不到include/generated/asm/unistd_32.h” 问题解决
  3. 基于java的学生点名系统_基于javafx的学生电子点名系统(在eclipse中编写完成)...
  4. 吐血整理 | 肝翻 Linux 进程调度所有知识点|中奖揭晓
  5. npm执行命令后无任何响应(windows下)
  6. 作者:李大中(1976-),男,中国联合网络通信集团有限公司信息化事业部数据中心工程师...
  7. 【最快人脸检测模型开源】libfacedetection开源
  8. 微信公众号对接PHP电影网站,wxapi 微信公众号平台与电影类网站对接源码 wxapi 联合开发网 - pudn.com...
  9. 使用Oracle SQL Developer 编写运行 PL/SQL 块
  10. 在部署服务器端的时候postgresql调试和远程连接操作需要考虑好远程连接问题。
  11. 国家标准《文后参考文献著录规则》(GB7714-87)
  12. 乖离率背离公式_通达信指标公式源码操盘K线主图指标
  13. 易语言输入框参数和调用
  14. 光猫修改rms服务器地址大全,华为光猫备份jffs2及HG8321R-RMS切换HG8321版本教程
  15. Mac没有winnt格式_Mac磁盘到底要不要分区?
  16. Pytorch用法说明
  17. 为什么公司不要大龄程序员
  18. BigDecimal 金额转换
  19. 【中英】【吴恩达课后测验】Course 3 -结构化机器学习项目 - 第二周测验
  20. WEB安全漏洞(1)

热门文章

  1. [C++][数据结构]栈(stack)的实现
  2. 分治法之循环赛日程表
  3. Oracle 分类统计sql
  4. 使用 Castle ActiveRecord
  5. apache php隐藏头信息的方法,科技常识:nginx/apache/php隐藏http头部版本信息的实现方法...
  6. linux apache设置web访问重定向_从零开始学Linux运维|30.Linux的目录结构
  7. JDBC(二)——使用IDEA连接数据库、数据库连接池
  8. 人工智能 | SLAM与Visual Odometry技术综述(浙江大学智能系统和控制研究所)
  9. 算法 | 数据结构与算法(代码版)
  10. 阿里云 nginx php mysql_阿里云 Ubuntu + Nginx + PHP + MySQL