1. 程式人生 > >TS封裝格式

TS封裝格式



ts流最早應用於數字電視領域,其格式非常複雜包含的配置資訊表多達十幾個,視訊格式主要是mpeg2。蘋果公司發明的http live stream流媒體是基於ts檔案的,不過他大大簡化了傳統的ts流,只需要2個最基本的配置表PAT和PMT,再加上音視訊內容就可以了,hls流媒體視訊編碼的主要格式為h264/mpeg4,音訊為aac/mp3。

ts檔案分為三層:ts層(Transport Stream)、pes層(Packet Elemental Stream)、es層(Elementary Stream)。es層就是音視訊資料,pes層是在音視訊資料上加了時間戳等對資料幀的說明資訊,ts層是在pes層上加入了資料流識別和傳輸的必要資訊。

1.ts層

 ts包大小固定為188位元組,ts層分為三個部分:ts header、adaptation field、payload。ts header固定4個位元組;adaptation field可能存在也可能不存在,主要作用是給不足188位元組的資料做填充;payload是pes資料。

1.1.ts header

sync_byte 8bit 同步位元組,固定為0x47
transport_error_indicator 1bit 傳輸錯誤指示符,表明在ts頭的adapt域後由一個無用位元組,通常都為0,這個位元組算在adapt域長度內
payload_unit_start_indicator 1bit 負載單元起始標示符,一個完整的資料包開始時標記為1
transport_priority 1bit 傳輸優先順序,0為低優先順序,1為高優先順序,通常取0
pid 13bit pid值(Packet ID號碼,唯一的號碼對應不同的包)
transport_scrambling_control 2bit 傳輸加擾控制,00表示未加密
adaptation_field_control 2bit 是否包含自適應區,‘00’保留;‘01’為無自適應域,僅含有效負載;‘10’為僅含自適應域,無有效負載;‘11’為同時帶有自適應域和有效負載。
continuity_counter 4bit 遞增計數器,從0-f,起始值不一定取0,但必須是連續的

ts層的內容是通過PID值來標識的,主要內容包括:PAT表、PMT表、音訊流、視訊流。解析ts流要先找到PAT表,只要找到PAT就可以找到PMT,然後就可以找到音視訊流了。PAT表的PID值固定為0。PAT表和PMT表需要定期插入ts流,因為使用者隨時可能加入ts流,這個間隔比較小,通常每隔幾個視訊幀就要加入PAT和PMT。PAT和PMT表是必須的,還可以加入其它表如SDT(業務描述表)等,不過hls流只要有PAT和PMT就可以播放了。

  • PAT表:他主要的作用就是指明瞭PMT表的PID值。
  • PMT表:他主要的作用就是指明瞭音視訊流的PID值。
  • 音訊流/視訊流:承載音視訊內容。
 PID是TS流中唯一識別標誌,Packet Data是什麼內容就是由PID決定的。如果一個TS流中的一個Packet的Packet Header中的PID是0x0000,那麼這個Packet的Packet Data就是DVB的PAT表而非其他型別資料(如Video、Audio或其他業務資訊)。下表給出了一些表的PID值,這些值是固定的,不允許用於更改。

PID 值

PAT

0x0000

CAT

0x0001

TSDT

0x0002

EIT,ST

0x0012

RST,ST

0x0013

TDT,TOT,ST

0x0014

下面以一個TS流的其中一個Packet中的Packet Header為例進行說明:

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

Packet(十六進位制)

4

7

0

7

e

5

1

2

Packet(二進位制)

0

1

0

0

0

1

1

1

0

0

0

0

0

1

1

1

1

1

1

0

0

1

0

1

0

0

0

1

0

0

1

0

Packet Header 資訊

1 sync_byte=0x47

2

3

4

5 PID=0x07e5

6

7

8

sync_byte=01000111,                        就是0x47,這是DVB TS規定的同步位元組,固定是0x47.

transport_error_indicator=0,              表示當前包沒有發生傳輸錯誤.

payload_unit_start_indicator=0,        含義參考ISO13818-1標準文件

transport_priority=0,                          表示當前包是低優先順序.

PID=00111 11100101即0x07e5,        Video PID

transport_scrambling_control=00,     表示節目沒有加密

