日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TS解析文档

發布時間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TS解析文档 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

TS格式解析

簡介:

ts文件為傳輸流文件,視頻編碼主要格式h264/mpeg4,音頻為acc/MP3。 ts的包是一個一個188字節的包組成,這188字節里面由一個0x47開頭的包作為同步。 也就是說,如果你找到了0x47,如果與它相隔188個字節的地方又是一個0x47,基本上就是一個ts的包。 注:ts包中有內容為0x47,所以分割時確定是ts包之后,直接以188字節分割。

結構:

ts文件分為三層:ts層Transport Stream:ts層就是在pes層加入數據流的識別和傳輸必須的信息。pes層 Packet Elemental Stream:pes層是在音視頻數據上加了時間戳等對數據幀的說明信息。es層 Elementary Stream.:es層就是音視頻數據。

解析步驟

  • ts流 發送方式:->PAT ->PMT ->PES ->ES ->ES ->ES ->ES ->PES -> ES ->ES …
ts層的內容是通過PID值來標識的,內容:PAT表、PMT表、PES包、ES(音頻、視頻)。(注:只有PES包有pes header) 解析ts流要先找到PAT表,找到PAT就可以找到PMT的PID,然后根據PMT的PID找到PES包,之后的為前一個PES包的補充ES數據。PAT表的table_id值固定為0x00。 PMT表的table_id值固定為0x02。 PES包的開始碼固定為0x000001。 ES包,開始即為數據,沒有固定值。

ts header

ts層分為三個部分:ts header:固定4個字節。adaptation field:可有可無,作用是給不足188字節的數據做填充。payload:pes數據。

ts header:詳解如下:

字段長度(bite)描述
sync_byte8b固定為0x47
transport_error_indicator1b傳輸錯誤指示符,表明在ts頭的adapt域后由一個無用字節,通常為0
payload_unit_start_indicator1b負載單元起始標示符,
transport_priority1b傳輸優先級,0為低優先級,1為高優先級,通常取0
pid13bpid值
transport_scrambling_control2b自適應區,‘00’保留;‘01’為無自適應域,僅含有效負載;‘10’為僅含自適應域,無有效負載;‘11’為同時帶有自適應域和有效負載。(自適應域:adaptation field)
adaptation_field_control2bpid值
continuity_counter4b遞增計數器,從0-f,起始值不一定取0,但必須是連續的
注:payload_unit_start_indicator:為1時:表明是第一個的數據包 (后面有pes層),為0時:表明不是第一個數據包,后面直接是數據

adaptation field

adaptation field:詳解如下:

字段長度(字節)描述
adaptation_field_length1B自適應域長度,后面的字節數
flag1B取0x50表示包含PCR或0x40表示不包含PCR
PCR5BProgram Clock Reference,節目時鐘參考,用于恢復出與編碼端一致的系統時序時鐘STC(System Time Clock)。
stuffing_bytesxB填充字節,取值0xff

PAT 格式

字段長度(bite)描述
table_id8bPAT表固定為0x00
section_syntax_indicator1b固定為1
zero1b固定為0
reserved2b固定為11
section_length12b后面數據的長度
section_length16b傳輸流ID,固定為0x0001
reserved2b固定為11
version_number5b版本號,固定為00000,如果PAT有變化則版本號加1
current_next_indicator1b為1,表示這個PAT表可以用,為0則要等待下一個PAT表
section_number8b固定為0x00
last_section_number8b固定為0x00
program_number16b節目號為0x0001時,表示這是PMT
reserved3b固定為111
PID13b節目號對應內容的PID值
CRC3232b前面數據的CRC32校驗碼

注:ts header之后,PAT表之前有1字節無用,需要排除

PMT格式

字段長度(bite)描述
table_id8bPAT表固定為0x02
section_syntax_indicator1b固定為1
zero1b固定為0
reserved2b固定為11
section_length12b后面數據的長度
section_length16b頻道號碼,表示當前的PMT關聯到的頻道,取值0x0001
reserved2b固定為11
version_number5b版本號,固定為00000,如果PMT有變化則版本號加1
current_next_indicator1b為1,表示這個PMT表可以用,為0則要等待下一個PAT表
section_number8b固定為0x00
last_section_number8b固定為0x00
reserved8=3b固定為111
PCR_PID13bPCR(節目參考時鐘)所在TS分組的PID,指定為視頻PID
reserved4b固定為1111
program_info_length12b節目描述信息,指定為0x000表示沒有
stream_type8b流類型,h.264編碼對應0x1b,aac編碼對應0x0f,mp3編碼對應0x03,h.265編碼對應0x24
reserved3b固定為111
elementary_PID13b與stream_type對應的PID
reserved4b固定為1111
ES_info_length12b描述信息,指定為0x000表示沒有
CRC3232b前面數據的CRC32校驗碼

注:ts header之后,PMT表之前有1字節無用,需要排除

PES格式

字段長度(字節)描述
pes_start_code3B開始碼,固定為0x000001
stream_id1B音頻取值(0xc0-0xdf),通常為0xc0;視頻取值(0xe0-0xef),通常為0xe0
pes_packet_length2B后面pes數據的長度,0表示長度不限制,只有視頻數據長度會超過0xffff(注:長度為整個pes,即為第一個pes頭、es+之后的es)
flag1B通常取值0x80,表示數據不加密、無優先級、備份的數據
flag1B取值0x80表示只含有pts,取值0xc0表示含有pts和dts
pes_data_length1B后面數據的長度,取值5或10
pts5B33bit值
dts5B33bit值
注: pts是顯示時間戳、dts是解碼時間戳,視頻數據兩種時間戳都需要,音頻數據的pts和dts相同,所以只需要pts。 有pts和dts兩種時間戳是B幀引起的,I幀和P幀的pts等于dts。如果一個視頻沒有B幀,則pts永遠和dts相同。從文件中順序讀取視頻幀,取出的幀順序和dts順序相同。 dts算法比較簡單,初始值 + 增量即可,pts計算比較復雜,需要在dts的基礎上加偏移量。

ES格式

視頻數據必須加上一個nalu(Network Abstraction Layer unit),nalu包括nalu header和nalu type. nalu header固定為0x00000001(幀開始,常見)或0x000001(幀中)。

nalu header:

字段長度(bite)
forbidden_zero_bit1b
nal_unit_type6b
nuh_reserved_zero_6bits6b
nuh_temporal_id_plus13b

H265 幀類型判斷:
在文件中查找00 00 00 01NALU頭,發現在有6種開頭分別為:

00 00 00 01 40 01 的nuh_unit_type的值為 32, 語義為視頻參數集 VPS 00 00 00 01 42 01 的nuh_unit_type的值為 33, 語義為序列參數集 SPS 00 00 00 01 44 01 的nuh_unit_type的值為 34, 語義為圖像參數集 PPS 00 00 00 01 4E 01 的nuh_unit_type的值為 39, 語義為補充增強信息 SEI 00 00 00 01 26 01 的nuh_unit_type的值為 19, 語義為可能有RADL圖像的IDR圖像的SS編碼數據 IDR 00 00 00 01 02 01 的nuh_unit_type的值為1, 語義為被參考的后置圖像,且非TSA、非STSA的SS編碼數據

總結

以上是生活随笔為你收集整理的TS解析文档的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。