Skip to content

Commit 5759f3b

Browse files
committed
update
1 parent 3b91efe commit 5759f3b

7 files changed

Lines changed: 37 additions & 262 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -543,7 +543,7 @@ Android学习笔记
543543
[247]: https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/%E6%B5%81%E5%AA%92%E4%BD%93%E5%8D%8F%E8%AE%AE/HLS.md "HLS"
544544
[248]: https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/%E6%B5%81%E5%AA%92%E4%BD%93%E5%8D%8F%E8%AE%AE/DASH.md "DASH"
545545
[249]: https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/%E6%B5%81%E5%AA%92%E4%BD%93%E5%8D%8F%E8%AE%AE/HTTP%20FLV.md "HTTP FLV"
546-
[250]: https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/%E6%B5%81%E5%AA%92%E4%BD%93%E5%8D%8F%E8%AE%AE/DASH.md "RTMP"
546+
[250]: https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/%E6%B5%81%E5%AA%92%E4%BD%93%E5%8D%8F%E8%AE%AE/RTMP.md "RTMP"
547547
[251]: https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/%E8%A7%86%E9%A2%91%E5%B0%81%E8%A3%85%E6%A0%BC%E5%BC%8F/MP4%E6%A0%BC%E5%BC%8F%E8%AF%A6%E8%A7%A3.md "MP4格式详解"
548548
[252]: https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/%E8%A7%86%E9%A2%91%E5%B0%81%E8%A3%85%E6%A0%BC%E5%BC%8F/FLV.md "FLV"
549549
[253]: https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/%E8%A7%86%E9%A2%91%E5%B0%81%E8%A3%85%E6%A0%BC%E5%BC%8F/TS.md "TS"

VideoDevelopment/流媒体协议/HLS.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -202,11 +202,11 @@ live m3u8文件列表需要不断更新,更新规则:
202202

203203
#### 测试地址:
204204

205-
CCTV1高清:http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8
206-
CCTV3高清:http://ivi.bupt.edu.cn/hls/cctv3hd.m3u8
207-
CCTV5高清:http://ivi.bupt.edu.cn/hls/cctv5hd.m3u8
208-
CCTV5+高清:http://ivi.bupt.edu.cn/hls/cctv5phd.m3u8
209-
CCTV6高清:http://ivi.bupt.edu.cn/hls/cctv6hd.m3u8
205+
- CCTV1高清:http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8
206+
- CCTV3高清:http://ivi.bupt.edu.cn/hls/cctv3hd.m3u8
207+
- CCTV5高清:http://ivi.bupt.edu.cn/hls/cctv5hd.m3u8
208+
- CCTV5+高清:http://ivi.bupt.edu.cn/hls/cctv5phd.m3u8
209+
- CCTV6高清:http://ivi.bupt.edu.cn/hls/cctv6hd.m3u8
210210

211211

212212

VideoDevelopment/视频封装格式/FLV.md

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,29 @@ FLV
55

66
FLV封装格式是由一个文件头(FLV header)和很多tag组成(FLV body)组成的二进制文件。Tag中包含了音频数据以及视频数据。FLV的结构如下图所示。
77