adaptation_field_control=01              即0x01,具體含義請參考ISO13818-1

continuity_counte=0010                    即0x02,表示當前傳送的相同型別的包是第3個

1.2.adaption

adaptation_field_length 1B 自適應域長度,後面的位元組數
flag 1B 取0x50表示包含PCR或0x40表示不包含PCR
PCR 5B Program Clock Reference,節目時鐘參考,用於恢復出與編碼端一致的系統時序時鐘STC(System Time Clock)。
stuffing_bytes xB 填充位元組,取值0xff

自適應區的長度要包含傳輸錯誤指示符標識的一個位元組。pcr是節目時鐘參考,pcr、dts、pts都是對同一個系統時鐘的取樣值,pcr是遞增的,因此可以將其設定為dts值,音訊資料不需要pcr。如果沒有欄位,ipad是可以播放的,但vlc無法播放。打包ts流時PAT和PMT表是沒有adaptation field的,不夠的長度直接補0xff即可。視訊流和音訊流都需要加adaptation field,通常加在一個幀的第一個ts包和最後一個ts包裡,中間的ts包不加。

1.3.PAT格式(Program Association Table,節目關聯表)

PAT表定義了當前TS流中所有的節目,其PID為0x0000,它是PSI的根節點,要查尋找節目必須從PAT表開始查詢。

table_id 8b PAT表固定為0x00
section_syntax_indicator 1b 固定為1
zero 1b 固定為0
reserved 2b 固定為11
section_length 12b 後面資料的長度
transport_stream_id 16b 傳輸流ID,固定為0x0001
reserved 2b 固定為11
version_number 5b 版本號,固定為00000,如果PAT有變化則版本號加1
current_next_indicator 1b 固定為1,表示這個PAT表可以用,如果為0則要等待下一個PAT表
section_number 8b 固定為0x00
last_section_number 8b 固定為0x00
開始迴圈
program_number 16b 節目號為0x0000時表示這是NIT,節目號為0x0001時,表示這是PMT
reserved 3b 固定為111
PID 13b 節目號對應內容的PID值
結束迴圈
CRC32 32b 前面資料的CRC32校驗碼

通過一段TS流中一個Packet分析PAT表,這裡我們分析一段TS流其中一個Packet的Packet Data部分:

首先給出一個數據包,其資料如下:

Packet Header

Packet Data

0x47 0x40 0x00 0x10

0000 b0 11 00 01 c1 00 00 00 00 e0 1f 00 01 e1 00 24 ac48 84 ff ff…… ff ff

分析Packet Header如下表所示:

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

Packet(十六進位制)

4

7

4

0

0

0

1

0

Packet(二進位制)

0

1

0

0

0

1

1

1

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

0

0

0

Packet Header Bits

1 sync_byte=0x47

2

3

4

5 PID=0x0000

6

7

8

 根據包頭資料格式,我們可以知曉整個資料包的屬性,列表如下:

sync_byte

0x47

固定同步位元組

transport_error_indicator

“0”

沒有傳輸錯誤

payload_unit_start_indicator

“1”

在前4個位元組後會有一個調整位元組。所以實際資料應該為去除第一個位元組後的資料。即上面資料中紅色部分不屬於有效資料包。

transport_priority

“0”

傳輸優先順序低

PID

0x0000

PID=0x0000說明資料包是PAT表資訊

transport_scrambling_control

“00”

未加密

adaptation_field_control

“01”

附加區域控制

continuity_counte

“0000”

包遞增計數器

如上表所示,我們可以知道,首先Packet的Packet Data是PAT資訊表,因為其PID為0x0000,並且在包頭後需要除去一個位元組才是有效資料(payload_unit_start_indicator="1")。這樣,Packet Data就應該是“00 b0 11 00 01 c1 00 00 00 00 e0 1f 00 01 e1 00 24 ac48 84 ff ff …… ff ff”。

Packet Data分析

第n個位元組

  1  

  3  

4

5

6

7

8

9

 10 

 11 

  12 

  13 

14 

15 

16

17

18

19

20

Packet Data(除去開頭的0x00)

00

b0

11

00

01

c1

00

00

00

00

e0

1f

00

01

e1

00

24

ac

48

84

欄位名

具體值

次序

說明

table_id

8

0000

