版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、dvb over ip 詳解TS系統(tǒng)解碼11 TS流的內(nèi)容41.1 ES41.2 PES41.3 TS62 TS流的解碼過程(只考慮本地文件,解碼只涉及到系統(tǒng)層打包的解碼,不涉及到編碼 的解碼)72.1 PAT 解碼:82.2 PMT 解碼82.3 音視頻解碼83 TS流解碼93.1 總用例圖93.2 各解碼類的 UML圖93.2.1 解碼主類1.03.2.2 事件管理類 113.2.3 各類包解析的關(guān)系圖 1.23.2.4 輸入輸出類133.2.5 解析PAT、PMT、私有數(shù)據(jù)等 .1 43.2.6 解析 TS 包153.2.7 解析 PES 包1.63.2.8 PCR 時(shí)鐘類1.73.2.
2、9 CRC 校驗(yàn)類1.83.3 解碼流程圖.183.3.1 TS包解析流程圖 1.93.3.2 Section解碼流程圖203.3.3 PES解碼流程圖 2.14 TS流合成(編碼)224.1 各編碼類的UML圖224.1.1 編碼主類224.1.2 合成各類之間的關(guān)系 234.2 編碼主要流程234.2.1 TS編碼流程圖 244.2.2 負(fù)載(pes、 section )打包過程25附表一:26附表二:301 TS流的內(nèi)容TS->PES->ES->NALESAn elementary stream (ES) is defined by MPEG communication
3、 protocol is usually the output of an audio or video encoder.PESallows an Elementary stream to be divided into packets.F 中'R <iciiihL REiemk圖一:PES結(jié)構(gòu)圖PES結(jié)構(gòu)各字段的具體含義見附表一。由圖一可見,1個(gè)PES包是由包頭、ES特有信息和包數(shù)據(jù) 3個(gè)部分組成。由于包頭和ES特有信息二者可合成1個(gè)數(shù)據(jù)頭,所以可認(rèn)為1個(gè)PES包是由數(shù)據(jù)頭和包數(shù)據(jù) (有效載 荷)兩個(gè)部分組成的。包頭由起始碼前綴、數(shù)據(jù)流識(shí)別及PES包長(zhǎng)信息3部分構(gòu)成。包起始碼前
4、綴是用23個(gè)連續(xù)“ 0”和1個(gè)“1”構(gòu)成的,用于表示有用信息種類的數(shù)據(jù)流識(shí)別,是 1個(gè)8 bit的整 數(shù)。由二者合成 1個(gè)專用的包起始碼,可用于識(shí)別數(shù)據(jù)包所屬數(shù)據(jù)流(視頻,音頻,或其 它)的性質(zhì)及序號(hào)。例如:比特序1 1 0 x x x x x是號(hào)碼為x xxx蒯PEG-2音頻數(shù)據(jù)流; 比特序1 1 1 0 xxx x是號(hào)碼為x x x x的MPEG-2視頻數(shù)據(jù)流。PES包長(zhǎng)用于包長(zhǎng)識(shí)別,表明在此字段后的字節(jié)數(shù)。如, PES包長(zhǎng)識(shí)別為2 B,即2X 8 = 16 bit 字寬,包總長(zhǎng)為 216-1=65535 B ,分給數(shù)據(jù)頭 9 B (包頭6 B + ES 特有信息3 B ),可變長(zhǎng)度的包數(shù)
5、據(jù)最大容量為65526 B。盡管PES包最大長(zhǎng)度可達(dá) (216 -1 )=65535B (Byte ),但在通常的情況下是組成ES的若干個(gè)AU中的由頭部和編碼數(shù)據(jù)兩部分組成的1個(gè)AU長(zhǎng)度。1個(gè)AU相當(dāng)于編碼的1幅視頻圖像或1個(gè)音頻幀,參見圖一右上角從 ES到PES的示意圖。也可以說,每個(gè) AU實(shí)際上是編碼數(shù)據(jù)流的顯示單元,即相當(dāng)于解碼 的1幅視頻圖像或1個(gè)音頻幀的取樣。ES特有信息是由PES包頭識(shí)別標(biāo)志、PES包頭長(zhǎng)信息、信息區(qū)和用于調(diào)整信息區(qū)可變 包長(zhǎng)的填充字節(jié) 4部分組成的PES包控制信息。其中,PES包頭識(shí)別標(biāo)志由12個(gè)部分組成: PES加擾控制信息、PES優(yōu)先級(jí)別指示、數(shù)據(jù)適配定位指示
6、符、有否版權(quán)指示、原版或拷貝 指示、有否顯示時(shí)間標(biāo)記(PTS-Presentation Time Stamp ) /解碼時(shí)間標(biāo)記(DTS-Decode Time Stamp)標(biāo)志、PES 包頭有否基本流時(shí)鐘基準(zhǔn)(ESCR-Elementary Stream ClockReference)信息標(biāo)志、PES包頭有否基本流速率信息標(biāo)志、有否數(shù)字存儲(chǔ)媒體( DSM )特 技方式信息標(biāo)志、有否附加的拷貝信息標(biāo)志、PES包頭有否循環(huán)冗余校驗(yàn)( CRC-CyclicRedundancy Check )信息標(biāo)志、有否 PES擴(kuò)展標(biāo)志。有擴(kuò)展標(biāo)志,表明還存在其它信息。 如,在有傳輸誤碼時(shí),通過數(shù)據(jù)包計(jì)數(shù)器,使接
7、收端能以準(zhǔn)確的數(shù)據(jù)恢復(fù)數(shù)據(jù)流,或借助計(jì)數(shù)器狀態(tài),識(shí)別出傳輸時(shí)是否有數(shù)據(jù)包丟失。其中,有否PTS/DTS標(biāo)志,是解決視音頻同步顯示、防止解碼器輸入緩存器上溢或下 溢的關(guān)鍵所在。因?yàn)椋?PTS表明顯示單元出現(xiàn)在系統(tǒng)目標(biāo)解碼器( STD-System Target Decoder )的時(shí)間,DTS表明將存取單元全部字節(jié)從STD的ES解碼緩存器移走的時(shí)刻。視頻編碼圖像幀次序?yàn)?I1P4B2B3P7B5B6I10B8B9 的ES,力口入 PTS/DTS后,打包成一個(gè) 個(gè)視頻PES包。每個(gè)PES包都有一個(gè)包頭,用于定義PES內(nèi)的數(shù)據(jù)內(nèi)容,提供定時(shí)資料。每個(gè)I、P、B幀的包頭都有一個(gè) PTS和DTS,但PT
8、S與DTS對(duì)B幀都是一樣的,無須標(biāo) 出B幀的DTS。對(duì)I幀和P幀,顯示前一定要存儲(chǔ)于視頻解碼器的重新排序緩存器中,經(jīng) 過延遲(重新排序)后再顯示,一定要分別標(biāo)明PTS和DTS。例如,解碼器輸入的圖像幀次序?yàn)镮1P4B2B3P7B5B6I10B8B9,依解碼器輸出的幀次序,應(yīng)該 P4比B2、B3在先,但顯示時(shí)P4 一定要比B2、B3在后,即P4要在提前插入數(shù)據(jù)流中的時(shí)間標(biāo)志指引下,經(jīng)過緩存器重新排序,以重建編碼前視頻幀次序I1B2B3P4B5B6P7B8B9I10 。顯然,PTS/DTS標(biāo)志表明對(duì)確定事件或確定信息解碼的專用時(shí)標(biāo)的存在,依靠專用時(shí)標(biāo)解碼器, 可知道該確定事件或確定信息開始解碼或顯
9、示的時(shí)刻。例如,PTS/DTS標(biāo)志可用于確定編碼、多路復(fù)用、解碼、重建的時(shí)間。TSTransport stream將具有共同時(shí)間基準(zhǔn)或者具有獨(dú)立時(shí)間基準(zhǔn)的一個(gè)或者多個(gè)PES組成的單一數(shù)據(jù)流。1 R1 >11 bit1 bitl3biT2 bit4 bit周母而1誤眄有效磁載單元作施|saa連接升字節(jié)!甯示符_優(yōu)先猶樟制散揩二 H代入IS4 B11;日后應(yīng)返1可11)1廣心.1 f.iJU ' 'jf/i k 邁克君據(jù)區(qū)長(zhǎng) 1|山丘出有關(guān),If 1 bilU biitbit一 |1 tMl1 bu1 1 bittbii1帥間闿格 示荷出機(jī)存儲(chǔ) 指示行化指示存 IPCR際志整
10、點(diǎn) 軻志1傳輸專用限的PCR通應(yīng)於 triMSfcRCRPnfmn Ckvk RckreDce ©T目日才辨解淮 圖二:TS包結(jié)構(gòu)TS結(jié)構(gòu)各字段的具體含義見附表二。由圖二可見,TS包由包頭、自適應(yīng)區(qū)和包數(shù)據(jù) 3部分組成。每個(gè)包長(zhǎng)度為固定的188 B,包頭長(zhǎng)度占4 B,自適應(yīng)區(qū)和包數(shù)據(jù)長(zhǎng)度占184 B o 184 B為有用信息空間,用于傳送已編碼 的視音頻數(shù)據(jù)流。當(dāng)節(jié)目時(shí)鐘基準(zhǔn)( PCR-Program Clock Reference )存在時(shí),包頭還包 括可變長(zhǎng)度的自適應(yīng)區(qū),包頭的長(zhǎng)度就會(huì)大于4 Bo考慮到與通信的關(guān)系,整個(gè)傳輸包固定長(zhǎng)度應(yīng)相當(dāng)于4個(gè)ATM包??紤]到加密是按照 8 B
11、順序加擾的,代表有用信息的自適應(yīng)區(qū)和 包數(shù)據(jù)的長(zhǎng)度應(yīng)該是 8 B的整數(shù)倍,即自適應(yīng)區(qū)和包數(shù)據(jù)為23X8 B =184 B 。TS包的包頭由如圖所示的同步字節(jié)、傳輸誤碼指示符、有效載荷單元起始指示符、傳 輸優(yōu)先、包識(shí)別(PID-Packet Identification )、傳輸加擾控制、自適應(yīng)區(qū)控制和連續(xù)計(jì)數(shù)器8個(gè)部分組成。其中,可用同步字節(jié)位串的自動(dòng)相關(guān)特性,檢測(cè)數(shù)據(jù)流中的包限制,建立 包同步;傳輸誤碼指示符,是指有不能消除誤碼時(shí),采用誤碼校正解碼器可表示1bit的誤碼,但無法校正;有效載荷單元起始指示符,表示該數(shù)據(jù)包是否存在確定的起始信息;傳輸優(yōu)先,是給TS包分配優(yōu)先權(quán);PID值是由用戶確
12、定的,解碼器根據(jù) PID將TS上從不同ES來的 TS包區(qū)別出來,以重建原來的 ES;傳輸加擾控制,可指示數(shù)據(jù)包內(nèi)容是否加擾,但包頭和 自適應(yīng)區(qū)永遠(yuǎn)不加擾;自適應(yīng)區(qū)控制,用 2 bit表示有否自適應(yīng)區(qū),即(01)表示有有用信 息無自適應(yīng)區(qū),(10)表示無有用信息有自適應(yīng)區(qū),(11 )表示有有用信息有自適應(yīng)區(qū), (00)無定義;連續(xù)計(jì)數(shù)器可對(duì) PID包傳送順序計(jì)數(shù),據(jù)計(jì)數(shù)器讀數(shù),接收端可判斷是否有 包丟失及包傳送順序錯(cuò)誤。顯然,包頭對(duì)TS包具有同步、識(shí)別、檢錯(cuò)及加密功能。TS包自適應(yīng)區(qū)由自適應(yīng)區(qū)長(zhǎng)、各種標(biāo)志指示符、與插入標(biāo)志有關(guān)的信息和填充數(shù)據(jù)4部分組成。其中標(biāo)志部分由間斷指示符、隨機(jī)存取指示符、
13、ESa化指示符、PCR標(biāo)志、接點(diǎn)標(biāo)志、傳輸專用數(shù)據(jù)標(biāo)志、原始 PCR標(biāo)志、自適應(yīng)區(qū)擴(kuò)展標(biāo)志 8個(gè)部分組成。重要的是標(biāo)志 部分的PCR字段,可給編解碼器的 27MHz時(shí)鐘提供同步資料,進(jìn)行同步。其過程是,通過 PLL,用解碼時(shí)本地用PCR相位與輸入的瞬時(shí)PCR相位鎖相比較,確定解碼過程是否同步, 若不同步,則用這個(gè)瞬時(shí)PCR調(diào)整時(shí)鐘頻率。因?yàn)椋瑪?shù)字圖像采用了復(fù)雜而不同的壓縮編碼 算法,造成每幅圖像的數(shù)據(jù)各不相同,使直接從壓縮編碼圖像數(shù)據(jù)的開始部分獲取時(shí)鐘信息 成為不可能。為此,選擇了某些(而非全部)TS包的自適應(yīng)區(qū)來傳送定時(shí)信息。于是,被選中的TS包的自適應(yīng)區(qū),可用于測(cè)定包信息的控制bit和重要
14、的控制信息。自適應(yīng)區(qū)無須伴隨每個(gè)包都發(fā)送,發(fā)送多少主要由選中的TS包的傳輸專用時(shí)標(biāo)參數(shù)決定。標(biāo)志中的隨機(jī)存取指示符和接點(diǎn)標(biāo)志,在節(jié)目變動(dòng)時(shí),為隨機(jī)進(jìn)入I幀壓縮的數(shù)據(jù)流提供隨機(jī)進(jìn)入點(diǎn),也為插入當(dāng)?shù)毓?jié)目提供方便。自適應(yīng)區(qū)中的填充數(shù)據(jù)是由于 PES包長(zhǎng)不可能正好轉(zhuǎn)為TS包的整數(shù) 倍,最后的TS包保留一小部分有用容量,通過填充字節(jié)加以填補(bǔ),這樣可以防止緩存器下 溢,保持總碼率恒定不變。2 TS流的解碼過程 (只考慮本地文件,解碼只涉及到系統(tǒng)層打 包的解碼,不涉及到編碼的解碼)TS流的基本解碼過程:PAT節(jié)目關(guān)聯(lián)表-PMT節(jié)目映射表-» PES音頻、視頻包。首先,從PAT獲取TS流中所有節(jié)目映
15、射表.PMT )數(shù)據(jù)(視然后,從節(jié)目映射表中獲取每個(gè)節(jié)目(本設(shè)計(jì)為本地文件,只含有一個(gè)頻和音頻)的PID。最后,根據(jù)傳輸過來的數(shù)據(jù)PID對(duì)視頻數(shù)據(jù)和音頻數(shù)據(jù)進(jìn)行系統(tǒng)層復(fù)用解碼。系統(tǒng)層復(fù)用解碼:循環(huán):TS-» PES-ESoPAT解碼:PAT表攜帶以下信息:(1) TS 流 ID - transport_stream_id ,該 ID 標(biāo)志唯一的流 ID 。(2)節(jié)目頻道號(hào)-program_number ,該號(hào)碼標(biāo)志 TS流中的一個(gè)頻道,該頻道可以包含很多的節(jié)目(即可以包含多個(gè) Video PID 和Audio PID)(3) PMT 的PID-program_map_PID,表示本頻
16、道使用的哪個(gè)PID做為PMT 的,因?yàn)镻ID可以有很多的頻道,因此DVB規(guī)定PMT的PID可以由用戶自己定義.PMT解碼PMT表中包含的數(shù)據(jù)如下:(1)當(dāng)前頻道中包含的所有 Video數(shù)據(jù)的PID(2)當(dāng)前頻道中包含的所有 Audio數(shù)據(jù)的PID(3)和當(dāng)前頻道關(guān)聯(lián)在一起的其他數(shù)據(jù)的PID(如數(shù)字廣播,數(shù)據(jù)通訊等使用的PID)音視頻解碼音視頻解碼的數(shù)據(jù)如下:(1)根據(jù)音頻PID解碼音頻數(shù)據(jù)到緩存區(qū)(2)根據(jù)視頻PID解碼音頻數(shù)據(jù)到緩存區(qū)(3)和當(dāng)前頻道關(guān)聯(lián)在一起的其他數(shù)據(jù)放到數(shù)據(jù)區(qū)中3 TS流解碼總用例圖Decoder 首先調(diào)用事件管理器注冊(cè)各類事件(事件類型見3.2.2 ),然后調(diào)用read
17、_packet函數(shù)讀取指定文件中的TS包進(jìn)行分析,根據(jù) PID值不同分別對(duì)TS進(jìn)行不同的處理。Parse_PAT/PMT/._packet 把PAT(注:PAT的PID為0)和PMT的攜帶的相關(guān)節(jié)目流 PID的信息(包括視頻,音頻,私有數(shù)據(jù)等)存入 Directory 中,之后Parse_ts_packet通 過Directory 中提供的PID信號(hào)分別對(duì)不同的 TS分別處理。各解碼類的UML圖3.1.1解碼主類今三1主WCcinsurnefRecord -STS3E的再匚町f對(duì)工笆C白力,1E日.innj I Ld<H£dfn nT B SnAMCcniijim*rRe ec
18、rd 錘表=inAal_jxofl i£i±MAPS F 安熱箱前 者的書"豆的京-Cons urn rRec-ard* tr TS+ pid; int+ cons- Con&uTier+ rext dec: ConsumB-Reco "d*Co n su n- rR-cord (c-haT, inlj*ml- fiwnigir Ev%niM«Dag«<- dir Ducsciy事Q"; llnputP©Pfrnet_pid' int- pst cons: Consumer*- C3_cons
19、: Cdnsu me1*- -Hssd_crec: CansurterReca rd>* BtODderfE ve ntMi n*g s r)* EGHflicnpnpijiPmrt* mH+ flu 曲(J ; g id+ 0日d.pB成: g汨 mslsil'nelpidfint): void+ msisl_dinfDirerfDry*):誦ad inialHll_prDg(PMjyiomi . rod+ geE_d<(i. Directory*rtqp d<0 : 1nt gtt-mansgtrO " E«ntMsffiB8*r*+ a
20、87;i_tsO ; T3*+ gel_ts(iit): TS*+ gst_pes(int) : PES-* gsl_co n s(in t| . Cea 口 su me r*+ pmt_prf&0 : void* idd_«ins(Conm«i* . inir mH wehlUprog_on_cijnintiai(Progru): wid-tn sla li jp rQgonn«WMl®t(Co nsu n»rR<co rd* . 3 reg ram*) ; Co-nfiu ni-rR»CDrd"- fnO-
21、Becfffnt,: Gg nsme rR里g B”- fridwandwremae_ic«?(int): ConsumerReca rdfeoThe Decoder object manages such global information as the Network Table pid value, the current packet number and the number of programs and streams per program (as represented in the Directory structure)。主要函數(shù)介紹:read_packet
22、() : Called to read a new transport packet 。install_dir (Directory*) : install Directory, Directory是一個(gè)節(jié)目單(比如湖南衛(wèi)視,星空衛(wèi)視,東方衛(wèi)視,CCTV)。install_prog (Program*) : install program(如湖南衛(wèi)視 )to Directory 。install_netpid ():表示網(wǎng)絡(luò)信號(hào)的來源,當(dāng)這個(gè)更新時(shí),需要重新安裝目錄。install_prog_on_current_list安裝節(jié)目到當(dāng)前列表。install_prog_on_new_list安裝
23、節(jié)目到新的列表。3.1.2事件管理類aeTuneTB':ianiEvemtType"S=-g wad n 二£ I-七 ad-rPaT=sd PATParBed TJgDFaedCe lib a rnb«rE veniTypes: GI IgokR* co fd*+ Eve nt Ms negert)+ Re-g :>ter(EverftT-p«. Cfilbsck. void void4 Tngg»rf£vSFitTypfi,: TOdGAP a-«d BadGG Disoo ntinu ty Randor-
24、iAw4w nCREvent TSD75En| Um 沖費(fèi)刖比d PE ''ernninatinn 'J j Fbw rEv* ntT/a*!Call ba e k Re cord* 'type Ev*niTyp«* CAfcack. 9 Iback *Jtent_data. >tnd*+ CatthackRscoidwefitType. Sc lib白ck, vcitl*lWrapperL Tit c: Ghsr* W胃 ppRrQnt)+ ,已p。善r的號(hào)qtypedef void (*Callback)(EventType, void*,
25、void*):回調(diào)函數(shù)模板。void Register (EventType t, Callback f, void* d):注冊(cè)事件。void Trigger (EventType, void*):觸發(fā)事件。3.1.3類包解析的關(guān)系圖飛Gdr-iur-w,子=青5附fikH 二*東£者, TSCcFrftH 及 T%£MT:- - - 7 =F L = .; 分就歸可司色Fflt9.378 PK.像X兄匹工工氟 wl-Pffdial 子生 MWF- 先工界FCBM解仁酮iHnf*1n髀干Vt aonCovnawn4MNI y TT 司把 W廿司蘭T立片己/弓心日崇內(nèi),三事
26、.懺,'IKek_曜附(用三 F7 Se-i-ar-Dci-surrvConsumer設(shè)置和獲取狀態(tài)。rK 麗wnwF»5C4 Mo m h:UFLA: - T£j <H!-FriOiRirrwi%日vadEw_3es6nr-iJMrlitfi" bi<lN144,vj!(E二日 p;相S 'Ett g =的SbbG/6*. 口figfl總產(chǎn)HlS.hSgJ.g _ iriidEiBfl_S=;哂 BE ht«der b2A£cin=u7ieTt; Jn油*fi jT_rdii SHE XhjqFk f*5: DE_
27、El13g:ad*e 口 Ed rtti3_"<io_ii3g 24 卑.GLt q4 F工曰HMIFHJ. pHT/, *. £1尾口 Kfc F 0g Wg#-te_ * fe Tie nta >_!£: re 3ffFi_-Qnurt:t*i- 1ClStf. MtHi- r口QACbnahmcpfCASwIni* DrcDdciconnect (InputPort*):連接到輸入接口。set_cstateget_cstate 表示Sectionconsumerread_partial 表示讀取 TS 的 payload.read_header_
28、a 、read_header_b 表示讀取負(fù)載的頭部分。read_section 根據(jù)讀取的負(fù)載,更新節(jié)目。各個(gè)子類分別實(shí)現(xiàn)。PES同上。3.1.4 輸入輸由類EpiFglF*,鵬_,忖*11« »cjf Pfliy小I 二nriPremFiFT 專 AJtfMSA- HriFh&tnRffoi 型里 隊(duì)由冷y裊. 丁丁?不無號(hào)號(hào) 至毛吉,"三不 =-. wf, 是:mmcr¥ n-Duf_J(!/f .=hf h-廿4卜* mMGKio* iesc_ti<: : disr+ 隼咱JWw。步射+ Wi*c!_pin ch-sr*j mi)
29、«e.Eika% K ir<+ TSiE_re se wtddts"tTL&t_ ntrt3i'n5 - chonTifcftfl日 ir; Kill gu*HRr.uiFsP七h(yuǎn) 廣 nt;,-vcE十PuLE5t9i1*rpZT_pe:5iCEFt U FiF5mBlT MJnMkwnpQ工Thm S;1arap 7* * &s_tn*c EtaiFpW。:七 加昧cnGO em diect_CTci rnt f DdnLcrc© . fwiD* 題口cret 司。Q1P中U串a(chǎn)t»ThT« »oy
30、Poy* E干cluulFL'dCinL)* viw_&riicli*n:,3d+ j 針。.加 n:+ "陽Fc_ riq rtahti it|_ /口 d* edgc.tsEsfaf幣n七,H* *flrbe uifrfnt. lit) : voidtie hied_3 tWiiti vod+ 2*立事中30歸1*寫1»,口50 第d+imc e| Rnp 7rm st TimaGkij rppBF*, * * 日+ 'jihrtGtims rta Tp27_S,£fo!nai,:(T mt3lsaEpBG。- 1rtMd* rtnrt
31、_crcte 再* siep_«(e 訶*WK_GHGfig d¥ 。如“_凄1對(duì)。,閥山M巾J也/JDFim當(dāng)。庭MiP-crd-ramFil-eRofITcRnE-。冏-甌ini- fiiP_n3Tiie- 時(shí) sr"- w- fitm; FILE-1bijf|C«h5Eiz£ 0 卜 r - fer: nt * Owtpg ins » Ww dw才酊川匚/而qIDIE'C:l_ JJ _JFcrtFrcm RLimb而附產(chǎn)"叩廿I int- b!rts_pLr. ill- AH* 5A- M工由I Bug
32、9;. m-MQWi ml-tiK" eh# "-)"_'!1并九rnt bt&jdH mtM ”也十洶0 EmjI PprtFr?« mRairnC r?t 曲 A 7* inq_ii*。. irt*. EI3干 DFc rtc R.3 m'iTt; ini. Him產(chǎn))fl. k 總 加步巾匚0小和口 MKs 心,1必£.9誓|1|0 加力0* U工會(huì)辦Ef Rd口 FartTMilPM<J 5M-nexLout "-TS nl- M 上 FILE*-ehar- farn: int- bcFaas-:
33、 ri OPoiTd-ii rn. cn*n-r T?尸 7 mF* 口# cl/js Ji_tiif-ca ri zsnB! CLJ 打 回n” 2試按要求從緩沖區(qū)中讀入規(guī)定的位,或者字節(jié)數(shù)。比如函數(shù)read_bit ()表示從緩沖區(qū)中讀入一個(gè)bit的數(shù)據(jù)(注意緩沖區(qū)中以byte對(duì)齊),讀入時(shí)生成CRC。所有從緩沖區(qū)讀出數(shù)據(jù)的方式( bitbytenbits )基函數(shù)都是這個(gè)。函數(shù)read_byte 從緩沖區(qū)讀取一個(gè)字節(jié)。read_pattern 表示讀取指定字符串。read_reserved_bits讀取填充數(shù)據(jù)。read_uimsbf(int nbits, char* message)讀
34、取n位轉(zhuǎn)化為無符號(hào)整形,高位在前。read_tcimsbf(int nbits, char* message)讀取n位轉(zhuǎn)化為有符號(hào)整形,高位在前。check crc 表示CRC校驗(yàn)。3.1.5 解析PAT、PMT、私有數(shù)據(jù)等Dir“<«nu munition*StreamTypeLPEGGIVIDEO = 1M=EG2VICEOMSES1 AUDIOMP UG2Agic3M3EGPRIVATEccsnuwe rsttsin»Prog ra m Sta fee曲bIM巨NOTACT IVEDiEctoiy。8dd_progr3im(Prugr3ifTi*) : rod
35、陪Ecr.si rpg ra m;P nag rs m*); vq刃 reiTC«_prDgrarTi(int) : gid get_p rag ramfint) Pragram*ge 1_n u mpTEgra nntsC1 : 1tProgram+ pragiBamnu mber rnt斗 pid: ini+ nesd=enec: ESlr&smReoard'>+ SGtrra; ini+ acr 工11esirrL EStres1*+ PnogramO+ P no g rani(rit)+ Progrsnumt, mt)t acftryateQ. roel
36、* dactp/attQ . void+ ftddMtreflrnfEStnBamr) void* ne mcve_estrea e偃 Stna a: *o id* Mt_pai_*strearn(EStr«ami,): mF* * rwv»_*£tr* a i*i(int): ve-呂中 白電匚名必晤3m(int) : E5VlTT* ML1n um-ME'E,。: mt* print。: vod+ print。: void+ EWHEBrREnulEVimEFJF f 口 r n Rech F :n m口舊 e=prqg-smz PnjgraffTT*
37、 nextprec: Pnogr+ EStrsmfrit, rnt- s*mType)+ pMntQrvoidestreamz EStn&sm*,next erac: E Strss mRscoTl"+ siieam_type SlieamiType bandwrsdth: int* p»d: hlP reg ram RetardE 3 ire am Record解析PMT中攜帶的節(jié)目信息到program ,再把program 插入到directory 。類似于機(jī)頂盒的搜臺(tái)系統(tǒng)。Dirrctory : 函 數(shù) add_program 、remove_program
38、表示添 加和刪除節(jié)目。 get_program表示獲取節(jié)目,get_num_programs表示獲取節(jié) 目數(shù),Program :函數(shù) active、deactivate 表示添加激活和停止節(jié)目, add_estream 、 remove_estream 表示給節(jié)目添加和刪除 ES流,set_pcr_estream 表示設(shè)置該流含有 PCR, get_estream 表示獲取 ES流,get_num_streams 表示獲取節(jié)目中含流的數(shù)目。3.1.6 解析TS包他幫洗JS肉蛙.里舍一4運(yùn)二號(hào)Ad-aptationField+ adaptatnn_eKie n»n_lengtii: m
39、t* a d ptatiofi_i!etd_le ng th: rii+ dtuonliniifty_oode: cher+ elefn_9tfVArn_pnonty_oode: char* 叫± r_Nuffing_byl«i: mH 口二R: Tir*wStamps"+ rand4m_ao« : cfiir+ apiiot_coLi nldown: in*+ tra n&pcrLpn/fl ats_lengftti: ini* OPC-R. Time Sum p27p+ Ad»ptAlicnF«dQ* g«t_f
40、eids._ngthO: mi+ g«t_lMigttiD: intt prinLD : void* adsp:-Bton: Adsotstio-ed -* pflflgad_u;廿+ ad: kit* aayk>ad_cod«: dn»r* itTslnS-SS-ds; char* In hbpo r1_*pjcod«: char* dd_ptrfTirri»Stsmp2 7) : WDid4Ht. nt Ft, it. T f 兮乜7, 5£匕 ehir, 50 vodt canfig-tjasicfctisr, mt. c
41、harr charr charr chit) : gid+ d* « ttt_pcr() : vod+ g»t_h'6fldtf_itnflthO - int+ mc_cc) void print。: voidTS包結(jié)構(gòu),函數(shù) get_header_length 表示TS包頭的長(zhǎng)度,config_basic 表示TS包 基本標(biāo)志參數(shù)設(shè)置,config_adaptation表示適應(yīng)字段設(shè)置,inc_cc表示包數(shù)量增加,add_pcr , delete_pcr 添加和刪除 PCR。get_fields_length表示調(diào)整字段長(zhǎng),不包括標(biāo)志位,get_length 表示
42、total length of the adaptation field3.1.7 解析PES包LPESEKtensionpp_seq pp_=eq PES+ o ng ins l_stu ff_ n gth. ml+ F_STD_bufferecode. char P_STD_buffele. chtr+ F&STD-Sdu 肝jy mt+ ;p sck-fwkd ifi n gth- int9目©/_11(學(xué)。看匚 char*PES prtfatE dsta: 時(shí)7.+ a dd i-D n a i_m p»y_rifo :田啟,+ a g n nrent_in
43、d ca co r_co de 后臺(tái)3喈 8PmgM_8d*:卅r+ DTS: E»Stmp9Q+ ES.rat#- Kt+ ESCR; Time Sts n27+ extenskun: PESExtentn *+ n umbe rstuffrng_!b)i1es; int+ a-ginsloa-de: char+ P ±S_p acket_te n gth: int+ pn®v)aus_CRC: nl+ 口PMy_Ed卓.ehar+ PTS. TEeSfmp90 irmb'irig_cQdi tiitr+tnt- triok_moc!e TrickMod
44、s "+ fife name: ch ar *unten intnter_cade: chareftBiOn_fte kfl_ilengfl3h! inigjrf_iengthO: mt "ESEKten&iDniO printQ : void+ co nfig_bs Bic(cti b r, 1nL -ctisr, TmeStanip 7*, TtmeStampQD *, TimeS Is mp 90*, ch sr, char, ctiar, char, chsr, int, int) : vatd* co nfig_ffl3d:&in ek> n
45、() : g»d+ config_Lr>cK(inL char char, char, char) : void* gt sdf_diit8i_lenfl in 0 : ini* ”Lh"d,F(xiàn)_*nQthO : int* gftkingthQ : int+ PESO+ PES (pe& *)+ print。: voidstream68 "和"對(duì)PES包進(jìn)行解析。解析出頭部數(shù)據(jù),解析后的數(shù)據(jù)分別存貯在”stream69 ” 2個(gè)文件中。函數(shù)get_length表示包總長(zhǎng)度。get_header_data_length 表示PES頭長(zhǎng)度,不包
46、括填充字段。get_header_length 表示PES頭長(zhǎng)度,包括填充字段。config_basic 表示PES參數(shù)設(shè)置。NPCFl時(shí)鐘耳步.分別為PCR BASE':PCR EXT3.1.8 PCR時(shí)鐘類TiirrtStarnpQO- + brts0_31: ynsgngd lang號(hào) t)rt32: ml- priniQ: v©idl+ TimStmpSD tariig- + Ti me S-t.3 mp 99 rmt long )- + TimeSlgrripSO (TionsStgFnp27;Ti me Si mpJ7- «xt.: shod;+ >
47、;?prate r -fTrnneS-lamp 2 7f TrmBStampJ?); Ti:Stamp27* op-srstcir4(TirrwStiimpS7, Trrr«SLaE27) : TmneStamp27*- u p電 rata r =Ti rw St amp2 7): Tire Sts mp2 7+ QptratD r»tang) : TirnftSlamp27步>(Tim«StBimp27, Tfmegtamg27) : icl+ print。: void* Tirra3tBmp2704 TimeStemp27(bng) : void* Ti
48、m#-3tftmp27(short long)+ TimsStfcrnpSTfihiort. int, long)系統(tǒng)時(shí)鐘的相關(guān)的類,對(duì)系統(tǒng)時(shí)鐘進(jìn)行比較。其中對(duì)27MHZ的時(shí)鐘算術(shù)和邏輯運(yùn)算符進(jìn)行了重載。注:PCR的校正一直是學(xué)術(shù)界研究的熱點(diǎn)。3.1.9 CRC校驗(yàn)類二江吧v二Poly- crc; unfiigiq«d tong鼻 ihrft_F«g32p uhe -gnfid ehii r+ pcly_cmp(chai :色汨* pAnt_biH0: eid+ pniih_brt(ch»r): gid每位進(jìn)行異或運(yùn)算后存儲(chǔ)在一個(gè)4BYTE的數(shù)組中。函數(shù)poly_
49、cmp 作CRC驗(yàn)證。函數(shù) push_bit 作CRC的生成。解碼流程圖3.1.10TS包解析流程圖Packet+3.1.11 Section 解碼流程圖3.1.12PES解碼流程圖i+4 TS流合成(編碼)各編碼類的UML圖4.1.1編碼主類Encoder4Ensder,!室提的索里圖與漫.En coder E伯 ntiMa n sger* m)的構(gòu)三 西 紫三臺(tái)與T JPedug臺(tái)社象.- maria>gen EventMs nsgef"- dir DiTecldry*-isppd: "SPitbducer* oport. Odl|>dtFofi'*
50、 bitrate : nt* ps_rsl«. ini-TimeStimpS7o-PradL>c«rR«cord- type: ProdTypHS- is: TS*- pCr_flag: ifTt- nejctjucr TimStAmp27- orod: Produoef*一 景性自用_50舞比iflt- g«p: dem心0" cugap. daubh iwxtjna PrnduMrR»oord-+ Eo8dTEve!ntMn*g巧+ bftha電時(shí)。;mg id s<pid_ich«<ju tad_p
51、Bok«tO _ vo id+ 鼻司d.p&心ket(int)二 void+ 31b直值EEl:hnt:gid+ in,Ld:ir(Dimtoiy*) ; gid+ get_diT() , Drre-cia ry* get_tsilnl): TS*+ gel_pesj rnt + : PES*+ TiebV_pdi j : mt+ m nd_ p a ck-et(Pf(Mluce rRecs rd") : w<d+ 19dd_p rod (imt, Pr&dTypa Pteduce r". TS*) : P rod ucerRscoff, d
52、$bgtfi!_pfcidi|jnt). mid+: Prod woe r*+ findfflcfint): F rod uce 出世8 rd .+ 9 urdsQ : vc id+ csfc_rrxjxG: fit+ Prod UMrR»cord(PrtidTyBe ProdJMf". S")函數(shù)install_dir 首先安裝PAT函數(shù)send_packet 表示按PID發(fā)送TS包函數(shù)send_scheduled_packet表示按一定的規(guī)律輪流發(fā)送TS包。函數(shù)recalc_mux 表示節(jié)目復(fù)用4.1.2 合成各類之間的關(guān)系函數(shù)get_nready 獲取已經(jīng)填
53、充的字節(jié)長(zhǎng)度函數(shù) fill_buffer 填充 buffer.函數(shù)send_payload發(fā)送負(fù)載.函數(shù) send_section 發(fā)送 section packet.編碼主要流程4.1.3 TS編碼流程圖遍歷生產(chǎn)者鏈表4.1.4負(fù)載(pes、section )打包過程發(fā)送3B長(zhǎng)的同步字節(jié)友運(yùn)節(jié)日類型stream_id 和 PESi1長(zhǎng)根據(jù)各個(gè)Pes的初始 化信息,發(fā)送pes的 頭部信息和填充字段是否有負(fù)載連接到負(fù)載輸入口發(fā)送負(fù)載返回附表PES分組字段packet_start_code_prefix(24)開始碼字為 0X00 00 01stream_id(8)原始流的類型和數(shù)目,取值從 10
54、11 1100到1111 1111 之間。各值含義具體見13818-1 。PES_packet_length(16)表示從此字節(jié)之后 PES包長(zhǎng)(單位字節(jié))。0表示PES包長(zhǎng)不限制,且只能用于視頻PES。10填充字節(jié)。PES_scrambling_control(2)PES有效負(fù)載的加密模式。00表示不加密,其余表示用戶自定義。PES_priority(1)PES數(shù)據(jù)包的優(yōu)先級(jí)。類似于 TS的此字段。data_alignment_indicator(1)為1時(shí),表明此分組頭部之后緊跟著 數(shù)據(jù)流描述子中定義的訪問單元類型。copyright(1)版權(quán),1表示 有版權(quán),具 體見版權(quán) 描述 子13818-1 1-2-6-24。 0 表示沒有。original_or_copy(1)1表示原始數(shù)據(jù),0表示備份PTS_DTS_flag(2)10表示含有 PTS字段,11表示含有 PTS和DTS字段,00表示不含有 PTS和DTS, 01無 定義。ESCR_flag(1)1表示ESCR在PES首部出現(xiàn),0表示不出現(xiàn)ES_rate_flag(1)1表小PES分組石有 ES_rate子段。0表小不含有。DSM_trick_mode_flag(1)1表示有8位的trick_mode_flag 子段,0表示不出現(xiàn)此字段。只對(duì) DSM 有效。在廣播中 不用。add
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年魚塘綜合利用租賃協(xié)議2篇
- 2024年甲乙雙方關(guān)于2024年奧運(yùn)會(huì)贊助權(quán)益分配的合同
- 2025年度蜜蜂產(chǎn)業(yè)聯(lián)盟合作協(xié)議范本3篇
- 2025年度博物館館藏品安全保管與修復(fù)服務(wù)合同3篇
- 2024年規(guī)范版夜間出租車租賃合同版
- 臨沂大學(xué)《民航服務(wù)英語(一)》2023-2024學(xué)年第一學(xué)期期末試卷
- 上海出版印刷高等??茖W(xué)校《大學(xué)英語四》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年連鎖加盟合同樣本
- 鄭州職業(yè)技術(shù)學(xué)院《高級(jí)程序語言設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 鄭州工商學(xué)院《病原生物學(xué)B》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年國家公務(wù)員錄用考試公共基礎(chǔ)知識(shí)復(fù)習(xí)題庫2500題及答案
- DB3309T 98-2023 登步黃金瓜生產(chǎn)技術(shù)規(guī)程
- DBJ41-T 108-2011 鋼絲網(wǎng)架水泥膨脹珍珠巖夾芯板隔墻應(yīng)用技術(shù)規(guī)程
- 2025年學(xué)長(zhǎng)引領(lǐng)的讀書會(huì)定期活動(dòng)合同
- 水利工程全生命周期管理-洞察分析
- 2024年物業(yè)公司服務(wù)質(zhì)量保證合同條款
- JJF(陜) 049-2021 變壓器交流阻抗參數(shù)測(cè)試儀校準(zhǔn)規(guī)范
- 詞語理解-2025年中考語文專項(xiàng)復(fù)習(xí)(遼寧專用)(原卷版)
- 娛樂場(chǎng)所突發(fā)事件應(yīng)急措施及疏散預(yù)案(三篇)
- 八大危險(xiǎn)作業(yè)安全培訓(xùn)考核試卷
- 老年焦慮癥的護(hù)理
評(píng)論
0/150
提交評(píng)論