视频基础概念
最近经常会遇到视频相关的概念,比如 AVI、MP4、RMVB、MKV、FLV以及m3u8、H.264、H.265等等,这些格式都是做什么的?它们之间到底都是什么关系,今天梳理一下。
视频封装格式
视频封装格式对应的英文是video container format
,就是容器格式。因为视频文件通常会包括图像、音频,以及一些配置信息,这些内容需要按照一定的规则组织,方便后续的播放。封装格式就是定义如何组织这些内容。
常见的视频封装格式:
封装格式 | 英文全称 | 文件格式 | 说明 |
---|---|---|---|
AVI | Audio Video Interleaved | .AVI | 音频视频交错格式,微软公司开发 |
QTFF | QuickTime File Format | .MOV .QT | Apple公司开发 |
MPEG-1 | MPEG-1 | .MPEG .MPG | 已成为世界上兼容最广泛的有损音频/视频格式,并被大量产品和技术使用 |
MPEG program stream (PS) | MPEG program stream | .M2P .PS | 属于MPEG-2标准的一部分,MPEG-PS 节目流,主要应用于存储的具有固定时长的节目 |
MPEG transport stream (TS) | MPEG transport stream | .TS | 属于MPEG-2标准的一部分,MPEG-TS 传输流,主要应用于实时传送的节目 |
MPEG-4 | MPEG-4 Part 14 | .MP4 | MPEG-4 格式基于QuickTime 格式制定 |
WMV | Windows Media Video | .WMV | 微软公司推出 |
RealMedia | Real Media | .RM .RMVB | Real Networks公司开发 |
Flash video | Flash video | .FLV | Adobe 公司开发 |
Matroska | Matroska Multimedia Container | .MKV .MK3D | |
Ogg | Ogg | .OGG .OGV .OGX | 由 Xiph.Org 基金会维护 |
视频编码格式
视频视频编码格式的英文是video coding fomat
,有时候也称为视频压缩格式(video compression format
)。原始的视频内容体积很大,必须经过压缩得到更小的文件,才方便分发。播放的时候,有需要解压还原其中的内容,对视频文件的压缩和解压操作更精确的术语是对视频数据进行编码(coding
)和解码(decoding
)。编解码格式定义编码、解码的规则,本质上就是一种压缩标准。不同的编解码格式,影响视频的压缩的性能、效率、内容质量等等。对于这些视频编码格式,进行规范化描述,甚至标准化,就产生了视频编码标准。
常见的编码格式:
编码格式 | 说明 |
---|---|
MPEG-1 | VCD的编码格式,MP3是MPEG-1音频Layer 3部分 |
MPEG-2 | 通常用来为广播信号提供视频和音频编码,包括卫星电视、有线电视等。DVD的编码格式 |
MPEG-4 | 较为常用的格式。MPEG-4支持MPEG-1、MPEG-2中大多数功能 |
H.261 | 早期用于视频会议,H.261适用于ISDN、DDN线路 |
H.262 | H.262在技术内容上和MPEG-2一致 |
H.263 | 用于视频会议的低码率影像编码标准 |
H.264/AVC | 同时也是 MPEG-4 的第10部分,即 MPEG-4 AVC。是一种面向块的基于运动补偿的编解码器标准,是目前最常用编解码格式之一 |
H.265/HEVC | 同时也是 MPEG-H 的第二部分。是 H.264/AVC 的下一代标准。同等画质,达到 H.264/AVC 两倍压缩率,最高清晰度 8K |
Apple Pro Res | Apple公司MOV视频封装格式的专用编码 |
AOMedia Video 1(AV1) | 基于谷歌的 VP9 格式,由 AOMedia 开发,用于通过 Internet 进行视频传输,性能与H.265/HEVC 大致相当 |
RealVideo | RealNetworks 公司开发,一开始基于 H.263 格式,直到 RealVideo 8,该公司切换到专有视频格式 |
可以看到 MPEG 系列既是一种视频封装格式,又指代同名的视频编码格式。
还有一些不常用编码格式:AMV,AVS,Indeo Video,Theora,VP3,VP6,VP7,VP8,VP9 ,WMV等等。
主流的视频编解码标准就是 MPEG 系列和 H.26x 系列,是因为视频编解码器的标准主要由两个组织制定:
- 国际标准化组织(ISO)和国际电工委员会(IEC)下属的动态图像专家小组(Moving Picture Experts Group,MPEG)
- 国际电信联盟电信标准化部门(ITU-T)的标准研究群组下的视频编码专家组(Video Coding Experts Group,VCEG)
H.264和H.265由 VCEG 和 MPEG 合作共同发布的标准。
特定的视频封装格式一般都会支持多种视频编码格式,但并给定一个视频封装格式,并不是支持任意的视频编码格式。以下是封装格式不支持的编码格式:
格式 | AVI | QTFF | MPEG-4 | WMV | Real Media | Flash video | Matroska | Ogg | MPEG-2 PS,TS |
---|---|---|---|---|---|---|---|---|---|
MPEG-1 | No | No | No | ||||||
MPEG-2 | No | No | No | ||||||
MPEG-4 | No | ||||||||
H.261 | No | No | No | No | No | ||||
H.262 | No | No | No | No | No | ||||
H.263 | No | No | No | No | No | ||||
H.264/AVC | No | No | |||||||
H.265/HEVC | No | No | No | ||||||
Apple Pro Res | No | No | No | ||||||
AOMedia Video 1(AV1) | No | No | No | No | No | No | |||
RealVideo | NO | No | No | No | No |
编解码器
能够对特定视频编码格式进行压缩或解压缩的特定软件或硬件实现称为视频编解码器。对于每一种编码格式比如H.264,存在许多编解码器实现其规范要求。
于是导致有时候,一些编码格式也被称为编解码器。但是要注意,编码格式或者编码规范,并不等同于编解码器,两者之间的差异是标准规范与实际实现的差异。
流媒体
流媒体(Streaming Media)是将音视频编码之后,以流的方式在网络中实时传输的技术。
上面讲的视频封装格式,主要是面向文件形式为主,不适合流媒体传输(类似于 MPEG-TS 传输流,Real Media 能够很好地支持流媒体传输)。
流媒体传输技术主要有两种方式:
- 顺序流式传输( progressive streaming)
- 实时流式传输( real time streaming)
流媒体传输网络协议
常见的流媒体传输协议:
RTSP(Real Time Streaming Protocol)
是由Real Network和Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议。RTSP协议本身并不负责数据传输,通常(非必须)是通过 RTP 配合 RTCP 完成数据流和控制命令(同步、QOS管理等)的传输。
- RTP (Real-time Transport Protocol):真正用来传输音频视频的协议,一般是建立在 UDP 协议的基础上,特别需要注意的是,它使用偶数端口。
- RTCP (Real-time Control Protocol):控制协议,通过周期性发送统计信息,提供服务质量(QoS)的反馈,它使用的端口是奇数,而且就是 RTP 端口 +1。
Real-Time Messaging Protocol (RTMP)
RTMP被设计用来对基于底层传输协议(如TCP)的多媒体传输流(如音频、视频和交互数据)进行复用和分包。RTMP 协议延迟非常低,但由于需要使用因安全问题被淘汰的 Flash 插件,不建议使用该协议。RTMP 主要用于提取 stream。
Dynamic Adaptive Streaming over HTTP (MPEG-DASH)
是最新的协议之一。尽管未被广泛使用,几乎支持所有编解码器,支持加密媒体扩展(Encrpted Media Extensions,EME)和媒体扩展源(Media Source Extension,MSE),而且支持码率自适应。
HTTP Live Streaming (HLS)
HLS 是 Apple 公司推出的,目前使用最广泛的协议,且功能强大。支持码率自适应,支持最新的 H.265 解编码器。HLS 缺点一直是高延迟。最新的解决方案可以将延迟从8秒降低到1至2秒。
HLS 协议基于 Http 协议,规定视频封装格式为 MPEG-TS ,视频的编码格式为 H.264(最新支持H.265), 音频编码格式为 MP3 、 AAC 或者 AC-3 。
m3u8
,是 HLS
协议定义的索引文件。实质上是一个播放列表(playlist)
HLS
基本实现原理为将一个大的媒体文件进行分片,将该分片文件资源路径记录于 m3u8 文件内,并附带一些额外描述(比如该资源的多带宽信息)用于提供给客户端。客户端依据该 m3u8 文件即可获取对应的媒体资源,进行播放。客户端获取 HLS 流文件,主要就是对 m3u8 文件进行解析操作。
流媒体常用封装格式与编码格式
封装格式:MPEG-TS,fragmented MP4(分段Mp4格式),当前新的标准: The Common Media Application Format (CMAF)。
编码格式:H.264/AVC,H.265/HEVC 。