第1個位元組 0000 0000B(0x00)

PAT的table_id只能是0x00

section_syntax_indicator

1

1

第2、3個位元組

1011 0000 0001 0001B(0xb0 11)

段語法標誌位,固定為1

zero

1

0

reserved

2

11

section_length

12

0000 0001 0001B=0x011=17

段長度為17位元組

transport_stream_id

16

0x0001

第4、5個位元組 0x00 0x01

reserved

2

11

第6個位元組 1100 0001B(0xc1)

version_number

5

00000

一旦PAT有變化,版本號加1

current_next_indicator

1

1

當前傳送的PAT表可以使用,若為0則要等待下一個表

section_number

8

0x00

第7個位元組0x00

last_section_number

8

0x00

第8個位元組 0x00

開始迴圈

program_number

16

0x0000-第一次

2個位元組(0x00 00)

節目號 

reserved

3

111

2個位元組

1110 0000 0001 1111B(0xe0 1f)

network_id(節目號為0時)

program_map_PID(節目號為其他時)

13

0 0000 0001 1111B=31

-第一次

節目號為0x0000時,表示這是NIT,PID=0x001f,即31

節目號為0x0001時,表示這是PMT,PID=0x100,即256

結束迴圈

CRC_32

32

--

4個位元組

 由以上幾個表可以分析出PAT表和PMT表有著內在的聯絡。也就是之前提到的。PAT表描述了當前流的NIT(Network Information Table,網路資訊表)中的PID、當前流中有多少不同型別的PMT表及每個PMT表對應的頻道號。

1.4.PMT格式( Program Map Table,節目對映表 )

table_id 8b PMT表取值隨意,0x02
section_syntax_indicator 1b 固定為1
zero 1b 固定為0
reserved 2b 固定為11
section_length 12b 後面資料的長度
program_number 16b 頻道號碼,表示當前的PMT關聯到的頻道,取值0x0001
reserved 2b 固定為11
version_number 5b 版本號,固定為00000,如果PAT有變化則版本號加1
current_next_indicator 1b 固定為1
section_number 8b 固定為0x00
last_section_number 8b 固定為0x00
reserved 3b 固定為111
PCR_PID 13b PCR(節目參考時鐘)所在TS分組的PID,指定為視訊PID
reserved 4b 固定為1111
program_info_length 12b 節目描述資訊,指定為0x000表示沒有
開始迴圈
stream_type 8b 流型別,標誌是Video還是Audio還是其他資料,h.264編碼對應0x1b,aac編碼對應0x0f,mp3編碼對應0x03
reserved 3b 固定為111
elementary_PID 13b 與stream_type對應的PID
reserved 4b 固定為1111
ES_info_length 12b 描述資訊,指定為0x000表示沒有
結束迴圈
CRC32 32b 前面資料的CRC32校驗碼

通過一段TS流中一個Packet分析PMT表,通過分析一段TS流的資料包Packet來學習PMT表。下面給出了一段TS流資料中的一個Packet(十六進位制數)

Packet Header

Packet Data

0x47 0x43 0xe8 0x12

00 02 b0 12 00 01 c1 00 00 e3 e9 f0 00 1b e3 e9 f0 00 f0 af b4 4f ff ff…… ff ff

 首先解析Packet Header,分析如下:

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

Packet(十六進位制)

4

7

4

3

e

8

1

2

Packet(二進位制)

0

1

0

0

0

1

1

1

0

1

0

0

0

0

1

1

1

1

1

0

1

0

0

0

0

0

0

1

0

0

1

0

Packet Header Bits

1 sync_byte=0x47

2

3

4

5 PID=0x03e8

6

7

8

Packet Header分析

Packet Header:0x47 0x40 0x00 0x10

1

sync_byte

0x47

固定同步位元組

2

transport_error_indicator

“0”

沒有傳輸錯誤

3

payload_unit_start_indicator

“1”

在前4個位元組後會有一個調整位元組。所以實際資料應該為去除第一個位元組後的資料。

4

transport_priority

“0”

傳輸優先順序低

5

PID

0x03e8

PID=0x03e8說明資料包是PMT表資訊

6

transport_scrambling_control

“00”

未加密

7

adaptation_field_control

“01”

附加區域控制

8

continuity_counte

“0010”

