最近百万英雄非常火爆,很多人在玩,动辄几百万的在线量,可谓是异常壮观。
百万英雄基于网络直播,如此多的在线人数,从带宽到服务器都是很大的挑战。网络直播与电视直播是完全不同的,电视基于单向推送,其数据不受带宽影响。
网络直播的原理简单来说可以用下图来表示,分为:
1、视频数据采集、处理、编码封装
2、视频数据推送至服务端
3、视频数据分发至CDN
4、客户端从CDN调取视频数据并播放
直播流程
一、采集
采集是视频直播过程中的首个环节,它从硬件采集设备中获取视频或音频数据,将其输出到下一个环节。数据采集涉及两方面数据的采集:音频采集和图像采集,它们分别对应两种完全不同的输入源和数据格式。音视频均为模拟信号,是如何转换为计算机可运算的二进制呢?是因为采集设备的传感器是一个AD(模拟/数字)转换的器件,该传感器以很高的频率采集模拟信号并转为数据字。
1. 音频采集
音频数据既能与图像数据结合成视频数据,也能以纯音频的方式采集或播放,比如在电台中起着非常重要的作用。音频的采集过程主要通过设备将环境中的模拟信号采集成 PCM 编码的原始数据,然后编码压缩成 MP3 等格式的数据分发出去。常见的音频压缩格式有:MP3,AAC,HE-AAC,Opus,FLAC,Vorbis (Ogg),Speex 和 AMR等。
音频采集和编码主要面临的挑战在于:延时敏感、卡顿敏感、噪声消除(Denoise)、回声消除(AEC)、静音检测(VAD)和各种混音算法等。
2. 图像采集
将图像采集的图片结果组合成一组连续播放的动画,即构成视频中可肉眼观看的内容。图像的采集过程主要由摄像头等设备拍摄成 YUV 编码的原始数据,然后经过编码压缩成 H.264 等格式的数据分发出去。常见的视频封装格式有:MP4、3GP、AVI、MKV、WMV、MPG、VOB、FLV、SWF、MOV、RMVB 和 WebM 等。图像由于其直观感受最强并且体积也比较大,构成了一个视频内容的主要部分。图像采集和编码面临的主要挑战在于:设备兼容性差、延时敏感、卡顿敏感以及各种对图像的前处理操作。
二、数据处理
视频或者音频完成采集之后得到原始数据,为了增强一些现场效果或者加上一些额外的效果,我们一般会在将其编码压缩前进行处理,比如打上时间戳或者公司 Logo 的水印,祛斑美颜和声音混淆等处理。在主播和观众连麦场景中,主播需要和某个或者多个观众进行对话,并将对话结果实时分享给其他所有观众,连麦的处理也有部分工作在推流端完成。
三、编码和封装
编码
如果把整个流媒体比喻成一个物流系统,那么编解码就是其中装配货的过程,它的速度和压缩比对物流系统的意义非常大,影响物流系统的整体速度和成本。同样,对流媒体传输来说,编码也非常重要,它的编码性能、编码速度和编码压缩比会直接影响整个流媒体传输的用户体验和传输成本。
编码之后视频的体积会大大缩小,同时也减小的带宽占用,从而带来流畅的观感。
编码的核心思想就是去除冗余信息,基本方法有:
1)空间冗余:图像相邻像素之间有较强的相关性
2)时间冗余:视频序列的相邻图像之间内容相似
3)编码冗余:不同像素值出现的概率不同
4)视觉冗余:人的视觉系统对某些细节不敏感
5)知识冗余:规律性的结构可由先验知识和背景知识得到
视频编码器经历了数十年的发展,已经从开始的只支持帧内编码演进到现如今的 H.265 和 VP9 为代表的新一代编码器,下面是一些常见的视频编码器:H.264/AVC、HEVC/H.265、VP8 、VP9、FFmpeg。音频编码器有Mp3, AAC等。
封装
所谓封装,就是把编码器生成的多媒体内容(视频,音频,字幕,章节信息等)混合封装在一起的标准。容器使得不同多媒体内容同步播放变得很简单,而容器的另一个作用就是为多媒体内容提供索引,也就是说如果没有容器存在的话一部影片你只能从一开始看到最后,不能拖动进度条,而且如果你不自己去手动另外载入音频就没有声音。下面是几种常见的封装格式:
1)AVI 格式(后缀为 .avi)
2)DV-AVI 格式(后缀为 .avi)
3)QuickTime File Format 格式(后缀为 .mov)
4)MPEG 格式(文件后缀可以是 .mpg .mpeg .mpe .dat .vob .asf .3gp .mp4等)
5)WMV 格式(后缀为.wmv .asf)
6)Real Video 格式(后缀为 .rm .rmvb)
7)Flash Video 格式(后缀为 .flv)
8)Matroska 格式(后缀为 .mkv)
9)MPEG2-TS 格式 (后缀为 .ts)
目前,在流媒体传输,尤其是直播中主要采用的就是 FLV 和 MPEG2-TS 格式,分别用于 RTMP/HTTP-FLV 和 HLS 协议。
四、推送至服务端
推流是直播的第一公里,直播的推流对这个直播链路影响非常大,如果推流的网络不稳定,无论我们如何做优化,观众的体验都会很糟糕。所以也是我们排查问题的第一步,如何系统地解决这类问题需要我们对相关理论有基础的认识。
推送协议主要有三种:
1. RTSP(Real Time Streaming Protocol):实时流传送协议,是用来控制声音或影像的多媒体串流协议, 由Real Networks和Netscape共同提出的;
2. RTMP(Real Time Messaging Protocol):实时消息传送协议,是Adobe公司为Flash播放器和服务器之间音频、视频和数据传输 开发的开放协议;
3. HLS(HTTP Live Streaming):是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输
五、分发至CDN
流媒体服务器的作用是负责直播流的发布和转播分发功能。 但是服务器的带宽有限,所有用户全部从单一服务器获取数据是不可能实现的。为了保证客户端的观感,服务器将数据分发至位于全国各地不同机房的CDN服务器中,客户观看直播时直接从就近的服务端下载数据,保证了流畅性。
六、流播放
主要是实现直播节目在终端上的展现。因为我这里使用的传输协议是RTMP, 所以只要支持 RTMP 流协议的播放器都可以使用,譬如:电脑端:VLC等;手机端:Vitamio以及ijkplayer等。
本文暂时没有评论,来添加一个吧(●'◡'●)