TS 188字節流結構圖

應該說真正了解TS,還是看了朋友推薦的《數字電視業務信息及其編碼》一書之后,MPEG2?TS和數字電視是緊密不可分割的,值得總結一下其中的一些關系。

ISO/IEC-13818-1:系統部分;
ISO/IEC-13818-2:視頻;
ISO/IEC-13818-3:音頻;
ISO/IEC-13818-4:一致性測試;
ISO/IEC-13818-5:軟件部分;
ISO/IEC-13818-6:數字存儲媒體命令與控制;
ISO/IEC-13818-7:高級音頻編碼;
ISO/IEC-13818-8:系統解碼實時接口;

MPEG2系統任務包括:
1. 規定以包傳輸數據的協議;
2. 規定收發兩端數據流同步的協議;
3. 提供多個數據流的復用和解復用協議;
4. 提供數據流加密的協議。以包形式存儲和傳送數據流是MPEG2系統之要點。

ES是直接從編碼器出來的數據流,可以是編碼過的視頻數據流,音頻數據流,或其他編碼數據流的統稱。ES流經過PES打包器之后,被轉換成PES包。PES包由包頭和payload組成,具體格式摘錄如下:

可以看到PTS/DTS是打在PES包里面的,這兩個parameters是解決視音頻同步顯示,防止解碼器輸入緩存上溢或下溢的關鍵。PTS表示 顯示單元出現在系統目標解碼器(STD: system target decoder)的時間,DTS表示將存取單元全部字節從STD的ES解碼緩存器移走的時刻。每個IPB幀的包頭都有一個PTSDTS,但PTSDTSB幀都是一樣的,無須標出B幀的DTS。對I幀和P幀,顯示前一定要存儲于視頻解碼器的重新排序緩存器中,經過延遲(重新排序)后再顯示,一定要分別標明PTSDTS

??? ??? 上面介紹過,ES首先需打包成PES流包,然后PES根據需要打包成PS或TS包進行存儲或傳輸。其每路ES只包含一路信源的編碼數據流,所以每路PES也只包含相對應信源的數據流。

對PS流而言,每個PES包頭含有PTS和DTS,流識別碼,用于區別不同性質ES。然后通過PS復用器將PES包復用成PS包。實際上是將PES 包分解為更細小的PS包。在解碼的時候,解復用器將PS分解成一個個PES包,拆包器然后將PES包拆成視頻和音頻的ES,最后輸入至各自解碼器進行解 碼。一個問題是:各個ES在解碼時,如何保證視音頻的同步呢?除了PTS和DTS的配合工作外,還有一個重要的參數是SCR(system clock reference)。在編碼的時候,PTS,DTS和SCR都是由STC(system time clock)生成的,在解碼時,STC會再生,并通過鎖相環路(PLL-phase lock loop),用本地SCR相位與輸入的瞬時SCR相位鎖相比較,以確定解碼過程是否同步,若不同步,則用這個瞬時SCR調整27MHz的本地時鐘頻率。最 后,PTS,DTS和SCR一起配合,解決視音頻同步播放的問題。PS格式摘錄如下:

PS包的長度比較長且可變,主要用于無誤碼環境里,因為越長的話,同步越困難,且在丟包的情況下,重組也越困難。所以,PS適合于節目信息的編輯和本地內容應用的application。


TS流也是由一個或多個PES組合而來的,他們可以具有相同的時間基準,也可以不同。其基本的復用思想是,對具有相同時間基準的多個PES現進行節目復用,然后再對相互有獨立時間基準的各個PS進行傳輸復用,最終產生出TS

TS包由包頭和包數據2部分組成,其中包頭還可以包括擴展的自適用區。包頭長度占4bytes,自使用區和包數據共占184bytes,整個TS包長度相當于4個ATM包長。TS包的包頭由如下圖摘錄所示的同步字節、傳輸誤碼指示符、有效載荷單元起始指示符、傳輸優先、包識別(PID-Packet Identification)、傳輸加擾控制、自適應區控制和連續計數器8個部分組成。