包遞增計數器

因為payload_unit_start_indicator=‘1’,在解析資料包的時候需要去除Packet Data的第一個位元組。下面是對Packet Data的詳細解析:

PMT表的Packet Data分析

第n個位元組

1

2

3

4

5

6

7

8

9

10   

11   

12   

13   

14  

 15  

16

17

18

19

20

Packet Data

02

b0

12

00

01

c1

00

00

e3

e9

f0

00

1b

e3

e9

f0

00

f0

1b

e3

欄位名

位數

具體值

次序

說明

table_id

8

0x02

第1個位元組

section_syntax_indicator

1

1B

第2、3個位元組

1011 0000 0001 0010B=0xb012

段語法標誌

zero

1

0B

reserved

2

11B=0x03

section_length

12

0000 0001 0010B=0x12

段長度,從program_number開始,到CRC_32(含)的位元組總數

program_number

16

0x0001

第4、5個位元組 0x00 01

頻道號碼,表示當前的PMT關聯到的頻道

reserved

2

11B=0x03

第6個位元組

1100 0001B=0xc1

version_number

5

00000B=0x00

版本號碼,如果PMT內容有更新,則它會遞增1通知解複用程式需要重新接收節目資訊

current_next_indicator

1

1B=0x01

當前未來標誌符

section_number

8

0x00

第7個位元組0x00

當前段號碼

last_section_number

8

0x00

第8個位元組 0x00

最後段號碼,含義和PAT中的對應欄位相同

reserved

3

111B=0x07

第9、10個位元組

1110 0011 1110 1001B=0xe3e9

PCR_PID

13

000111110B=0x3e9

PCR(節目參考時鐘)所在TS分組的PID

reserved

4

1111B=0x0f

第11、12個位元組

1111 0000 0000 0000=0xf000

program_info_length

12

000000000000B=0x000

節目資訊長度(之後的是N個描述符結構,一般可以忽略掉,這個欄位就代表描述符總的長度,單位是Bytes)緊接著就是頻道內部包含的節目型別和對應的PID號碼了

stream_type

8

0x1b

第13個位元組 0x1b

流型別,標誌是Video還是Audio還是其他資料

reserved

3

111B=0x07

第14、15個位元組

1110 0011 1110 1001B=0xe3e9

elementary_PID

13

000111110 1001=0x3e9

該節目中包括的視訊流,音訊流等對應的TS分組的PID

reserved

4

1111B=0x0f

第16、17個位元組

1111 0000 0000 0000B=0xf000

ES_info_length

12

0000 0000 0000=0x000

CRC

32

——

——

1.4.pes層

pes層是在每一個視訊/音訊幀上加入了時間戳等資訊,pes包內容很多,我們只留下最常用的。 

pes start code 3B 開始碼,固定為0x000001
stream id 1B 音訊取值(0xc0-0xdf),通常為0xc0
視訊取值(0xe0-0xef),通常為0xe0
pes packet length 2B 後面pes資料的長度,0表示長度不限制,
只有視訊資料長度會超過0xffff
flag 1B 通常取值0x80,表示資料不加密、無優先順序、備份的資料
flag 1B 取值0x80表示只含有pts,取值0xc0表示含有pts和dts
pes data length 1B 後面資料的長度,取值5或10
pts 5B 33bit值
dts 5B 33bit值
pts是顯示時間戳、dts是解碼時間戳,視訊資料兩種時間戳都需要,音訊資料的pts和dts相同,所以只需要pts。有pts和dts兩種時間戳是B幀引起的,I幀和P幀的pts等於dts。如果一個視訊沒有B幀,則pts永遠和dts相同。從檔案中順序讀取視訊幀,取出的幀順序和dts順序相同。dts演算法比較簡單,初始值 + 增量即可,pts計算比較複雜,需要在dts的基礎上加偏移量。      音訊的pes中只有pts(同dts),視訊的I、P幀兩種時間戳都要有,視訊B幀只要pts(同dts)。打包pts和dts就需要知道視訊幀型別,但是通過容器格式我們是無法判斷幀型別的,必須解析h.264內容才可以獲取幀型別。

1.5.es層

es層就是音視訊裸資料了,常用的音訊編碼格式為AAC,視訊編碼格式為H.264

