流媒体是什么?
流媒体就是指采用流式传输技术在网络上连续实时播放的媒体格式,如音频、视频或多媒体文件。
音视频就是流媒体的核心。
音视频组成
一个完整的视频文件,包括音频、视频和基础元信息。
我们常见的视频文件如mp4、mov、flv、avi、rmvb等视频文件,就是一个容器的封装,
里面包含了音频和视频两部分,并且都是通过一些特定的编码算法,进行编码压缩过后的。
因此,视频转换需要设置的本质就是:
- 设置需要的视频编码
- 设置需要的音频编码
- 选择需要的容器封装
编码格式
音频编码格式
- ACC
- AC3
- MP3
视频编码格式
- H.26x
- MPEG
MPEG | 简介 |
---|---|
MPEG-1 | MPEG-1的视频原理框图与H.261的相似。(制定于1992年,主要应用在VCD制作格式) |
MPEG-2 | 制定于1994年,主要应用在DVD/SVCD的制作压缩方面。作了扩展和改进,如提升了分辨率,满足了用户高清晰度的要求,但由于压缩性能没有多少提高,存储容量还是太大,也不适合网络传输。 |
MPEG-4 | 制定于1998年,是为了播放流式媒体的高质量视频而专门设计的。在低比特率压缩上有着显著的提高,更适合网络传输。但由于系统设计过于复杂,很难在视频会议、可视电话等领域实现,另外对于中国企业来说还有高昂的专利费问题。 |
H.26x | 简介 |
---|---|
H.261 | 在实时编码时比MPEG所占用的CPU运算量少得多。只有I帧和P帧,没有B帧,运动估计精度只精确到像素级。 |
H.263 | 在H.261基础上,加入了PB帧预测,运动估计精度精确到半像素精度,性能优于H.261。 |
H.264 | 从编码性能上看,H.264要远优于MPEG-4,平均节约39%的传输码流,这可以极大地提高存储设备的效率和网络利用率。在 H.265 出来之前,H.264是压缩率最高的视频压缩格式,其优势有:①低码率:和MPEG2和MPEG4 ASP等压缩技术相比,在同等图像质量下,采用H.264技术压缩后的数据量只有 MPEG2的1/8,MPEG4 的1/3。 ②高质量的图像:H.264 能提供连续、流畅的高质量图像(DVD质量) ③容错能力强:H.264提供了解决在不稳定网络环境下容易发生的丢包等错误的必要工具。 ④网络适应性强:H.264 提供了网络抽象层,使得 H.264的文件能容易地在不同网络上传输。 |
H.265 | 又称HEVC(High Efficiency Video Coding,高效率视频编码),是ITU-T H.264/MPEG-4 AVC标准的继承者。带宽成本:理论上,H.265最高只需H.264编码的一半带宽即可传输相同质量的视频。更低的带宽可以更好地降低存储及传输成本。转码成本:当前主流浏览器均不支持H.265原生视频播放,因此通常视频生产端需要针对浏览器做一次H.264视频的转码来适配浏览器端如PC场景的播放。 |
存储封装格式
目前市面常见的存储封装格式有如下:
- AVI(.avi)
- ASF(.asf)
- WMV(.wmv)
- QuickTime(.mov)
- MPEG(.mpg/.mpeg)
- MP4(.mp4)
- TS/PS
视频码率、帧率
码率
码流(Data Rate)是指视频文件在单位时间内使用的数据流量,
是视频编码中画面质量控制中心最重要的部分,一般我们用的单位是kb/s或者Mb/s。
一般来说,同样的分辨率下,视频文件的码流越大,压缩比就越小,画面质量就越高。
码流越大,说明单位时间内采样率越大,数据流,精度就越高,
处理出的文件就越接近原始文件,
图像质量越好,画质越清晰,要求播放设备的解码能力也越高。
当然,码率越大,文件体积也就越大,其计算公式是 文件体积=时间x码率/8。
通常来说,一个视频文件包括了画面(视频)及声音(音频),
同一个视频文件的音频和视频的比特率并不是一样的,
而我们所说的一个视频文件的码率大小,一般是指视频文件中音频及视频信息码率的总和。
帧率
帧率也称为FPS(Frames Per Second),是指每秒钟刷新的图片的帧数,
也可以理解为图形处理器每秒钟能够刷新几次。越高的帧速率可以得到更流畅、更逼真的动画。
流媒体的传输方式
当前互联网中的流媒体服务从传输方式上大体可以分为两种方式:顺序流式传输和实时流式传输。
顺序流式传输
顺序流式传输的实质就是播放本地文件,
好处主要是减轻了服务器的压力,即当多媒体文件下载完成后就可以断开连接,从而节省出服务器资源再为其他客户端服务。
此外,顺序流式传输使用的是普通的HTTP服务器,视频服务商不必花费额外的资金购买流媒体服务器,从而节省了一笔经费。
实时流式传输
实时流式传输采用专门的流媒体服务器存储多媒体文件,主要应用于网络直播和正版影视的点播。
当客户端发起连接想要观看多媒体资源的时候,一般通过专有的实时流式传输协议把位于流媒体服务器上的多媒体数据直接传输给客户端的播放器,再实时播放。
此外,使用实时流式传输方式观看多媒体资源时,可以随意跳转到该音视频的任何位置,而不必像顺序流式传输那样只能观看已经下载过的部分,大大增加了观看时的自由度。
流媒体的传输协议
协议解封装
介绍流协议之前,先要介绍我们从云端拿到一份数据,要经过几个步骤才能解析出最终需要的音视频数据。
HLS
HLS(HTTP Live Streaming)是苹果公司实现的基于HTTP短连接的流媒体传输协议,可实现流媒体的直播和点播。
HLS 点播
首先需要了解这一协议是以视频切片的形式分段播放的,
协议中使用的切片视频格式是TS,也就是我们前文提到的封装格式。
在我们获取TS文件之前,协议首先要请求一个M3U8格式的文件。
M3U8 是一个描述索引的文件,它以一定的格式描述了TS地址的指向,
我们根据M3U8文件中描述的内容,就可以获取每一段TS文件的CDN地址,通过加载TS地址分段播放就可以组合成一整段完整的视频。
HLS 直播
相对于常见的流媒体直播协议,例如RTMP协议、RTSP协议、MMS协议等,
HLS 直播最大的不同在于,直播客户端获取到的,并不是一个完整的数据流。
HLS 协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断地下载并播放这些小文件,
小结
如果是HLS 点播,则只需要在初始化时获取一次就可以拿到所有的TS切片指向;
如果是HLS 直播,则需要不停地轮询M3U8文件,获取新的TS切片,从而达到直播流播放的效果。
由于数据通过HTTP协议传输,所以完全不用考虑防火墙或者代理问题。
另外,切片播放的特性特别适用于点播播放中视频清晰度、多语种的热切换,
比如我们播放一个视频,
起初选择的是超清视频播放,当我们看了一半觉得不够流畅,需要换成标清的,
这时候只需要将超清的M3U8文件替换成标清的M3U8文件即可,不需要对视频做重新初始化。
在直播场景下,HLS 也是一个比较常用的协议,
在移动端,将M3U8文件地址喂给video就可以直接播放,在PC端用MSE解码后大部分浏览器也都能支持,
但由于其分片加载的特性,直播的延时相对较长,主要是以下三个原因:
1)服务端的编码器和流分割器生成TS文件的时间
2)客户端下载TS文件的时间,而通常要求下载完两个TS媒体文件
3)客户端解码并播放时间
HLS中用到的TS封装格式,视频编码格式通常是H.264或MPEG-4,音频编码格式为AAC或MP3。
HTTP-FLV
HTTP-FLV 是基于HTTP长连接来传输FLV封装格式的一种协议。
FLV 是Flash Video的简写,是一种文件体积小,适合在网络上传输的封包方式。
FLV 的视频编码格式通常是H.264,音频编码格式为ACC或MP3。
FLV 在延迟问题上相比切片播放的HLS会好很多,目前看来FLV的延迟主要是受编码时设置的GOP长度的影响。
RTMP
RTMP 是基于TCP做的一套实时消息传输协议,经常与Flash播放器匹配使用。
RTMP 的封装格式与HTTP-FLV一样,都是FLV。
RTMP 协议的优缺点非常明显,首先和HTTP-FLV一样,延迟比较低;其次它的稳定性非常好,适合长时间播放。
但是主流浏览器渐渐都表示不再支持Flash player插件,在移动端H5基本属于完全不支持状态,兼容性是它最大的问题。
MPEG-DASH
MPEG-DASH 协议属于新兴势力,与HLS一样,都是通过切片视频的方式进行播放。
由于同为切片视频播放的协议,DASH优劣势与HLS类似,
可以支持切片之间多视频码率、多音轨的切换,比较适合点播业务,在直播中还是会有延时较长的问题。
RTSP+RTP
RTSP(Real Time Streaming Protocol),即实时流传输协议。
RTSP 用于控制流媒体的传输,比如建立连接、播放、暂停等等,但本身并不传输多媒体数据。
多媒体数据通常是使用 RTP/RTCP 协议进行传输。
RTP/RTCP(Real Time Transport Protocol/Real Time Transport Control Protocol),即实时传送协议/实时传送控制协议。
RTP 协议本身只保证实时数据的传输,RTCP 协议则负责流媒体的传输质量保证,提供流量控制和拥塞控制等服务。