流媒体是一个技术体系,它是网络技术与音视频多媒体技术有机结合的产物。它是发送方和接收方之间传送多媒体流数据的技术。
1994年,美国一家叫做progressive networks的公司最先开始推出这种流数据技术。他们首先推出了C/S架构的音频接收系统real audio,并随后发布了流数据播放器realplayer系列。机会出现之后,微软很快推出了自己的流数据技术方案。流媒体数据技术就这样开始了快速演进。然而,受限于网络带宽,这项技术并没有迅速普及,随着网络带宽迅速提升,这种流数据技术悄悄地在教育、广电、政府、安防、电信、电商、娱乐等行业生根发芽。现在,流媒体数据技术已经成为互联网应用的主流,这已经得到了业内人士的普遍认同。
流媒体数据技术是一种专门用于网络多媒体信息传播和处理的新技术,在发送方和接收方之间传送多媒体信息,一般要经历以下六个步骤和环节,采集数据,编码压缩,格式化容器化,传输,流媒体服务器分发,播放器收流。
下面以直播过程为例,说明一下流媒体的传输过程,主播端采集音视频数据,采集编码并格式化,通过网络传输协议传输,经过服务器分发,观众端接收数据,解码收看收听。
流媒体数据的采集分为音频的采集和视频的采集。数据采集是流媒体技术生命周期的第一个环节,它从系统声卡和摄像头等采集设备中获取原始数据,并将其输送到下一个环节。
音频数据采集。音频的采集主要通过设备将环境中的模拟信号采集成 PCM(Pulse Code Modulation,PCM,脉冲编码调制) 编码的原始数据。音频采集设备好坏主要取决于其处理数据信号的能力,音频采集和编码主要解决延时敏感性、卡顿敏感性、噪声消除(Denoise)、回声消除(AEC)、静音检测(VAD)和各种混音算法等问题。
图像数据采集技术。图像的采集是摄像头等设备抓取YUV编码格式的原始图像数据然后处理的过程。图像采集和编码需要解决的主要问题是,全面设备兼容性、延时敏感性、卡顿敏感以及各种对图像的处理操作算法等。
采集原始数据之后,还要添加一些效果数据和增强数据,比如声音效果的增强、鼓掌、魔音等,以及视频图像的增强比如美颜、图像logo等。
原始获取的数据是非常庞大的,例如一个 1080P 的 7 秒视频需要 817 MB,10 Mbps 带宽传输上述 7 秒视频需要 11 分钟,这样的视频效果是不可接受的,所以要进行音频视频原始数据的压缩。
编码压缩的核心思想是通过算法去除冗余的信息。冗余包括空间冗余、时间冗余、编码冗余、视觉冗余、知识冗余等方面,通过冗余去除,我们可以得到数据较少而质量较高的数据包。上面的1080P像素7秒的图像经过 H.264 编码压缩之后,视频大小只有 708 k ,10 Mbps 带宽传输仅仅需要 500 ms,可以满足实时传输的需求。
经过对比,我们就理解了从视频采集传感器采集来的原始数据是不可以直接传输的,必须要经过视频的压缩编码。
视频压缩技术也在不断进化,视频压缩编码技术经过发展,已经从只支持帧内压缩编码算法演进到新的压缩编码算法。现在新的编码算法标准包括H.26X 和 VPX系列。常用的视频编码算法技术有H.264、H.265、VP8、VP9、FFmpeg等,音频编码算法有Mp3, AAC等。
经过音频视频编码之后,需要进行封装,封装就是数据容器化和格式化。容器是音视频流数据格式化的形象比喻,就像选用盒子和格子装东西一样。我们需要将比特数据用盒子装起来。
音频数据经过容器化计算后变为MP3,AAC,HE-AAC,Opus,FLAC,Vorbis (Ogg),Speex,AMR等格式的数据分发出去。
视频数据经过容器化后变为 MP4、3GP、AVI、MKV、WMV、MPG、VOB、FLV、MOV等格式的数据,然后分发出去。
流媒体数据传输方式多种多样。从传输形式上可以分为顺序流式传输和实时流式传输。顺序流式传输方式是介于本地下载完再播放方式和实时流式播放方式的中间方式,也就是用户边下载边播放,这种方式也被称之为“伪流媒体数据传输”。这种数据传输方式常应用于视频网站的点播。
实时流式传输方式是真正意义上的流媒体数据传输方式,用户可以一边接收数据包一边播放,数据实时传送。实时流媒体数据传输必须保证数据包的传输速度大于文件的播放速度,如果传输的速度小于文件的播放速度,视频就会出现卡顿。
通常情况下流媒体数据需要借助网络服务器来实现中转分发。数据从服务器分发到接收数据方的过程称为播放,流媒体数据的播放方式有三种主要情形。
第一种情形是数据单播,也就是在客户端与数据服务器之间建立单独的数据通道,从一台服务器分发的每个数据包只能传送给一个客户机。这种形式的弊端是极其消耗资源。
第二种情形是数据组播,这种方式允许路由器一次将数据包复制到多个通道上。采用组播方式,数据服务器只需要发送一个信息包,即可连接多个用户,所有发出请求的客户端共享同一信息包。这样可以减少网络上传输的信息包总量。
第三种方式是数据点播与广播。数据点播连接是客户端与服务器之间的主动的连接。在数据点播中,用户通常通过选择内容来初始化客户端连接。每个用户可以开始、停止、后退、快进或暂停播放数据流。点播能够提供对流的最大控制,但这种方式由于为每个客户建立了单独的连接,带宽很容易被消耗完。广播是一种用户不能控制流数据只能被动接收流数据的方式,用户不能快进、后退、暂停。
相比较数据单播、数据点播和数据广播,数据组播是最有市场竞争力的数据播放方式。数据组播不会复制多个数据包传输到网络上,也不会将数据包传送给给没有请求服务器的客户,保证了网络上流数据应用占用最小带宽的网络。
流媒体数据传输的实现需要合适的网络传输协议。由于使用TCP需要较多的开销,因此不适合传输实时流数据。在流媒体传输的方案中,一般采用HTTP/TCP来传输控制信息,采用RTP/UDP/RTMP等协议来传输实时数据。现在大部分流数据网站都采用RTMP(Real Time Messaging Protocol)实时消息传送协议,该协议是Adobe公司为Flash播放器和服务器之间音视频流数据传输开发的开放协议。
流媒体数据服务器的作用是负责流的发布和数据转播。流媒体服务器有多种选择,Nginx服务器是常用的选择,它是一款优秀的免费Web数据服务器。
播放端的推流,采集器采集流数据,经过编码压缩和格式转化,然后通过传输协议传输到服务器,服务器经过计算将收到的流进行分发,接收者只要有支持流传输协议的播放器即可播放,这是流媒体数据的整个生命周期。