2.打包H.264和AAC為TS

對於H.264視訊而言,每一幀的時間長度為

 frame_duration = 1000/fps

當fps為25時,一幀時間為40ms

對於AAC音訊而言,每一幀的時間長度為

音訊幀的播放時間=一個AAC幀對應的取樣樣本的個數/取樣頻率(單位為s)
一幀 1024個 sample。取樣率 Samplerate 44100KHz,每秒44100個sample, 所以根據公式   音訊幀的播放時間=一個AAC幀對應的取樣樣本的個數/取樣頻率
當前AAC一幀的播放時間是= 1024*1000000/44100= 22.32ms(單位為ms)

理論上的音視訊(播放)同步是這樣的:
由此得到了每一幀資料的持續時間,音視訊交叉儲存在容器中:一個時間軸:
時間軸:0   22.32   40     44.62    66.96    80     89.16      111.48    120       ................
音   頻 :0   22.32            44.62    66.96             89.16      111.48                ................
視   頻 :0              40                              80                                   120       ................
即視訊的持續時間相加 和音訊的持續時間相加作比較,誰小寫入哪個。
(自己的方法) 音訊資料(AAC 48k)        21.33     42.44  63.99          85.32 視訊資料(H264 25fps)              40                       80 時間軸                           -------------------------------------------> (ts容器)迴圈做(寫一幀視訊,然後寫一幀音訊,然後視訊的時間減去音訊的時間,如果大於一幀音訊的時間,就多寫一幀音訊,知道視訊多出來的時間小於一幀音訊) 使用 Elecard Stream Analyzer 可以分析TS流 

相關推薦

TS封裝格式

 ts流最早應用於數字電視領域,其格式非常複雜包含的配置資訊表多達十幾個,視訊格式主要是mpeg2。蘋果公司發明的http live stream流媒體是基於ts檔案的,不過他大大簡化了傳統的ts流,只需要2個最基本的配置表PAT和PMT,再加上音視訊內容就可以了,h

基於FFmpeg的封裝格式MP4(TS)

一、 封裝MP4原理: 每一幀音訊或視訊都有一個持續時間:duration: 取樣頻率是指將模擬聲音波形進行數字化時,每秒鐘抽取聲波幅度樣本的次數。 。正常人聽覺的頻率範圍大約在20Hz~20kHz之間,根據奈奎斯特取樣理論,為了保證聲音不失真,取樣頻率應該在40kHz

轉 常見視頻編碼方式以及封裝格式

方式 個數 目前 格式 調用 works 質量 撥號 求和 常見視頻編碼方式以及封裝格式 常見視頻編碼方式 所謂視頻編碼方式就是指通過特定的壓縮技術,將某個視頻格式的文件轉換成另一種視頻格式文件的方式。視頻流傳輸中最為重要的編解碼標準有國際電聯的H

轉 音視頻封裝格式、編碼格式知識

flash swf 開發 ng- 多個 rate .com 流媒體 window 常見的AVI、RMVB、MKV、ASF、WMV、MP4、3GP、FLV等文件其實只能算是一種封裝標準。 一個完整的視頻文件是由音頻和視頻2部分組成的。H264、Xvid等就是視頻編碼格式

H264 封裝格式

auto nbsp style its 轉換 pda 例如 h264 convert H264有兩種封裝格式,一種是MP4格式,一種是annexb格式 MP4格式是以4個字節長度分割 annexb格式是以0x000001 or 0x00000001分割 有些時候需要把MP4

視音頻數據處理入門:FLV封裝格式解析

tail rip 主頁 typedef gda ack print 地址 視頻 ===================================================== 視音頻數據處理入門系列文章: 視音頻數據處理入門:RGB、YUV像素數據處理 視音頻數

[轉]多媒體封裝格式詳解---MP4

原文 https://www.cnblogs.com/jingzhishen/p/3698570.html 參考 http://www.cnblogs.com/ranson7zop/p/7889272.html MP4檔案格式詳解——結構概述 http://blog.

FFMPEG實現對AAC解碼(不採用封裝格式實現)

技術在於交流、溝通,轉載請註明出處並保持作品的完整性。 原文:https://blog.csdn.net/hiwubihe/article/details/81267872   [音訊編解碼系列文章] 音訊編解碼基礎 FFMPEG實現音訊重取樣 FFM