其中,可用同步字節位串的自動相關特性,檢測數據流中的包限制,建立包同步;傳輸誤碼指示符,是指有不能消除誤碼時,采用誤碼校正解碼器可表示1bit 的誤碼,但無法校正;有效載荷單元起始指示符,表示該數據包是否存在確定的起始信息;傳輸優先,是給TS包分配優先權;PID值是由用戶確定的,解碼器根據PID將TS上從不同ES來的TS包區別出來,以重建原來的ES;傳輸加擾控制,可指示數據包內容是否加擾,但包頭和自適應區永遠不加擾;自適應區控制,用2 bit表示有否自適應區,即(01)表示有有用信息無自適應區,(10)表示無有用信息有自適應區,(11)表示有有用信息有自適應區,(00)無定義;連續計數器可對PID包傳送順序計數,據計數器讀數,接收端可判斷是否有包丟失及包傳送順序錯誤。顯然,包頭對TS包具有同步、識別、檢錯及加密功能。

????TS包自適應區由自適應區長、各種標志指示符、與插入標志有關的信息和填充數據4部分組成。其中標志部分由間斷指示符、隨機存取指示符、ES優化指示符、PCR標志、接點標志、傳輸專用數據標志、原始PCR標志、自適應區擴展標志8個部分組成。重要的是標志部分的PCR字段,可給編解碼器的27MHz時鐘提供同步資料,進行同步。其過程是,通過PLL,用解碼時本地用PCR相位與輸入的瞬時PCR相位鎖相比較,確定解碼過程是否同步,若不同步,則用這個瞬時PCR調整時鐘頻率。因為,數字圖像采用了復雜而不同的壓縮編碼算法,造成每幅圖像的數據各不相同,使直接從壓縮編碼圖像數據的開始部分獲取時鐘信息成為不可能。為此,選擇了某些(而非全部)TS包的自適應區來傳送定時信息。于是,被選中的TS包的自適應區,可用于測定包信息的控制bit和重要的控制信息。自適應區無須伴隨每個包都發送,發送多少主要由選中的TS包的傳輸專用時標參數決定。標志中的隨機存取指示符和接點標志,在節目變動時,為隨機進入I幀壓縮的數據流提供隨機進入點,也為插入當地節目提供方便。自適應區中的填充數據是由于PES包長不可能正好轉為TS包的整數倍,最后的TS包保留一小部分有用容量,通過填充字節加以填補,這樣可以防止緩存器下溢,保持總碼率恒定不變。



前面3節總結了MPEG2?TS的基本格式,其中包括PES,PS和TS,以及相關字段的介紹。那么作為一種傳輸流,TS將內容進行打包/復用,讓其媒體內容變成TS傳輸,并最終在解碼端解碼。簡單來看,TS是一個傳輸層的協議棧,它可以承載各種內容的傳輸,比如MPEG,WMV,H264,甚至是IP,那么其中的傳輸規范是如何定義的呢?這個即是PSI(節目特定信息)要做的事情。

PSI由四張表構成:PAT,PMT,CAT和NIT,這四張表分別描述了一個TS所包括的所有ES流的傳輸結構。首先的一個概念是,TS是以包形式傳播,在編解碼端都需要以一定的包ID來標識TS流里承載的內容,比如,PAT表會存在于一個或多個TS包里,所以要用一個特別的包ID來表示,另外,不同的ES流也需要不同的包ID來標識。我們有了PAT和PMT這兩種表,解碼器就可以根據 PID,將TS上從不同ES來的TS包區分出來進行解碼。

TS的解碼分兩步進行,其一,是從PID為0 的TS包里,解析出PAT表,然后從PAT表里找到各個節目源的PID,一般此類節目源都由若干個ES流組成,并描述在PMT表里面,然后通過節目源的 PID,就可以在PMT表里檢索到各個ES的PID。其二,解碼器根據PMT表里的ES流的PID,將TS流上的包進行區分,并按不同的ES流進行解碼。所以,TS是經過節目復用和傳輸復用兩層完成的,即在節目復用時,加入了PMT,在傳輸復用時,加入了PAT。同樣在節目解復用時,可以得到PMT,在傳輸解復用時,可以得到PAT。下圖很好地概述了其思想。






TS是支持多路復用的,所以它可用來傳輸經復用后的多層節目。在復用過程中,要注意的是,解碼過程中所需要面對的時間參考和同步問題,因為解復用是需要各種信息同步進行的,所以在復用過程中,就需要插入相關的時間信息:PTS,DTS,PCR。

TS形成過程中,PTS和DTS是在ES打包成PES時,根據STC的參考,將其時鐘信息注入PES包中的,而之后在PES切成TS時,再將 PID和PCR信息注入到TS包中,當多路TS再進行復用的時候,各路TS的PCR將會被提取出來,再進行分析,然后再根據統一的STC參考,將新的 PCR生成并注入到TS中去,最后,因為原來PAT表信息不在適用,所以新的PAT表需要再生成,并附加到新的TS流中去。經過這多層的復用之后,新的?TS流即可以進入調制,傳輸階段。過程可參見下圖:

解碼過程要面對的問題是:解復用,視音頻的同步,解碼緩存器無上下溢。解復用即是將TS在同一信道里不同時序進行傳輸的節目分離出來;視音頻同步由 DTS, PTS和PCR三者協調完成,并且PCR是重建系統時間基準的絕對時標,而DTS和PTS是解碼和重現時刻的相對時標;對解碼緩存器無上下溢的問題,必須 借助于系統目標解碼器(STD)模型來對其進行實現,基本思想如下:

  1. TS流進入解碼器后,首先由換向器,按照一定的時序關系,將各種ES流分解出來(其中也包括PSI信息流)。
  2. 分解過后的ES流會進入各自的傳輸緩存器,通過之后,其PES流進入各自的主存儲器,注意的是:PSI信息流會進入系統緩存器,最后也到達主存儲器。
  3. 最后,解碼器根據DTS信息,從各個主存儲器分別提取媒體或系統信息,進行解碼,并根據PTS信息,將媒體內容進行顯示處理。

其過程可參見下圖:


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454965.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454965.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454965.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

二進制安裝mysql 5.7、mariadb (附yum安裝方式)

前言:本文以mariadb為例進行講解,安裝mysql同理,并以通過測試。安裝前查找系統已安裝的相關包(rpm -qa|grep -e "mysql" -e "mariadb")并進行卸載。1、準備mariadb存儲數據庫文件的目錄。mkdir -p…

GLSL/C++ 實現濾鏡效果

入門效果之浮雕 "浮雕"圖象效果是指圖像的前景前向凸出背景。常見于一些紀念碑的雕刻上。要實現浮雕事實上很easy。我們把圖象的一個象素和左上方的象素進行求差運算。并加上一個灰度。這個灰度就是表示背景顏色。這里我們設置這個插值為128 (圖象RGB的值是0-255)。同…

cv mat的shape_pybind11—opencv圖像處理(numpy數據交換)

前言C opencv中圖像和矩陣的表示采用Mat類,比如imread()讀取的結果就是返回一個Mat對象。對于python而言,numpy 通常用于矩陣運算, 矩陣,圖像表示為numpy.ndarray類。因此,想要將python numpy.ndarray的數據傳遞到C op…

H.264算法的優化策略

文章來源: http://www.tichinese.com/Article/Video/200909/2150.html 編輯:小乙哥 1 代碼優化的主要方法 通過代碼移植能夠獲得在DSP上初步運行的代碼,但是它由于沒有考慮到DSP自身的硬件特點,不適合DSP強大的并行處理能力&#…

吃飯、睡覺、打星星之“打星星”!

大家見過這樣的星星么? 你想要多少就可以多少的星星!!! 下面我們就來用奇妙的JavaScript來實現 首先我們要引入一個輸入包 let readline require("readline-sync");然后再讓客戶輸入數字,并將其存放起來con…

mysql 自動分表_Mysql Event 自動分表

create table TempComments Like dycomments;上述 SQL語句創建的新表帶有原表的所有屬性,主鍵,索引等。自動分表怎么做呢?使用上述語句自動創建分表。那么ID怎么設置呢?更改表格自增主鍵的起始值 例如 表格為 xxx_201604 那么將起…

《大道至簡》周愛民讀后感

作為一個準大二的軟件工程系的學生,初讀此書,很多部分是不太容易理解的,自己又沒有經歷過,感覺差了一個高度似的。自己讀的挺蒙,于是就去百度了一下這本書的讀后感,看看別人讀懂了什么,許多的評…

使用iconv-lite解決node當中不支持GBK編碼的問題

1、Node環境當中不支持GBK編碼 node.js當中的Buffer對象支持的編碼格式的種類有限,大概有ascii、utf8、utf16le、ucs2、base64、binary、hex。不支持GBK的編碼形式。對于windows系統來說,由于歷史原因,許多文件默認的編碼格式均為GBK。 比如我…

c1

dmg和package是安裝文件,dmg直接拖進應用程序中,pkg要進行安裝。 playfround是swift項目。--ios -----oc(面向對象的C) -----swift(oc的封裝)1963年劍橋大學退出cpl,1967年對cpl簡化推出bcpl,1970貝爾實驗室對bcpl簡化…

