视频封装格式有哪些(MP4/AVI/FLV/TS/M3U8简介)

视频封装格式也叫做容器,它是将已经编码压缩好的视频流、音频流以及字幕按照一定的方式放到一个文件中,方便播放软件播放。一般来说,视频文件的后缀名就是它的封装格式。

视频封装格式有哪些?常见的有MP4、AVI、FLV、TS,M3U8等,介绍如下:

MP4

MP4(MPEG-4 Part 14)是一种常见的多媒体容器格式,它在ISO/IEC 14496-14标准文件中定义,并属于MPEG-4的一部分。

MP4是一种较为全面的容器格式,被认为可以嵌入任何形式的数据。然而,我们通常见到的大多数MP4文件存储使用AVC(H.264)或MPEG-4(Part 2)编码的视频以及使用AAC编码的音频。MP4格式的官方文件后缀名是”.mp4″,还有其他基于MP4的扩展或简化版本,如M4V、3GP、F4V等。

MP4文件中的所有数据都存储在box(盒子)中,也就是说,MP4由多个box组成,每个box都有类型和长度,并包含不同的信息,可以将box理解为数据对象块。box中可以嵌套另一个box,这种嵌套的box称为容器盒子(container box)。

MP4文件的box以树形结构组织。一个简单的MP4文件由以下几个box节点组成:

– ftyp:File Type Box,文件类型。一个MP4文件只有一个ftyp类型的box,用于标识MP4格式并包含有关文件的一些信息。

– moov:Movie Box,文件媒体的元数据信息。位于ftyp box之后,是一个容器盒子,其中的子box包含了媒体的元数据信息。

– mdat:Media Data Box,媒体数据。MP4文件的实际媒体数据存储在mdat类型的box中,它也是一个容器盒子。可以有多个mdat盒子,也可以没有(当媒体数据完全引用其他文件时)。媒体数据的结构由元数据进行描述。

AVI

AVI(Audio Video Interleaved)是一种成熟的音视频交错格式,尽管被国际学术界认为已经过时,但它仍然广泛使用,因为它具有简单易懂的开发API。AVI符合RIFF(Resource Interchange File Format)文件规范,使用四字符码FOURCC(four-character code)来表示数据类型。AVI文件的结构分为头部、主体和索引三个部分。主体中的图像数据和声音数据是交错存放的,通过尾部的索引可以定位到所需的位置。

AVI本身只提供了一个框架,内部的图像数据和声音数据格式可以是任意编码形式。由于索引位于文件尾部,因此在播放网络流媒体时可能效果不佳。例如,从网络上下载AVI文件,如果下载未完成,将很难正常播放。

AVI中有两种最基本的数据单元:Chunk(数据块)和List(列表)。Chunk由四字符码、4字节的数据大小以及数据本身组成。List由四字符码、“list”、4字节的数据大小以及数据本身组成。与Chunk不同,List的数据内容可以包含子块(Chunk或List)。

AVI文件采用RIFF文件结构方式,并使用FOURCC来表示数据类型,例如”RIFF”、”AVI”、”LIST”等。整个AVI文件可以看作是一个RIFF块,其中包含一系列子块。每个子块由四字符码、数据长度和数据组成。AVI文件通常包含以下几个子块:

– ID为”hdrl”的LIST块,包含音视频信息,描述媒体流信息。

– ID为”info”的LIST块,包含编码该AVI的程序信息。

– ID为”junk”的Chunk数据块,用于填充无用数据。

– ID为”movi”的LIST块,包含交错排列的音视频数据。

– ID为”idx1″的Chunk块,包含音视频排列的索引数据(可选)。

FLV

FLV(Flash Video)是一种流行的流媒体格式,广泛用于网络视频应用。FLV格式具有文件体积轻巧、封装播放简单等特点,因此被广泛应用于视频网站和在线视频播放。

FLV文件由文件头(File Header)和文件体(File Body)两部分组成。文件头包含了关于文件的基本信息,如文件类型标识、版本号等。文件体是由一系列的标签(Tag)和标签大小(Tag Size)组成的。每个标签代表了视频或音频数据的一个时间段,并包含了与该时间段相关的数据和元数据。

FLV格式常用于与Adobe Flash Player(现已被Adobe Animate代替)结合使用,因为Flash Player可以直接解析和播放FLV文件。此外,由于浏览器和Flash Player的紧密结合,网页上播放FLV视频也变得简单易行。

