![ts流解析規(guī)則_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/6/f1d4d3f9-f63c-4219-869b-f90120936a3d/f1d4d3f9-f63c-4219-869b-f90120936a3d1.gif)
![ts流解析規(guī)則_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/6/f1d4d3f9-f63c-4219-869b-f90120936a3d/f1d4d3f9-f63c-4219-869b-f90120936a3d2.gif)
![ts流解析規(guī)則_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/6/f1d4d3f9-f63c-4219-869b-f90120936a3d/f1d4d3f9-f63c-4219-869b-f90120936a3d3.gif)
![ts流解析規(guī)則_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/6/f1d4d3f9-f63c-4219-869b-f90120936a3d/f1d4d3f9-f63c-4219-869b-f90120936a3d4.gif)
![ts流解析規(guī)則_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/6/f1d4d3f9-f63c-4219-869b-f90120936a3d/f1d4d3f9-f63c-4219-869b-f90120936a3d5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、HLS,HttpLiveStreaming 是由 Apple 公司定義的用于實(shí)時(shí)流傳輸?shù)膮f(xié)議,HLS 基于 HTTP協(xié)議實(shí)現(xiàn),傳輸內(nèi)容包括兩部分,一是 M3U8 描述文件,二是 TS 媒體文件。1、M3U8 文件用文本方式對(duì)媒體文件進(jìn)行描述,由一系列標(biāo)簽組成。#EXTM3U#EXT-X-TARGETDURATION:5#EXTINF:5,./0.ts#EXTINF:5,./1.ts#EXTM3U:每個(gè) M3U8 文件第一行必須是這個(gè) tag。#EXT-X-TARGETDURATION:指定最大的媒體段時(shí)間長(zhǎng)度(秒),#EXTINF 中指定的時(shí)間長(zhǎng)度必須小于或等于這個(gè)最大值。該值只能出現(xiàn)一次。#
2、EXTINF:描述單個(gè)媒體文件的長(zhǎng)度。后面為媒體文件,如./0.ts2、ts 文件ts 文件為傳輸流文件,視頻編碼主要格式 h264/mpeg4,音頻為 acc/MP3。ts 文件分為三層:ts 層 TransportStream、pes 層 PacketElementalStreames 層ElementaryStream.es 層就是音視頻數(shù)據(jù),pes 層是在音視頻數(shù)據(jù)上加了時(shí)間戳等對(duì)數(shù)據(jù)幀的說(shuō)明信息,ts 層就是在 pes 層加入數(shù)據(jù)流的識(shí)別和傳輸必須的信息ts層tsheader(4byte)adaptationfield(xbyte)payload(184-xbyte)注:詳解如下(1
3、)ts層 ts包大小固定為 188字節(jié), ts層分為三個(gè)部分: tsheaderadaptationfieldpayload0tsheader固定 4 個(gè)字節(jié);adaptationfield 可能存在也可能不存在,主要作用是給不足 188 字節(jié)的數(shù)據(jù)做填充;payload 是 pes 數(shù)據(jù)。tsheadersync_byte8b同步字節(jié),固定為 0 x47transport_error_indicator1b傳輸錯(cuò)誤指示符, 表明在 ts頭的 adapt域后由一個(gè)無(wú)用字節(jié),通常都為 0,這個(gè)字節(jié)算在 adapt 域長(zhǎng)度內(nèi)payload_unit_start_indicator1b負(fù)載單元起始標(biāo)
4、示符,一個(gè)完整的數(shù)據(jù)包開始時(shí)標(biāo)記為 1transport_priority1b傳輸優(yōu)先級(jí),0 為低優(yōu)先級(jí),1 為高優(yōu)先級(jí),通常取0pes層pesheaderoptionalpesheaderpespayload(6byte)(xbyte)nalheader(4byte)naltype(1byte)h264data(xbyte)adtsheader(7byte)aacdata(xbyte)(xbyte)pid13bpid 值transport_scrambling_control2b傳輸加擾控制,00 表示未加密adaptation_field_control2b是否包含自適應(yīng)區(qū),0 蛛留;0
5、偽無(wú)自適應(yīng)域,僅含有效負(fù)載;1 的僅含自適應(yīng)域,無(wú)有效負(fù)載;11 為同時(shí)帶有自適應(yīng)域和有效負(fù)載。continuity_counter4b遞增計(jì)數(shù)器,從 0-f,起始值不一定取 0,但必須是連續(xù)的ts 層的內(nèi)容是通過(guò) PID 值來(lái)標(biāo)識(shí)的,主要內(nèi)容包括:PAT 表、PMT 表、音頻流、視頻流。解析ts 流要先找到 PAT 表, 只要找到 PAT 就可以找到 PMT,然后就可以找到音視頻流了。 PAT 表的 PID值固定為 00PAT 表和 PMT 表需要定期插入 ts 流,因?yàn)橛脩綦S時(shí)可能加入 ts 流,這個(gè)間隔比較小,通常每隔幾個(gè)視頻幀就要加入 PAT 和 PMT。PAT 和 PMT 表是必須的
6、,還可以加入其它表如 SDT(業(yè)務(wù)描述表)等,不過(guò) hls 流只要有 PAT 和 PMT 就可以播放了。PAT 表:他主要的作用就是指明了 PMT 表的 PID 值PMT 表:他主要的作用就是指明了音視頻流的 PID 值音頻流/視頻流:承載音視頻內(nèi)容。adaptionadaptation_field_length1B自適應(yīng)域長(zhǎng)度,后面的字節(jié)數(shù)flag1B取 0 x50 表示包含 PCR 或 0 x40 表示不包含 PCRProgramClockReference,節(jié)目時(shí)鐘參考,用于恢復(fù)出與PCR5B編碼端一致的系統(tǒng)時(shí)序時(shí)鐘 STC(SystemTimeClock)。stuffing_bytes
7、xB 填充字節(jié),取值 0 xff自適應(yīng)區(qū)的長(zhǎng)度要包含傳輸錯(cuò)誤指示符標(biāo)識(shí)的一個(gè)字節(jié)。pcr 是節(jié)目時(shí)鐘參考,pcr、dts、pts 都是對(duì)同一個(gè)系統(tǒng)時(shí)鐘的采樣值,pcr 是遞增的,因此可以將其設(shè)置為 dts 值,音頻數(shù)據(jù)不需要 pcr。 如果沒(méi)有字段, ipad 是可以播放的, 但 vlc 無(wú)法播放。 打包 ts 流時(shí) PAT 和 PMT表是沒(méi)有 adaptationfield的, 不夠的長(zhǎng)度直接補(bǔ) 0 xff即可。 視頻流和音頻流都需要加 adaptationfield,通常加在一個(gè)幀的第一個(gè) ts 包和最后一個(gè) ts 包里,中間的 ts 包不加。TSHeadPAT/PMTStuffingBy
8、tesTSHeadAdaptationFieldPes1TSHeadPes2-Pes(NdJTSHeadAdaptationFieldPesNPAT 格式table_id8bPAT 表固定為 0 x00section_syntax_indicator1b固定為 1zero1b固定為 0reserved2b固定為 11section_length12b后面數(shù)據(jù)的長(zhǎng)度transport_stream_id16b傳輸流 ID,固定為 0 x0001reserved2b固定為 11version_number5b版本號(hào),固定為 00000,如果 PAT 有變化則版本號(hào)加 1current_next_i
9、ndicator1b固定為 1,表示這個(gè) PAT 表可以用,如果為 0 則要等待下一個(gè) PAT 表section_number8b固定為 0 x00last_section_number8b固定為 0 x00開始循環(huán)program_number16b節(jié)目號(hào)為 0 x0000 時(shí)表 7K 這是 NIT,節(jié)目號(hào)為 0 x0001 時(shí),表示這是 PMTreserved3b固定為 111PID13b節(jié)目號(hào)對(duì)應(yīng)內(nèi)容的 PID 值結(jié)束循環(huán)CRC3232b前面數(shù)據(jù)的 CRC32 校驗(yàn)碼PMT 格式table_id8bPMT 表取值隨意,0 x02section_syntax_indicator1b固定為 1
10、zero1b固定為 0reserved2b固定為 11section_length12b后面數(shù)據(jù)的長(zhǎng)度program_number16b頻道號(hào)碼,表示當(dāng)前的 PMT 關(guān)聯(lián)到的頻道,取值 0 x0001reserved2b固定為 11version_number5b版本號(hào),固定為 00000,如果 PAT 有變化則版本號(hào)加 1current_next_indicator1b固定為 1section_number8b固定為 0 x00last_section_number8b固定為 0 x00reserved3b固定為 111PCR_PID13bPCR(節(jié)目參考時(shí)鐘)所在 TS 分組的 PID,指
11、定為視頻 PIDreserved4b固定為 1111program_info_length12b節(jié)目描述信息,指定為 0 x000 表示沒(méi)有開始循環(huán)stream_type8b流類型,標(biāo)志是 Video 還是 Audio 還是其他數(shù)據(jù),h.264編碼對(duì)應(yīng) 0 x1b,aac 編碼對(duì)應(yīng) 0 x0f,mp3 編碼對(duì)應(yīng) 0 x03reserved3b固定為 111elementary_PID13b與 stream_type 對(duì)應(yīng)的 PIDreserved4b固定為 1111ES_info_length12b描述信息,指定為 0 x000 表示沒(méi)有結(jié)束循環(huán)CRC3232b前面數(shù)據(jù)的 CRC32 校驗(yàn)碼(
12、2) pes 層pes 層是在每一個(gè)視頻/音頻幀上加入了時(shí)間戳等信息,pes 包內(nèi)容很多,我們只留下最常用的。PesHeader闡OptionalPesHeader(3B-259B)Payload1最大65526B)pesstartcode3B開始碼,固定為 0 x000001streamid1B首頻取值(0 xc0-0 xdf),通常為 0 xc0視頻取值(0 xe0-0 xef),通常為 0 xe0pespacketlength2B后面 pes 數(shù)據(jù)的長(zhǎng)度,0 表示長(zhǎng)度不限制,只有視頻數(shù)據(jù)長(zhǎng)度會(huì)超過(guò) 0 xffffflag1B通常取值 0 x80,表示數(shù)據(jù)不加密、無(wú)優(yōu)先級(jí)、備份的數(shù)據(jù)fla
13、g1B取值 0 x80 表 7K 只含有 pts,取值 0 xc0 表 7K 含有 pts 和 dtspesdatalength1B后面數(shù)據(jù)的長(zhǎng)度,取值 5 或 10pts5B33bit 值dts5B33bit 值pts 是顯示時(shí)間戳、 dts 是解碼時(shí)間戳, 視頻數(shù)據(jù)兩種時(shí)間戳都需要, 音頻數(shù)據(jù)的 pts 和 dts 相同,所以只需要 pts。有 pts 和 dts 兩種時(shí)間戳是 B 幀引起的,I 幀和 P 幀的 pts 等于 dts。如果一個(gè)視頻沒(méi)有 B 幀,則 pts 永遠(yuǎn)和 dts 相同。從文件中順序讀取視頻幀,取出的幀順序和 dts 順序相同。dts算法比較簡(jiǎn)單,初始值+增量即可,p
14、ts 計(jì)算比較復(fù)雜,需要在 dts 的基礎(chǔ)上加偏移量。音頻的 pes 中只有 pts(同 dts),視頻的 I、P 幀兩種時(shí)間戳都要有,視頻 B 幀只要 pts(同 dts)o 打包 pts 和 dts 就需要知道視頻幀類型,但是通過(guò)容器格式我們是無(wú)法判斷幀類型的,必須解析h.264 內(nèi)容才可以獲取幀類型。舉例說(shuō)明:IPBBBP讀取順序:123456dts 順序:123456pts 順序:153246點(diǎn)播視頻 dts 算法:dts=初始值+90000/video_frame_rate,初始值可以隨便指定,但是最好不要取 0,video_frame_rate就是幀率,比如 23、30。pts 和
15、 dts 是以 timescale 為單位的, 1s=90000timescale,一幀就應(yīng)該是 90000/video_frame_rate 個(gè)timescale。用一幀的 timescale 除以采樣頻率就可以轉(zhuǎn)換為一幀的播放時(shí)長(zhǎng)點(diǎn)播音頻 dts 算法:dts=初始值+(90000*audio_samples_per_frame)/audio_sample_rate,audio_samples_per_frame這個(gè)值與編解碼相關(guān),aac 取值 1024,mp3 取值 1158,audio_sample_rate 是采樣率,比如 24000、41000。 AAC 一幀解碼出來(lái)是每聲道 10
16、24 個(gè) sample,也就是說(shuō)一幀的時(shí)長(zhǎng)為 1024/sample_rate 秒。所以每一幀時(shí)間戳依次 0,1024/sample_rate,.,1024*n/sample_rate 秒。直播視頻的 dts 和 pts 應(yīng)該直接用直播數(shù)據(jù)流中的時(shí)間,不應(yīng)該按公式計(jì)算。(3) es 層es 層指的就是音視頻數(shù)據(jù),我們只介紹 h.264 視頻和 aac 音頻。h.264 視頻:打包 h.264 數(shù)據(jù)我們必須給視頻數(shù)據(jù)加上一個(gè) nalu(NetworkAbstractionLayerunit) ,nalu包括naluheader和nalutype,naluheader固定為0 x00000001
17、(幀開始) 或0 x000001(幀中)。h.264 的數(shù)據(jù)是由 slice 組成的,slice 的內(nèi)容包括:視頻、sps、pps 等。nalutype 決定了后面的 h.264 數(shù)據(jù)內(nèi)容。廣一=7-*|0|1|2|3|4|5|6|7|+-+-+-+-1-+-+|F|NRI|Type|F1bforbidden_zero_bit,h.264 規(guī)定必須取 0nal_ref_idc,取值 03,指示這個(gè) nalu 的重要性,I 幀、sps、pps 通常取 3,NRI2b 一一P 幀通常取 2,B 幀通常取 0Type5b 參考下表nal_unit_type說(shuō)明0未使用1非 IDR 圖像片,IDR 指
18、關(guān)鍵幀2片分區(qū) A3片分區(qū) B4片分區(qū) C5IDR 圖像片,即關(guān)鍵幀6補(bǔ)充增強(qiáng)信息單元(SEI)7SPS 序列參數(shù)集8PPS 圖像參數(shù)集9分解符10序列結(jié)束11碼流結(jié)束12填充1323保留2431未使用紅色字體顯示的內(nèi)容是最常用的,打包 es 層數(shù)據(jù)時(shí) pes 頭和 es 數(shù)據(jù)之間要加入一個(gè) type=9的 nalu,關(guān)鍵幀 slice 前必須要加入 type=7 和 type=8 的 nalu,而且是緊鄰。PesHeadnalu(0 x09)曲意曲意(1BInalu但他)內(nèi)容內(nèi)容nalu(0 x41)內(nèi)容內(nèi)容一、背景介紹之前我做了一個(gè)項(xiàng)目,要求寫一個(gè)TS流解析的模塊,因此看了ISOIEC13
19、818-1文檔,外加很多人的博客來(lái)幫助理解,來(lái)了解TS流格式是個(gè)什么東西,收貨頗多。因此我覺得是時(shí)候發(fā)點(diǎn)干貨回饋社會(huì)了。二,TS流背景介紹在介紹具體字段,參數(shù)這些頭疼,煩人的東西之前,我覺得有必要先介紹下TS流的應(yīng)用背景,有了這個(gè)概念,再去深入學(xué)習(xí),將如虎添翼。TS流最經(jīng)典的應(yīng)用就是我們平時(shí)生活中的數(shù)字高清電視。 我們看的電視碼流就是TS封裝格式PesHeadnalu(0 x09)隨意隨意(1B)nalu慎他)內(nèi)容內(nèi)容nalu(0 x67)內(nèi)容內(nèi)容nalu(0 x68)內(nèi)容內(nèi)容nalu(0 x65)的碼流,電視碼流發(fā)送過(guò)來(lái)后,就會(huì)由我們的機(jī)頂盒進(jìn)行解封裝,解碼,然后傳給電視機(jī)進(jìn)行播放。這里就有
20、一個(gè)問(wèn)題,我們看電視,有很多的頻道,節(jié)目,對(duì)應(yīng)碼流是怎么區(qū)分的呢?(TIPS,頻道和節(jié)目的關(guān)系,比如我們有中央電視臺(tái)綜合頻道,下屬CCTV-1CCTV14這些節(jié)目)TS流引入了PAT和PMT兩張表格的概念來(lái)解決這個(gè)問(wèn)題。三,PAT和PMTTS流是以每188字節(jié)為一包,我們可以稱為tspacketo這個(gè)tspacket有可能是音視頻數(shù)據(jù),也有可能是表格。舉例說(shuō)明,TS流的包順序?yàn)椋篜AT,PMT,DATA,DATAPAT,PMT,DATA,DATA每隔一段時(shí)間,發(fā)送一張PAT表,緊接著發(fā)送一張PMT表,接著發(fā)送DATA(音視頻)數(shù)據(jù)。那么你可能要問(wèn)了,有了這2張表格怎么區(qū)分頻道,節(jié)目呢?PAT表
21、格里面包含所有PMT表格的信息,一個(gè)PMT表格對(duì)應(yīng)一個(gè)頻道,比如中央電視臺(tái)綜合頻道。而一個(gè)PMT里面包含所有節(jié)目的信息,比如CCTV1CCTV14。在實(shí)際情況中我們是有很多頻道的,所以PMT表格可不止一張,有可能是PAT,PMT,PMT,PMT,DATA,DATA,PAT,PMT,PMT,DATA,DATA這樣的形式。除了這個(gè)設(shè)定外,每個(gè)頻道或節(jié)目都有自己的標(biāo)識(shí)符(PID),這樣當(dāng)我們拿到一個(gè)DATA,解析出里面的PID,就知道是什么節(jié)目, 并且也知道所屬頻道是什么了。我們看電視的時(shí)候,會(huì)收到所有節(jié)目的DATA,當(dāng)我們正在看某個(gè)節(jié)目的時(shí)候,機(jī)頂盒會(huì)把這個(gè)節(jié)目的DATA單獨(dú)過(guò)濾出來(lái),其它的舍棄。四,tspacket格式講解tspacket我們知道一包是188字節(jié),它分為tsheader和tsbody。其中tsheader里面會(huì)有個(gè)PID字段標(biāo)識(shí)著當(dāng)前tsbody的類型。tsbody有可能是表格,也有可能是DATA,表格沒(méi)什么好說(shuō)的,我們說(shuō)下DATA的結(jié)構(gòu)。DATA包其
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 構(gòu)建智能科技辦公新生態(tài)-科技中心地區(qū)辦公室的新篇章
- 2025年度杭州住宅裝修施工進(jìn)度與安全監(jiān)管合同
- 2025年度文化創(chuàng)意空間設(shè)計(jì)施工一體化合同
- 現(xiàn)代簡(jiǎn)約風(fēng)格在商業(yè)建筑中的應(yīng)用
- Unit 3 A healthy diet (Story time)(說(shuō)課稿)-2023-2024學(xué)年譯林版(三起)英語(yǔ)六年級(jí)下冊(cè)
- 人教版數(shù)學(xué)八年級(jí)上冊(cè)聽評(píng)課記錄《11-3多邊形及其內(nèi)角和》(第2課時(shí))
- 青島版數(shù)學(xué)九年級(jí)下冊(cè)8.2《平行投影》聽評(píng)課記錄1
- 2025年度新能源車輛采購(gòu)合同附屬協(xié)議(第四版)
- 現(xiàn)代企業(yè)管理模式在辦公自動(dòng)化中的運(yùn)用
- 環(huán)境科學(xué)專業(yè)與職業(yè)發(fā)展方向
- 【新能源汽車企業(yè)的財(cái)務(wù)風(fēng)險(xiǎn)控制研究:以比亞迪公司為例15000字】
- 醫(yī)美整形銷售培訓(xùn)課件
- 安保服務(wù)技術(shù)標(biāo)準(zhǔn)及要求
- 芯片研發(fā)項(xiàng)目計(jì)劃表模板
- 教學(xué)課件:《課程與教學(xué)論(課程論)》
- 排水管網(wǎng)檢測(cè)投標(biāo)方案(技術(shù)標(biāo))
- 污水處理藥劑采購(gòu)?fù)稑?biāo)方案(技術(shù)方案)
- 建筑材料案例分析
- 小班《夏天的服裝》
- 中華人民共和國(guó)政府信息公開條例解讀PPT
- 《陳列展覽項(xiàng)目支出預(yù)算方案編制規(guī)范和預(yù)算編制標(biāo)準(zhǔn)試行辦法》的通知(財(cái)辦預(yù)〔2017〕56號(hào))
評(píng)論
0/150
提交評(píng)論