FFMPEG實現對AAC解碼(採用封裝格式實現)

技術在於交流、溝通,轉載請註明出處並保持作品的完整性。 原文:https://blog.csdn.net/hiwubihe/article/details/81261022   [音訊編解碼系列文章] 音訊編解碼基礎 FFMPEG實現音訊重取樣 FFM

FFMPEG實現PCM編碼(不採用封裝格式實現)

技術在於交流、溝通,轉載請註明出處並保持作品的完整性。 原文:https://blog.csdn.net/hiwubihe/article/details/81260923   [音訊編解碼系列文章] 音訊編解碼基礎 FFMPEG實現音訊重取樣 FFM

FFMPEG實現PCM編碼(採用封裝格式實現)

技術在於交流、溝通,轉載請註明出處並保持作品的完整性。 原文:https://blog.csdn.net/hiwubihe/article/details/81260882   [音訊編解碼系列文章] 音訊編解碼基礎 FFMPEG實現音訊重取樣 FFM

h264兩種封裝格式區別

annexb 一個Access Units(AU)包含一個幀,一幀畫面包含一個或多個NALU(Network Abstraction Layer Units) 為了位元組對齊,每個NALU有起始碼,其中4位元組的起始碼0x00000001通常標誌流的隨機訪問點SPS, PP

MP4封裝格式

一、簡介 MP4(MPEG-4 Part 14)是一種常見的多媒體容器格式,它是在“ISO/IEC 14496-14”標準檔案中定義的,屬於MPEG-4的一部分,是“ISO/IEC 14496-12(MPEG-4 Part 12 ISO base media file format)”標準中

視訊檔案格式--視訊封裝格式--視訊編碼格式區分

前言 什麼是影片?其實就是一組(很多張)圖片,時間間隔很小的連續展示出來,人們就覺得畫面中的人物在動,這就是影片。 那電影的實質就是N多張圖片的集合。那每張圖片和幀又有什麼關係呢? 事實上,如果一部影片裡面的圖片,我們原封不動的全部存起來,空間會很大很大很大,但是如果

ISO/IEC 15444-12 MP4 封裝格式標準摘錄 3

共享 允許 his 多個 更多 並且 stc 位置信息 run 目錄 Track Data Layout Structures Data Information Box Data Reference Box Sample Size Boxes Compact Sampl

ISO/IEC 15444-12 MP4 封裝格式標準摘錄 4

目錄 Movie Fragments Movie Extends Box Movie Extends Header Box Track Extends Box Movie Fragment Box Movie Fragment Header Box

iOS音視訊—FFmepg基礎知識:命令列工具使用&封裝格式&視訊編碼音訊編碼資料瞭解&視訊畫素音訊取樣資料格式

iOS音視訊相關目錄 FFmepg基礎知識 封裝格式 1、封裝格式:mp4、mov、flv、wmv等等… 2、作用:視訊流+音訊流按照格式進行儲存在一個檔案中 3、MPEG2-TS格式:傳輸流,又稱TS、TP、MPEG-TS或M2T,用於音效、影象與資料的通訊協議。屬於

IPSec 的兩種工作模式及其報文封裝格式

隧道(tunnel)模式:隧道模式保護所有 IP 資料並封裝新的 IP 頭部,不使用原始 IP 頭部進行路由。在 IPSec 頭部前加入新的 IP 頭部,源目為 IPSec peer 地址。並允許 RFC 1918(私有地址)規定的地址參與 VPN 穿越網際網路。 AH Tunnel mode

呼叫FFmpeg SDK解析封裝格式的視訊為音訊流和視訊流

         我們平常最常用的音視訊檔案通常不是單獨的音訊訊號和視訊訊號,而是一個整體的檔案。這個檔案會在其中包含音訊流和視訊流,並通過某種方式進行同步播放。通常,檔案的音訊和視訊通過某種標準格式進行復用,生成某種封裝格式,而封裝的標誌就是檔案的副檔名,常用的有mp4/a

最簡單的基於FFmpeg的封裝格式處理 視音訊複用器 muxer

                =====================================================最簡單的基於FFmpeg的封裝格式處理系列文章列表:=====================================================簡介打算記錄一