FLV格式的流行使得它成为了在线视频传输和播放的常用格式之一。许多视频网站(如YouTube)和在线视频平台都采用FLV格式来存储和传输视频内容。同时,由于FLV文件体积较小,可以有效节省带宽和存储空间,使其成为网络视频传输的理想选择。

FLV格式的头部(Header)由以下几部分组成:

1. Signature(签名):占用3个字节,固定为FLV三个字符,用于标识文件格式为FLV。

2. Version(版本):占用1个字节,表示FLV的版本号。常见的版本号是1。

3. Flags(标志):占用1个字节,用于指示FLV文件中是否包含视频和音频数据。第0位和第2位分别表示视频和音频的存在情况,1表示存在,0表示不存在。例如,0x05表示既有视频又有音频。

4. DataOffset(数据偏移):占用4个字节,表示FLV头部的长度。这个值固定为9。

FLV的主体部分(Body)由一系列的回指针(Back-pointers)和标签(Tag)组成。

– 回指针(Back-pointers):占用固定的4个字节,表示前一个标签的大小。

– 标签(Tag):分为三种类型,即视频(Video)、音频(Audio)和脚本(Scripts)。

标签由以下部分组成:

– Tag Type(标签类型):占用1个字节,指示标签的类型,其中8表示音频,9表示视频,18表示脚本。

– Tag Data Size(标签数据大小):占用3个字节,表示标签数据的长度,从Stream ID后计算。

– Timestamp(时间戳):占用3个字节,表示标签的时间戳。

– Timestamp Extended(时间戳扩展):占用1个字节,用于扩展时间戳字段。

– Stream ID(流ID):占用3个字节,总是为0。

– Tag Data(标签数据):数据部分,包含了标签的具体内容。

FLV文件的头部和主体部分共同构成了FLV文件的结构。头部包含了文件的基本信息,如版本号和标志位,而主体部分则包含了一系列的标签,每个标签代表了一段时间内的视频、音频或脚本数据。这种结构使得FLV文件能够封装和传输多种类型的媒体数据。

TS

TS(MPEG2-TS)全称为MPEG2传输流(MPEG2 Transport Stream),是一种标准的容器格式,用于传输和存储音视频、节目和系统信息协议数据。它广泛应用于数字广播系统,例如我们日常使用的数字机顶盒接收到的就是TS流。

在理解TS传输流之前,需要了解几个基本概念:

– ES(Elementary Stream,基本流):ES是直接从编码器输出的数据流,可以是经过编码的音频、视频或其他连续的码流。

– PES(Packetized Elementary Streams,分组化基本流):PES流是ES流经过PES打包器处理后形成的数据流。在这个过程中,ES流被分组并添加了包头信息,如PTS(Presentation Timestamp)和DTS(Decoding Timestamp)。PES流的基本单位是PES包,它由包头和有效负载(payload)组成。

– PS流(Program Stream,节目流):PS流由PS包组成,而一个PS包由多个PES包组成。一个PS包由具有相同时间基准的一个或多个PES包组合而成。

– TS流(Transport Stream,传输流):TS流由固定长度(通常为188字节)的TS包组成。TS包是对PES包的另一种封装方式,同样由具有相同时间基准的一个或多个PES包组合而成。与PS流不同,TS包具有固定的长度。TS流的目的是为了便于传输和实现时分复用。

在MPEG-2标准中,有两种不同类型的码流可以输出,一种是PS流(Program Stream),一种是TS流(Transport Stream)。PS流的包结构长度可变,当丢失某个PS包的同步信息时,接收端无法确定下一个包的同步位置,导致数据丢失。因此,PS流适用于可靠的媒体传输,例如光盘(DVD),通常使用.vob或.evo作为文件后缀名。而TS传输流不同,TS包具有固定的长度(通常为188字节),当传输误码破坏了某个TS包的同步信息时,接收端可以在固定位置检测后续包的同步信息,从而恢复同步,避免数据丢失。因此,TS流适用于不太可靠的传输环境,例如地面或卫星传播,通常使用.ts、.mpg或.mpeg作为文件后缀名。

由于TS码流具有较强的传输误码抵抗能力,因此目前在传输媒体中使用的MPEG-2码流基本上都采用TS格式。

在电视数字信号中,TS流的形成过程如下所示:

1) 原始音视频数据经过压缩编码得到基本流ES流:原始的音视频数据经过压缩编码,例如使用MPEG编码标准,生成压缩后的音视频数据流,这个数据流被称为基本流或ES流。ES流包含了视频帧和音频取样信息,但是文件大小较大。