mysql必_MySQL必知必會(一)

摘自《MySQL必知必會》1.1.1 什么是數據庫數據庫:保存有組織的數據的容器(通常是一個文件或一組文件)人們通常用數據庫這個術語來代表他們使用的數據庫軟件。這是不正確的,它是引起混淆的根源。確切地說,數據庫軟件應稱為DBMS(數據庫管理系統…

python之工作舉例:通過復制NC文件來造數據

1 # 通過對NC文件復制來造數據2 import os, shutil3 4 # 遍歷的根目錄5 root_dir "D:\\test_data\\DISASTER\\"6 # 獲取NC文件的時間7 time_source 201612280800008 # 生成NC文件的時間9 time_new 2018122808000010 11 12 def get_dir_path(dir_name, time_str):1…

Python 3.5.2 TypeError: a bytes-like object is required, not 'str’問題解決方案

運行環境Mac Python 3.5.2 Q: http_response """\ HTTP/1.1 200 OK Hello, World! """ client_connection.sendall(http_response) TypeError: a bytes-like object is required, not str 類型錯誤,需要的是一個byte類型&#xff0…

mysql 集群架構_mysql企業常用集群架構

轉自 https://blog.csdn.net/kingice1014/article/details/760200611、mysql企業常用集群架構在中小型互聯網的企業中。mysql的集群一般就是上圖的架構。WEB節點讀取數據庫的時候讀取dbproxy服務器。dbproxy服務器通過對SQL語句的判斷來進行數據庫的讀寫分離。讀請求負載到從庫…

h.264視頻文件封裝

所謂封裝格式就是將已經編碼壓縮好的視頻軌和音頻軌按照一定的格式放到一個文件中,也就是說僅僅是一個外殼,或者大家把它當成一個放視頻軌和音頻軌的文件夾也可以。說得通俗點,視頻軌相當于飯,而音頻軌相當于菜,封裝格…

python cookbook 筆記三

分組: rows [{address: 5412 N CLARK, date: 07/01/2012},{address: 5148 N CLARK, date: 07/04/2012},{address: 5800 E 58TH, date: 07/02/2012},{address: 2122 N CLARK, date: 07/03/2012},{address: 5645 N RAVENSWOOD, date: 07/02/2012},{address: 1060 W A…

關于Vue2.0,Express實現的簡單跨域

npm install express -g 通過npm全局安裝express,之后可以通過 express --version 來查看express版本 express server 通過express server生成server項目文件 npm install 安裝server的項目依賴 可以通過執行server下的bin\www文件可以開啟服務 在www文件我們可以默…

mysql datetime類型按天查詢_mysql 時間相關sql , 按天、月、季度、年等條件進行查詢...

-- mysql查詢本季度-- 今天select * from ticket_order_detail where to_days(use_time) to_days(now());-- 7天SELECT *FROM ticket_order_detail where DATE_SUB(CURDATE(), INTERVAL 7 DAY) < date( use_time)-- 近30天SELECT *FROM ticket_order_detail where DATE_SUB…

ffmpeg分析系列

hello&#xff0c;各位好&#xff0c;本人是一名嵌入式軟件工程師&#xff0c;目前正使用ffmpeg開發一款嵌入式多媒體播放器&#xff0c;《ffmpeg分析》系列博文是本人在閱讀ffmpeg源代碼時所做的筆記&#xff0c;希望對各位有點幫助。分析過程結合下面的例程&#xff1a;http:…

Linux kernel的中斷子系統之(二):IRQ Domain介紹

返回目錄&#xff1a;《ARM-Linux中斷系統》。 總結&#xff1a;一、二概述了軟硬件不同角度的IRQ Number和HW Interrupt ID&#xff0c;這就需要他們之間架個橋梁。 三介紹了架設這種橋梁的幾種方式&#xff1a;Linear、Radix Tree和no map。 四介紹了兩種基礎數據結構描述中斷…

mysql返回yyyy mm dd_怎么把取出mysql數據庫中的yyyy-MM-dd日期轉成yyyy年MM月dd日格式...

您好&#xff0c;通過兩個個步驟可以完成轉換&#xff1a;第一步&#xff1a;日期處理可以在模板數據集中通過sql語句轉換&#xff0c;轉換方式方式如下&#xff1a;SELECT DATE_FORMAT(NOW(),%Y) YEAR輸出結果&#xff1a;2018SELECT DATE_F…