0%

音视频编码格式和文件格式

音视频文件格式和编码格式

主要是搞清楚两个概念:编码格式和文件格式。

由于音视频的原始数据都很大,不方便存储与传输,所以就有各种各样的编码技术或算法对其进行编码以达到减少数据的目的,这些编码技术就叫编码格式,有些编码格式解码后能够完全恢复为原始数据,因此这些编码格式也被称为无损压缩,而有些编码格式解码后不能恢复为原来的数据因此也被称为有损压缩。

我们通常说的音视频格式准确地讲应该是音视频文件格式。音视频文件格式它是一个容器里面包含了音频、视频、字幕等,有时也被称为封装格式。有些文件格式只能装载特定编码格式的数据,而有些文件格式既可以装载A编码格式的数据,也可以装载B编码格式的数据,不过这也会带来一些问题比如某个播放器只能播放装载A编码格式的.mp4文件,这时如果你给他一个装载B编码格式的.mp4文件那么这个播放器就会播放失败。对于音频文件,虽然一种音频文件格式可以支持多种编码,例如AVI文件格式,但多数的音频文件仅支持一种音频编码。

音视频文件的名字后面都会有一个扩展名,这个扩展名就代表它是什么文件格式,扩展名的作用就是告诉操作系统应该使用什么样的软件来打开该文件,对于音视频文件改变扩展名并不影响内部数据的编码格式,反而还会误导操作系统,导致文件打开失败,如果想改变编码格式则需要专门的格式转换软件。

编码技术是会不断发展迭代的,所以经常会看到一个编码技术下面可能还会分好几个子类。另外编码格式有各个厂商推出的,也有标准组织推出的,也有个人推出的。这也导致了市面上出现了各种编码格式,每种编码格式又会对应一种文件格式,这就造成了新手在一堆格式名称里晕头转向。我们所说的格式一般指文件格式,但有些时候又是指编码格式,造成这种现象的原因主要是大部分文件格式只支持一种编码格式,这个时候文件格式和编码格式可以看做是同一个东西。

一个音频文件的播放过程:

音频文件——>解封装——->解码———>渲染播放

视频播放则要复杂一些,主要是音频和视频的同步。

如下图:

图片文件,音频文件,视频文件感觉都是一个套路。

常见音频文件格式:

  • 无损格式,例如WAV,PCM,ALS,ALAC,TAK,FLAC,APE,WavPack(WV)
  • 有损格式,例如MP3,AAC,WMA,Ogg Vorbis

AVPlayer支持的格式

可以通过这几个API查看文件是否支持播放

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*!
@method audiovisualTypes
@abstract Provides the file types the AVURLAsset class understands.
@result An NSArray of UTIs identifying the file types the AVURLAsset class understands.
*/
+ (NSArray<AVFileType> *)audiovisualTypes API_AVAILABLE(macos(10.7), ios(5.0), tvos(9.0), watchos(1.0));

/*!
@method audiovisualMIMETypes
@abstract Provides the MIME types the AVURLAsset class understands.
@result An NSArray of NSStrings containing MIME types the AVURLAsset class understands.
*/
+ (NSArray<NSString *> *)audiovisualMIMETypes API_AVAILABLE(macos(10.7), ios(5.0), tvos(9.0), watchos(1.0));

/*!
@method isPlayableExtendedMIMEType:
@abstract Returns YES if asset is playable with the codec(s) and container type specified in extendedMIMEType. Returns NO otherwise.
@param extendedMIMEType
@result YES or NO.
*/
+ (BOOL)isPlayableExtendedMIMEType: (NSString *)extendedMIMEType API_AVAILABLE(macos(10.7), ios(5.0), tvos(9.0), watchos(1.0));

支持的格式,MIME打印:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
"audio/vnd.wave",
"audio/aacp",
"video/3gpp2",
"audio/mpeg3",
"audio/mp3",
"audio/x-caf",
"audio/mpeg",
"video/quicktime",
"audio/x-mpeg3",
"video/mp4",
"audio/wav",
"video/avi",
"audio/flac",
"audio/mp4",
"audio/x-mpg",
"audio/scpls",
"video/x-m4v",
"audio/x-wav",
"audio/x-aiff",
"application/ttml+xml",
"application/vnd.apple.mpegurl",
"video/3gpp",
"text/vtt",
"audio/usac",
"audio/x-mpeg",
"audio/wave",
"audio/x-m4r",
"audio/x-mp3",
"audio/AMR",
"audio/aiff",
"audio/3gpp2",
"audio/aac",
"audio/mpg",
"audio/mpegurl",
"audio/x-m4b",
"application/mp4",
"audio/x-m4p",
"audio/x-scpls",
"audio/x-mpegurl",
"audio/x-aac",
"audio/3gpp",
"audio/basic",
"audio/x-m4a",
"application/x-mpegurl"

很明显不支持ogg、wma、ape(一种无损压缩编码格式)、flv、rm这些音频格式。网上很多文章都是瞎写的拷贝的百度百科的,只因为百度百科有一个词条AVPlayer,但是此AVPlayer(是一个播放器)不是彼AVPlayer(iOS里的一个框架)。所以还是用系统API检查一下看看是不是支持。

