流媒体(streaming media)是指将一连串的媒体数据压缩后,经过网上分段发送数据,在网上即时传输影音以供观赏的一种技术与过程,此技术使得数据包得以像流水一样发送;如果不使用此技术,就必须在使用前下载整个媒体文件。流式传输可传送现场影音或预存于服务器上的影片,当观看者在收看这些影音文件时,影音数据在送达观看者的计算机后立即由特定播放软件播放。
流媒体实际指的是一种新的媒体传送方式,有声音流、视频流、文本流、图像流、动画流等,而非一种新的媒体。
流媒体最主要的技术特征就是流式传输,它使得数据可以像流水一样传输。流式传输是指通过网络传送媒体(音频、视频等)技术的总称。实现流式传输主要有两种方式:顺序流式传输( progressive streaming)和实时流式传输( real time streaming)。采用哪种方式依赖于具体需求。
顺序流式传输是顺序下载,用户在观看在线媒体的同时下载文件,在这一过程中,用户只能观看下载完的部分,而不能直接观看未下载部分。也就是说,用户总是在一段延时后才能看到服务器传送过来的信息。由于标准的HTTP服务器就可以发送这种形式的文件,它经常被称为HTTP流式传输。
由于顺序流式传输能够较好地保证节目播放的质量,因此比较适合在网站上发布的、可供用户点播的、高质量的视频。
顺序流式文件是放在标准HTTP或FTP服务器上,易于管理,基本上与防火墙无关。顺序流式传输不适合长片段和有随机访问要求的视频,如:讲座、演说与演示。它也不支持现场广播。
实时流式传输必须保证匹配连接带宽,使媒体可以被实时观看到。在观看过程中用户可以任意观看媒体前面或后面的内容,但在这种传输方式中,如果网络传输状况不理想,则收到的图像质量就会比较差实时流式传输需要特定服务器,如 Quick Time Streaming Server、 Realserver或 Windows Media server。这些服务器允许对媒体发送进行更多级别的控制,因而系统设置、管理比标准HTTP服务器更复杂。实时流式传输还需要特殊网络协议,如:==RTSP( realtime streaming protocol)==或MMS(microsoft media server)。在有防火墙时,有时会对这些协议进行屏闭,导致用户不能看到一些地点的实时内容,实时流式传输总是实时传送,因此特别适合现场事件。
是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。是苹果公司QuickTime X和iPhone软件系统的一部分。旨在能够从 iPhone 中删除 flash,如今已成为使用最广泛的协议。 它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。
HLS 协议由三部分组成:HTTP、M3U8、TS。这三部分中,HTTP 是传输协议,M3U8 是索引文件,TS 是音视频的媒体信息。
HLS 的 m3u8,是一个 ts 的列表,也就是告诉浏览器可以播放这些 ts 文件
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:64
#EXT-X-TARGETDURATION:12
#EXTINF:11.550
livestream-64.ts
#EXTINF:5.250
livestream-65.ts
#EXTINF:7.700
livestream-66.ts
#EXTINF:6.850
livestream-67.ts
每一个 .m3u8 文件,分别对应若干个 ts 文件,这些 ts 文件才是真正存放视频的数据,m3u8 文件只是存放了一些 ts 文件的配置信息和相关路径,当视频播放时,.m3u8 是动态改变的,video 标签会解析这个文件,并找到对应的 ts 文件来播放,所以一般为了加快速度,.m3u8 放在 web 服务器上,ts 文件放在CDN(内容分发网络)上。
HLS 整体框架图:Server、CDN 和 Client
HLS 协议编码格式要求
视频的编码格式:H.264、H.265(同样大小的文件,H.265 编码的视频质量是 H.264 的二倍。)
音频的编码格式:AAC、MP3、AC-3
视频的封装格式:ts
保存 ts 索引的 m3u8 文件
HLS 协议优势
HLS 相对于 RTMP 来讲使用了标准的 HTTP 协议来传输数据,可以避免在一些特殊的网络环境下被屏蔽。
HLS 相比 RTMP 在服务器端做负载均衡要简单得多。因为 HLS 是基于无状态协议 HTTP 实现的,客户端只需要按照顺序使用下载存储在服务器的普通 ts 文件进行播放就可以。而 RTMP 是一种有状态协议,很难对视频服务器进行平滑扩展,因为需要为每一个播放视频流的客户端维护状态。
HLS 协议本身实现了码率自适应,在不同带宽情况下,设备可以自动切换到最适合自己码率的视频播放。
HLS 协议缺点
HLS 协议在直播的视频延迟时间很难做到 10 s 以下延时,而 RTMP 协议的延时可以降到 3s-4s 左右。
基于TCP/IP协议体系的一个应用层协议,RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输,该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。 本协议是最早的视频传输协议。其中RTSP协议用于视频点播的会话控制,例如发起点播请求的SETUP请求,进行具体播放操作的PLAY、PAUSE请求,视频的跳转也是通过PLAY请求的参数支持的。
优点,可以控制到视频帧,因此可以承载实时性很高的应用。这个优点是相对于HTTP方式的最大优点。复杂度主要集中在服务器端,可以进行倍速播放功能,其他视频协议都无法支持。 网络延时低,一般在0.5S以内;
缺点,就是服务器端的复杂度也比较高,实现起来也比较复杂。ios端不支持该协议,对移动端支持较弱;
Rtp数据协议负责对流媒体数据进行封包并实现媒体流的实时传输,每一个RTP数据报都由头部(Header)和负载(Payload)两个部分组成,其中头部前12个字节的含义是固定的,而负载则可以是音频或者视频数据。
RTP载荷封装设计本文的网络传输是基于IP协议,所以最大传输单元(MTU)最大为1500字节,在使用IP/UDP/RTP的协议层次结构的时候,这 其中包括至少20字节的IP头,8字节的UDP头,以及12字节的RTP头。这样,头信息至少要占用40个字节,那么RTP载荷的最大尺寸为1460字 节。以H264 为例,如果一帧数据大于1460,则需要分片打包,然后到接收端再拆包,组合成一帧数据,进行解码播放。
==RTCP控制协议需要与RTP数据协议一起配合使用,当应用程序启动一个RTP会话时将同时占用两个端口,分别供RTP和RTCP使用。RTP本身并 不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完成。==通常RTCP会采用与RTP相同的分发机制,向会话中的 所有成员周期性地发送控制信息,应用程序通过接收这些数据,从中获取会话参与者的相关资料,以及网络状况、分组丢失概率等反馈信息,从而能够对服务质量进 行控制或者对网络状况进行诊断。
该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括Adobe Media Server/Ultrant Media Server/red5等。
由于 RTMP 播放视频需要依赖 Flash 插件。而 Flash 插件多年来一直受安全问题困扰,正在被迅速淘汰。因此,目前 RTMP 主要用于提取 stream。也就是,当设置解编码器将视频发送到托管平台时,视频将使用 RTMP 协议发送到 CDN,随后使用另一种协议(通常是HLS)传递给播放器。
优点,支持直播、点播
缺点, 需要专用的服务器。
Dynamic Adaptive Streaming over HTTP (MPEG-DASH)
Microsoft Smooth Streaming (MSS)
HTTP Dynamic Streaming (HDS)
MPEG是ISO/IEC JTC1 1988年成立的运动图像专家组(Moving Picture Expert Group)的简称,负责数字视频、音频和其它媒体的压缩、解压缩、处理和表示等国际技术标准的制定工作。
MPEG-1制定于1992年,它是将视频数据压缩成1~2Mb/s的标准数据流。它主要用于家用VCD,它需要的存储空间比较大。
MPEG-2制定于1994年,是为高级工业标准的图像质量以及更高的传输率而设计,它是高质量视频音频编码标准。在常规电视的数字化、高清晰电视HDTV、视频点播VOD,交互式电视等各个领域中都是核心的技术之一。
MPEG-4于1998年11月公布,主要应用于视像电话(Video Phone),视像电子邮件(Video Email)和电子新闻(Electronic News)等,其传输速率要求较低。它与MPEG-2相比,可节省90%的储存空间。MPEG-4标准是面向对象的压缩方式,不是像MPEG-1和MPEG-2简单地将图像分为一些像块,而是根据图像内容,将其中的对象(物体、人物、背景)分离出来分别进行帧内、帧间编码压缩,并允许在不同的对象之间灵活分配码率,对重要的对象分配较多的字节,对次要的对象分配较少的字节,从而大大提高了压缩比,使其在较低的码率下获得较好的效果。
MPEG-7是针对存储形式(在线、脱机)或流形式(如 Internet上的广播、推送模型)的应用而制定的,并且可以在实时和非实时环境中操作。它是为互联网视频检索制定的压缩标准。MPEG-7标准的正式名称为”多媒体内容描述接口”(Multimedia Content Description Interface), 其目标就是产生一种描述多媒体内容数据的标准,满足实时、非实时以及推-拉应用的需求,它既不同于基于波形和基于压缩的表示方式如MPEG-1和MPEG -2,又不同于基于对象的表示方式如MPEG-4,而是将对各种不同类型的多媒体信息进行标准化描述,并将该描述与所描述的内容相联系,以实现快速有效的搜索。
MPEG-21 Multimedia Framework是致力于在大范围的网络上实现透明的传输和对多媒体资源的充分利用。MPEG-21致力于为多媒体传输和使用定义一个标准化的开放框架。
WMV(WINDOWS MEDIA VIDEO):是微软推出的一种流媒体格式,WMV格式的体积非常小,适合在网上播放和传输。但由于非开放性标准,时延非常大。
H.261:于1990年完成,实际的编码算法类似于MPEG算法,但不能与后者兼容。用于电视会议、可视电话。
H.263:于1996年完成,与H.261相比采用了半象素的运动补偿,并增加了4种有效的压缩编码模式。但是其限制了应用的图像输入格式,仅允许5种视频源格式。
H.263+:允许更大范围的图像输入格式,自定义图像的尺寸,从而拓宽了标准使用的范围,使之可以处理基于视窗的计算机图像、更高帧频的图像序列及宽屏图像。
H.263++:在H263+基础上增加了3个选项,主要是为了增强码流在恶劣信道上的抗误码性能,同时为了提高增强编码效率。
H.264/MPEG-4 AVC:压缩能力比H.263更强。高压缩比、高图像质量、良好的网络适应性,在较低带宽上提供高质量的图像传输。是为新一代交互视频通讯制定的标准。该标准也被称为AVC(Advanced Video Coding)标准,是MPEG-4的第10部分。
H.265:是继H.264之后所制定的新的视频编码标准。H.265标准围绕着现有的视频编码标准H.264,保留原来的某些技术,同时对一些相关的技术加以改进。新技术使用先进的技术用以改善码流、编码质量、延时和算法复杂度之间的关系,达到最优化设置。H.265旨在在有限带宽下传输更高质量的网络视频,仅需原先的一半带宽即可播放相同质量的视频。这也意味着,我们的智能手机、平板机等移动设备将能够直接在线播放1080p的全高清视频。H.265标准也同时支持4K(4096×2160)和8K(8192×4320)超高清视频。
H.266:/VVC目标是全面超越上一代标准H.265/HEVC,提供更高的压缩性能。从目前的情况看H.266/VVC方案的目标,已经圆满的达成了。相对于H.265/HEVC,新一代国际视频编解码标准(H.266/VVC)能够在不影响主观质量的情况下,将压缩比例提高了50%。可以说如果新的H.266/VVC标准能够顺利推广,那么将使整个高清视频行业迎来一波重大的发展机遇,尤其是与5G的发展叠加,其未来发展空间可谓巨大。
H.266何以如此高效
H.266/VVC与H.265/HEVC有相同的编解码器模块,都包含块划分、帧内预测、帧间预测、变换与量化、熵编码、滤波。H.266/VVC在每个模块上都有相应的提高,才最终达到相同主观质量下50%左右的码率节省。
编码器框架:(H.266/VVC)基于块的分层编码结构。其参考软件编码结构如下图所示:
分块:在视频编码算法中,分块是堪称是技术底座,其任务是将图像被分成一系列的树形编码单元(CTU)。CTU可以进一步划分成编码单元(CU)。H.266采用了多类型树结构(Multi-Type Tree),即由四叉树(QT),二叉树(BT)和三叉树(TT)结构组成。这种划分结构比之前灵活很多,极大的提高了编码性能。
CTU首先由四叉树结构划分,即CTU块可以不划分或递归地划分成4个相同大小的子块。
然后,在QT的叶节点可以通过二叉树或三叉树结构进一步划分。二叉树和三叉树划分可以交错并递归进行。但是,一旦应用二叉树或三叉树划分,就不允许进行四叉树的划分了。二叉树和三叉树有水平和垂直两种划分类型。对于二叉树划分,两种划分类型都是对称的。对于三叉树划分,划分的比例为1:2:1。
由下图可以看到,二叉树划分以中心线将一个块一分为二,而三叉树划分将中心区域保留成一个完整区域,与二叉树划分形成互补,从而提高了编码效率。此外,1:2:1的划分比例使得三叉树划分后,每一个CU的边长仍然是2的整数次幂,既方便进一步划分,又使得变换(transform)设计相对简单。
帧内预测:这是一种空间域压缩算法,利用当前块周边已重建像素对当前块进行预测,以去除相邻块之间的空间冗余度,实现更为有效的压缩。
帧间预测:这是一种时间域压缩算法,利用视频图像帧间的相关性,即时间相关性,来达到图像压缩的目的。
变换与量化:大量统计表明,视频信号中包含着能量上占大部分的直流和低频成分,即图像的平坦部分,也有少量的高频成分,即图像的细节。因此,可以在频域对于视频进行编码来达到压缩的目的。此外,量化技术可以进一步降低码率,根据应用要求,在码率和失真中达到平衡。
熵编码:我们知道熵是代表着一个系统混乱程度的量,而在信息论中,系统的熵也代表了其所包含的信息量,用精确的术语表述是,系统所有符号包含信息的平均比特数。而视频编码中,要尽可能的减少冗余,使之接近熵本身,即使用更少的编码,来表达更多的信息,熵编码,就是数据压缩中根据视频的概率模型,来压缩结果熵最小化的算法。
滤波:H.266/VVC中,除上一代标准中已有的Deblocking 和SAO两种滤波器外,还增加了自适应环路滤波ALF和亮度映射色度缩放滤波LMCS,从而进一步提高了编码效率。
视频中每帧代表一幅静止的图像,而在实际压缩时,会采取各种算法减少数据的容量,其中IPB就是最常见的。
I帧是关键帧,属于帧内压缩(P、B为帧间)。尽可能去除图像空间冗余信息来压缩传输数据量的帧内编码图像。I帧法是基于离散余弦变换DCT(Discrete Cosine Transform)的压缩技术,这种算法与JPEG压缩算法类似。采用I帧压缩可达到1/6的压缩比而无明显的压缩痕迹。解码时仅用I帧的数据就可重构完整图像。
P帧也叫预测帧,表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据。
B帧也叫双向预测帧。既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像。B帧不是参考帧,不会造成解码错误的扩散。
一般地,I帧压缩效率最低,P帧较高,B帧最高。I、B、P各帧是根据压缩算法的需要,是人为定义的,它们都是实实在在的物理帧,至于图像中的哪一帧是I帧,是随机的,一旦确定确定了I帧,以后的各帧就严格按规定顺序排列。
封装格式就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中,这个文件也就相当于一个容器。采用不同的方式把视频编码和音频编码打包成一个完整的多媒体文件,也就出现了不同的后缀,常见的封装格式:
(1). AVI:微软在90年代初创立的封装标准,其含义是Audio Video Interactive,就是把视频和音频编码混合在一起储存。
(2). mov:QuickTime Movie是由苹果公司开发的容器。
(3). WMV:是微软公司开发的一组数位视频编解码格式的通称。
(4). mkv: Matroska的简称,万能封装器,有良好的兼容和跨平台性、纠错性,可带外挂字幕。
(5). flv: 这种封装方式可以很好的保护原始地址,一些视频分享网站采用这种封装方式。
(6). rmvb/rm:Real Video,由RealNetworks开发的应用于rmvb和rm的不同封装方式。rm是固定码率,rmvb是动态码率(就是静态画面采用用低码率,动态采用高码率)。
(7). MP4:主要应用于mpeg4的封装。
(8). 3GP:主要应用于H.263的封装。
音视频封装也可以查看这篇文章
由于不同的播放器支持不同的视频文件格式,或者计算机中缺少相应格式的解码器,或者一些外部播放装置(比如手机、MP4等)只能播放固定的格式,因此就会出现视频无法播放的现象。在这种情况下就要使用格式转换器软件来弥补这一缺陷。
音视频编解码主要有如下三大组织推动并发展历史:
ITU(国际电信联盟)。
ISO/IEC。
JVT(Joint Video Team,视频联合工作组)。
ITU 提出了 H.261、H.262、H.263、H.263+、H.263++,这些统称为 H.26X 系列,主要应用于实时视频通信领域,如会议电视、可视电话等;
ISO/IEC 提出了 MPEG1、MPEG2、MPEG4、MPEG7、MPEG21,统称为 MPEG系列。
ITU 和 ISO/IEC 一开始是各自捣鼓,后来,两边成立了一个联合小组,名叫 JVT(Joint Video Team,视频联合工作组)。
JVT 致力于新一代视频编码标准的制定,后来推出了包括 H.264 在内的一系列标准:
视频编码标准的发展关系:
H.265介绍