2) 对ES基本流进行打包生成PES流:为了方便传输和处理,ES基本流需要进行打包处理,生成PES流。通过PES打包器,ES基本流被分组打包,每个包前面加上包头信息,形成PES流的基本单位,即PES包。对于视频,通常每一帧对应一个PES包,而对于音频,一个包的大小通常不超过64KB。PES包的包头信息中包含了PTS(Presentation Timestamp)和DTS(Decoding Timestamp)等信息,用于音视频的同步播放。

3) 同一时间基准的PES包经过TS复用器生成TS传输包:由于PES包的长度通常远大于TS包的长度,一个PES包需要由多个TS包来传输。通过TS复用器,将PES包的内容分配到一系列固定长度的传输包(TS Packet)中,形成TS流。TS传输包的包头中加入了PCR(Program Clock Reference)和PSI(Program-Specific Information)等信息。PCR用于解码器的系统时钟恢复,而PSI包含了节目的相关信息。

在解码器端,首先利用PCR时钟重建与编码器同步的系统时钟,然后利用PES流中的DTS和PTS进行音视频的同步解码和播放。PTS用于指示音视频正确显示的时间,而DTS用于解码器解码的时间顺序。

综上所述,TS流的形成过程涉及将原始音视频数据进行压缩编码、打包为PES流,并将PES流复用为TS流进行传输。TS流具有固定长度的传输包和较强的传输误码抵抗能力,适用于数字广播系统中的传输和存储。

M3U8

M3U8文件是一种使用UTF-8编码的Unicode版本的M3U文件。它是苹果公司使用的HTTP Live Streaming(HLS)协议的基础格式。HLS是一种基于HTTP的流媒体网络传输协议,主要用于在iPhone、Macbook等设备上进行流媒体播放。

M3U8文件实际上是HLS协议的一部分内容。HLS的工作原理是将整个流媒体分成多个小的基于HTTP的文件进行下载,每次只下载一部分。当流媒体正在播放时,客户端可以从多个备用源中选择以不同的速率下载相同的资源,以适应不同的数据速率。在开始流媒体会话时,客户端会下载一个包含元数据的扩展M3U(m3u8)播放列表文件,用于查找可用的媒体流。

HLS协议与实时传输协议(RTP)不同,它只请求基本的HTTP报文,因此可以穿越允许HTTP数据通过的防火墙或代理服务器。同时,HLS也可以方便地使用内容分发网络(CDN)来传输流媒体。

简而言之,HLS是新一代的流媒体传输协议,其基本实现原理是将大的媒体文件分割成片段,将这些分段文件的路径记录在m3u8文件(播放列表)中,并附带一些额外的描述信息(例如多个可用的码率等),以供客户端获取和播放相应的媒体资源。

因此,客户端获取HLS流文件的主要操作是解析m3u8文件,从中获取媒体资源的路径和相关信息,然后通过HTTP请求获取相应的媒体片段进行播放。

M3U8文件实质上是一个播放列表(playlist),它可以是媒体播放列表(Media Playlist)或主列表(Master Playlist)。不论是哪种类型的播放列表,它们都使用UTF-8编码。

当M3U8文件作为媒体播放列表(Media Playlist)时,它记录了一系列媒体片段资源,并按顺序播放这些片段资源以完整展示多媒体资源。其格式通常如下所示:

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXTINF:9.009,
http://media.example.com/first.ts
#EXTINF:9.009,
http://media.example.com/second.ts
#EXTINF:3.003,
http://media.example.com/third.ts

对于点播(Video on Demand),客户端只需按顺序下载上述片段资源,并逐个进行播放。

而对于直播(Live Streaming),客户端需要定时重新请求该M3U8文件,以查看是否有新的片段数据需要下载和播放。

当M3U8文件作为主列表(Master Playlist)时,它提供了同一份媒体资源的多个流列表资源(Variant Stream)。其格式通常如下所示:

#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=150000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/low/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=240000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/lo_mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=440000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/hi_mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=640000,RESOLUTION=640x360,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/high/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=64000,CODECS="mp4a.40.5"
http://example.com/audio/index.m3u8

这些备用流资源指定了多种不同码率、不同分辨率和不同编码格式的媒体播放列表。此外,备用流资源还可以提供不同版本的内容,例如不同语言的音频文件或不同角度拍摄的视频文件等。客户端可以根据网络状态选择适合的码率资源,并根据用户喜好选择适合的内容资源。

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/zixun/36832.html

(0)

相关推荐

发表回复

登录后才能评论