iOS支持的音频文件格式

iOS supports the audio file formats listed in Table 2-1. For information on audio data formats available in iOS, see Codecs.

Format name Format filename extensions
AIFF .aif, .aiff
CAF .caf
MPEG-1, layer 3 .mp3
MPEG-2 or MPEG-4 ADTS .aac
MPEG-4 .m4a, .mp4
WAV .wav

基本上就是mpeg系列再加上少数几个其他格式。

PCM

PCM:又称脉冲编码调制(也叫音频裸数据)。PCM音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样、量化、编码转换成的标准的数字音频数据。

AIFF

音频交换文件格式(Audio Interchange File Format,缩写为AIFF),苹果公司开发。一个标准的AIFF文件中的音频应是线性PCM,还有一种被称为AIFF-C或AIFC的使用各种压缩编解码器的变体。

是否压缩

无压缩。

文件扩展名

标准AIFF文件的扩展名是.aiff或.aif,压缩过的AIFF文件的扩展名应是.aifc。

WAV

WAV 是 Microsoft 和 IBM 为 PC 开发的一种声音文件格式,它符合 RIFF(Resource Interchange File Format)文件规范,用于保存 Windows 平台的音频信息资源,被 Windows 平台及其应用程序所广泛支持。WAVE 文件通常只是一个具有单个 “WAVE” 块的 RIFF 文件,该块有两个子块(”fmt” 子数据块和 ”data” 子数据块)

该格式的实质就是在 PCM 文件的前面加了一个文件头。

是否压缩

无压缩。

文件扩展名

.wav

CAF

Core Audio Format,即核心音频格式,是苹果公司为了消除.AIFF.WAV格式的局限而开发的音频格式。CAF文件结构的灵活性以及可以记录的多种类型的元数据使它几乎可以与任何类型的音频数据一起使用。

这种文件格式就是典型的一对多的文件格式。你不知道它里面存储的是啥类型的编码格式数据。

文件扩展名

.caf

WMA

Windows Media Audio,是微软公司开发的一系列音频编解码器,也指相应的数字音频编码格式。

是否压缩

有损压缩。(并不绝对,因为一种编解码格式下面可能有好几种子类型,而其中一种子类型可能支持无损压缩。为了方便如果大部分都是有损压缩,就当做有损压缩了)

文件扩展名

.wma

MPEG

MPEG:动态影像专家小组,Moving Picture Experts Group,简称MPEG,是一个源自ISO与IEC等国际组织的工作小组,用以制定影音压缩及传输的规格标准。

MPEG小组到目前为止,已有以下和音视频相关的标准:MPEG-1、MPEG-2、MPEG-3、MPEG-4、MPEG-7、MPEG-21。MPEG-1是MPEG组织制定的第一个视频和音频有损压缩标准。

可以看到MPEG已经制定了很多标准了,这些标准涵盖了很多方面,因此每个标准下面又包含很多个部分。比如MPEG-1包含5个part,Part 2是video部分,Part 3是audio部分,audio部分下面又包含3个Layer,其中MPEG-1 Audio Layer III,就是第一版的MP3。

MPEG-2标准是对MPEG-1标准的补充和扩展。MPEG-2 Part7部分引入了AAC,AAC在MPEG-4的Part 3中也有定义。

MP3

MPEG-1 Audio Layer III

是否压缩

有损压缩。

文件扩展名

.mp3,实际上由于MPEG-1标准下包含很多子标准所以跟MPEG-1有关的文件扩展名非常多。

MPEG-1

MPEG-2

MPEG-4

MPEG-4相关的文件扩展名可以参考:MPEG-4_Part_14的Filename extensions ,扩展名是真的多。

AAC

AAC是高级音频编码(Advanced Audio Coding)的缩写,出现于1997年,最初是基于MPEG-2的音频编码技术,目的是取代MP3格式。2000年,MPEG-4标准出台,AAC重新集成了其它技术包括SBR或PS特性,目前AAC可以定义为⼀种由 MPEG-4 标准定义的有损音频压缩格式。

是否压缩

有损压缩。

ACC 音频文件格式类型

AAC的音频文件格式有ADIF 和 ADTS:

ADIF:Audio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行,这种格式常用在磁盘文件中。

ADTS:Audio Data Transport Stream 音频数据传输流。这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。

简单说,ADTS可以在任意帧解码,也就是说它每一帧都有头信息。ADIF只有一个统一的头,所以必须得到所有的数据后解码。这两种的header的格式也是不同的,一般编码后的和抽取出的都是ADTS格式的音频流。

文件扩展名

.aac

参考

AVPlayer支持的视频格式 ⭐️⭐️⭐️

浅谈iOS视频开发 ⭐️⭐️⭐️

常见音频编码格式总结

音视频封装格式、编码格式知识

音视频编解码技术(二):AAC 音频编码技术 比较详细

.AAC文件扩展名

多媒体文件格式(五):PCM / WAV 格式 比较详细

PCM数据格式你该知道一切

PCM数据格式

MP3文件结构解析(超详细)

MP3格式音频文件结构解析

Comparison of audio coding formats

音频和视频格式

关于CAF文件

觉得文章有帮助可以打赏一下哦!