8-
![img](https://img-blog.csdn.net/20160118103525777)
8+
![Image](https://raw.githubusercontent.com/CharonChui/Pictures/master/flv_tag.jpg?raw=true)
9+
10+
911

1012
tag又可以分成三类:audio,video,script,分别代表音频流,视频流,脚本流,而每个tag又由tag header和tag data组成。
1113

1214

1315

1416
#### FLV整体结构图:
1517

16-
![img](https:////upload-images.jianshu.io/upload_images/9078032-4d1e3f09df181782.png?imageMogr2/auto-orient/strip|imageView2/2/w/843)
18+
![Image](https://raw.githubusercontent.com/CharonChui/Pictures/master/flv_tag.jpg?raw=true)
19+
20+
21+
22+
![Image](https://raw.githubusercontent.com/CharonChui/Pictures/master/flv_header_tag.png?raw=true)
1723

1824

1925

2026
#### FLV文件头结构图
2127

22-
2328

24-
![img](https:////upload-images.jianshu.io/upload_images/9078032-b0bab07d69f55262.png?imageMogr2/auto-orient/strip|imageView2/2/w/624)
29+
30+
![Image](https://raw.githubusercontent.com/CharonChui/Pictures/master/flv_tag_2.png?raw=true)
2531

2632

2733

@@ -33,7 +39,7 @@ tag又可以分成三类:audio,video,script,分别代表音频流,视频流
3339

3440
​ tag结构图:
3541

36-
![img](https:////upload-images.jianshu.io/upload_images/9078032-24c834de3b517f60.png?imageMogr2/auto-orient/strip|imageView2/2/w/853)
42+
![Image](https://raw.githubusercontent.com/CharonChui/Pictures/master/flv_body_tag.png?raw=true)
3743

3844
​ tag header:
3945

@@ -51,25 +57,29 @@ tag又可以分成三类:audio,video,script,分别代表音频流,视频流
5157

5258
​ 音频TagData结构分析:
5359

54-
![img](https:////upload-images.jianshu.io/upload_images/9078032-2339809cce2f8ab0.png?imageMogr2/auto-orient/strip|imageView2/2/w/852)
60+
![Image](https://raw.githubusercontent.com/CharonChui/Pictures/master/flv_audio_tag.png?raw=true)
5561

5662
​ 音频参数中各字段的值及其意义如下表所示:
5763

58-
![img](https:////upload-images.jianshu.io/upload_images/9078032-7265d2aa76864647.png?imageMogr2/auto-orient/strip|imageView2/2/w/654)
64+
65+
66+
![Image](https://raw.githubusercontent.com/CharonChui/Pictures/master/flv_audio_tag2.png?raw=true)
5967

6068
音频参数对照表
6169

6270
​ 视频TagData结构:
6371

64-
![img](https:////upload-images.jianshu.io/upload_images/9078032-78db278c8115b2a8.png?imageMogr2/auto-orient/strip|imageView2/2/w/851)
72+
![Image](https://raw.githubusercontent.com/CharonChui/Pictures/master/flv_video_tag.png?raw=true)
6573

6674

6775

6876
​ Script TagData结构
6977

7078
​ Script Tag通常被称为Metadata Tag,会放一些关于FLV视频和音频的元数据信息如:duration、width、height等。通常此类型Tag会跟在File Header后面作为第一个Tag出现,而且只有一个。
7179

72-
![img](https:////upload-images.jianshu.io/upload_images/9078032-52b10dcecd85efe9.png?imageMogr2/auto-orient/strip|imageView2/2/w/843)
80+
![Image](https://raw.githubusercontent.com/CharonChui/Pictures/master/flv_script_tag.png?raw=true)
81+
82+
7383

7484

7585

@@ -81,13 +91,15 @@ tag又可以分成三类:audio,video,script,分别代表音频流,视频流
8191

8292
​ 第二个AMF包结构图:
8393

84-
![img](https:////upload-images.jianshu.io/upload_images/9078032-023c79ab3f1c9f83.png?imageMogr2/auto-orient/strip|imageView2/2/w/842)
94+
![Image](https://raw.githubusercontent.com/CharonChui/Pictures/master/flv_awf_tag.png?raw=true)
8595

8696
第二个AMF包结构图
8797

8898
​ 第1个字节表示AMF包类型,一般总是0x08,表示数组。第2-5个字节为UI32类型值,表示数组元素的个数,后面即为各数组元素的封装。数组元素为元素名称和值组成的对。“数组元素结构”部分是推测,已经确认适用于duration、width、height等常见元素,但并不确认适用于所有元素。常见的数组元素如下表所示。
8999

90-
![img](https:////upload-images.jianshu.io/upload_images/9078032-ca0f9296f78d19e6?imageMogr2/auto-orient/strip|imageView2/2/w/407)
100+
![Image](https://raw.githubusercontent.com/CharonChui/Pictures/master/flv_amf_tag.jpg?raw=true)
101+
102+
91103

92104

93105

VideoDevelopment/视频封装格式/TS.md

Lines changed: 1 addition & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -3,70 +3,7 @@ TS
33

44

55

6-
TS 全称是 MPEG2-TS,MPEG2-TS 是一种标准容器格式,传输与存储音视频、节目与系统信息协议数据,广泛应用于数字广播系统,我们日常数字机顶盒接收到的就是 TS(Transport Stream,传输流)流。
7-
8-
首先需要先分辨 TS 传输流中几个基本概念
9-
10-
ES(Elementary Stream):基本流,直接从编码器出来的数据流,可以是编码过的音频、视频或其他连续码流
11-
PES(Packetized Elementary Streams):PES 流是 ES 流经过 PES 打包器处理后形成的数据流,在这个过程中完成了将 ES 流分组、加入包头信息 (PTS、DTS 等)操作。PES 流的基本单位是 PES 包,PES 包由包头和 payload 组成
12-
PS 流(Program Stream):节目流,PS 流由 PS 包组成,而一个 PS 包又由若干个 PES 包组成。一个 PS 包由具有同一时间基准的一个或多个 PES 包复合合成。
13-
TS 流(Transport Stream):传输流,TS 流由固定长度(188 字节)的 TS 包组成,TS 包是对 PES 包的另一种封装方式,同样由具有同一时间基准的一个或多个 PES 包复合合成。PS 包是不固定长度,而 TS 包为固定长度。
14-
15-
为便于传输,实现时分复用,基本流 ES 必须打包,就是将顺序连续、连续传输的数据流按一定的时间长度进行分割,分割的小段叫做包,因此打包也被称为分组。
16-
17-
MPEG-2 标准中,有两种不同的码流可以输出到信号,一种是节目码流(PS Program Stream),一种是传输流(TS Transport Stream)。
18-
19-
PS 流包结构长度可变,一旦某一 PS 包的同步信息丢失,接收机就无法确认下一包的同步位置,导致信息丢失,因此 PS 流适用于合理可靠的媒体,如光盘(DVD),PS 流的后缀名一般为 vob 或 evo。而 TS 传输流不同,TS 流的包结构为固定长度(一般为 188 字节),当传输误码破坏了某一 TS 包的同步信息时,接收机可在固定的位置检测它后面包中的同步信息,从而恢复同步,避免信息丢失,因此 TS 可适用于不太可靠的传输,即地面或卫星传播,TS 流的后缀一般为 ts、mpg、mpeg。
20-
21-
由于 TS 码流具有较强的抵抗传输误码的能力,因此目前在传输媒体中进行传输的 MPEG-2 码流基本上都采用了 TS
22-
23-
2 基本流程
24-
2.1 TS 流形成过程
25-
26-
image
27-
28-
以电视数字信号为例:
29-
1) 原始音视频数据经过压缩编码得到基本流 ES 流
30-
31-
生成的 ES 基本流比较大,并且只是 I、P、B 这些视频帧或音频取样信息。
32-
2) 对 ES 基本流 进行打包生成 PES 流
33-
34-
通过 PES 打包器,首先对 ES 基本流进行分组打包,在每一个包前加上包头就构成了 PES 流的基本单位 —— PES 包,对视频 PES 来说,一般是一帧一个包,音频 PES 一般一个包不超过 64KB。
35-
36-
PES 包头信息中加入了 PTS、DTS 信息,用与音视频的同步。
37-
3) 同一时间基准的 PES 包经过 TS 复用器生成 TS 传输包
38-
39-
PES 包的长度通常都是远大于 TS 包的长度,一个 PES 包必须由整数个 TS 包来传送,没装满的 TS 包由填充字节填充。PES 包进行 TS 复用时,往往一个 PES 包会分存到多个 TS 包中
40-
41-
将 PES 包内容分配到一系列固定长度的传输包(TS Packet)中。TS 流中 TS 传输包头加入了 PCR(节目参考时钟)与 PSI(节目专用信息),其中 PCR 用于解码器的系统时钟恢复。
42-
43-
image
44-
45-
PCR 时钟作用:我们知道,编码器中有一个系统时钟,用于产生指示音视频正确显示和解码的时间标签(DTS、PTS)。解码器在解码时首先利用 PCR 时钟重建与编码器同步的系统时钟,再利用 PES 流中的 DTS、PTS 进行音视频的同步。
46-
47-
4) 连续输出传输包形成具有恒定比特率的 MPEG-TS 流
48-
2.2 TS 流解析过程
49-
1) 从复用的 MPEG-TS 流中解析出 TS 包
50-
2) 从 TS 包中获取 PAT 及节目对应的 PMT,解析获取音视频
51-
52-
首先简单了解一下什么是 PSI,后面会通过例子更详细的介绍。
53-
54-
PSI 是节目特定信息,该表格信息用来描述传送流的组成结构。PSI 信息由四种类型的表组成,包括节目关联表(PAT,Program Association Table)、节目映射表(PMT,Program Map Table)、条件接收表(CAT)、网络信息表(NIT)。PAT 与 PMT 两张表帮助我们找到该传送流中的所有节目与流,PAT 告诉我们,TS 流是由哪些节目组成,每个节目的节目映射表 PMT 的 PID 是什么,而 PMT 告诉我们,该节目由哪些流组成,每一路流的类型与 PID 是什么。CAT 与 NIT 暂时不考虑。
55-
56-
image
57-
58-
从图中 PAT 表中可以获取该 TS 流中包含哪些节目,并通过 PAT 表中具体节目的 PMT 表 PID 值(如节目 0 对应 17 PMT PID),找到该节目对应的 PMT 表,而有了 PMT 表我们就知道该节目有哪些流以及流的类型(视频、音频等),进而获取到音视频流对应的 PID。
59-
3) 通过 PID 筛选出特定音视频流的 TS 包,并解析出 PES
60-
4) 从 PES 中读取到 PTS/DTS,并从 PES 中解析出基本码流 ES
61-
5) 将 ES 交给解码器解码
62-
3 TS 格式
63-
3.1 TS 包格式
64-
65-
TS 包主要由两部分组成,一个是 4 字节的包头信息,二是有效负载,另外由于每个包固定需要 188 字节,所以中间有可能需要插入自适应调整字段。其中有效负载包括 PSI(节目专用信息)、PES(打包后的基本流)及其他业务信息。
66-
67-
68-
69-
6+
TODO
707

718

729

VideoDevelopment/视频封装格式/视频封装格式.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,11 @@ H.264最大的优势是具有很高的数据压缩比率,在同等图像质量
8686

8787

8888

89-
- 为什么把flv叫做流式文件格式? 和mp4,avi不是一样都是音视频的容器吗? 有什么区别?
89+
为什么把flv叫做流式文件格式? 和mp4,avi不是一样都是音视频的容器吗? 有什么区别?
9090

91-
通常说的流式文件是可以边传边解的,开始不需要整个文件。特点是有文件头信息(这个不是必需的)和中间打包了,可以直接解析分包,而且文件可以任意大小,而不需要通过索引分包。FLV,MPEG,RMVB等都可以直接依次分包解析,而MP4,AVI一定要依赖索引表才行,而且开始就要固定位置好,如果索引表在尾部,还没办法解析。
91+
通常说的流式文件是可以边传边解的,开始不需要整个文件。特点是有文件头信息(这个不是必需的)和中间打包了,可以直接解析分包,而且文件可以任意大小,而不需要通过索引分包。FLV,MPEG,RMVB等都可以直接依次分包解析,而MP4,AVI一定要依赖索引表才行,而且开始就要固定位置好,如果索引表在尾部,还没办法解析。
9292

93-
流媒体文件是指多媒体文件边下载可以边观看的文件。而传统的视频文件需下载完成才能观看,而流媒体主要是下载一部分文件到缓存区,然后再从缓存区里面拿数据~而能作为这种流媒体文件的只有经过特殊编码的格式才适合,而flv、rmvb、mov、asf等格式文件才属于流媒体格式文件
93+
流媒体文件是指多媒体文件边下载可以边观看的文件。而传统的视频文件需下载完成才能观看,而流媒体主要是下载一部分文件到缓存区,然后再从缓存区里面拿数据~而能作为这种流媒体文件的只有经过特殊编码的格式才适合,而flv、rmvb、mov、asf等格式文件才属于流媒体格式文件
9494

9595
对于相同的音视频内容,使用三种不同的封装格式,则文件体积从大到小依次为: TS -> MP4 -> FLV
9696

0 commit comments

Comments
 (0)