久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

CMMB中的H264和AAC打包成ts流

 rookie 2013-05-13
參照tstools這個(gè)開(kāi)源項(xiàng)目完成了CMMB的merge aac with 264 to TS.

在做的過(guò)程中,分成了幾個(gè)階段,。先試著將H264打包成TS,這花了最大的精力和時(shí)間,;接著將AAC打包成TS;最后將其合并起來(lái),。

一,、處理H264
     1、H264 -> pes
     在查找了大量資料后,,對(duì)H264有了初步的認(rèn)識(shí),。H264的結(jié)構(gòu)從大到小依次為視頻序列(sequence )、圖像(picture ,相當(dāng)于幀),、片組,、片(slice)、宏塊(MacroBlock),、子塊(SubBlock),。
     
          
     其中,幀率是針對(duì)于圖像來(lái)說(shuō)的,,例如25Hz的幀率,,就差不多是每個(gè)40ms顯示1個(gè)圖像。
     圖像分為 I圖像,、P圖像,、B圖像。
     每個(gè)圖像又由多個(gè)片組組成,,片組由多個(gè)片組成,。
     每個(gè)片又由多個(gè)宏塊組成。片分為I_slice,、P_slice,、B_slice。宏塊有I,、P,、B三種宏塊,。
     I_slice里只有I_MB,  p_slice里可有P_MB和I_MB,  B_slice里可有B_MB和I_MB,。
     通常的一個(gè)圖像里就含一種片,這次的CMMB里的H264比較簡(jiǎn)單,,是Baseline的profile,,只含有I,、P幀,而且每個(gè)圖像就1個(gè)slice,。

     對(duì)于H264按功能層次劃分,,又分為視頻編碼層VCL(video coding layer)和網(wǎng)絡(luò)抽象層 NAL(Network abstraction layer).
     每個(gè)NAL單元包含:NAl頭+負(fù)荷
                                 NAl的頭一般為00 00 01 或者00 00 00 01,然后到下一個(gè)頭之間都為這一個(gè)nalu的數(shù)據(jù),。

     所以,,對(duì)于封裝成ts流,只需要去讀取H264的原始文件,,然后找到這個(gè)nal頭,,再將這個(gè)nalu(包含頭和負(fù)荷)當(dāng)成數(shù)據(jù)打包成pes再打成ts即可。

     在打包成pes的時(shí)候,,需要注意的一個(gè)問(wèn)題就是pts/dts,,其單位應(yīng)該是系統(tǒng)時(shí)鐘。需要在找到每個(gè)圖像的起始slice的時(shí)候,,在打包成pes的時(shí)候加上pts/dts,。這次的CMMB中,其視頻幀只含I/P圖像(幀),,且每個(gè)圖像只有1個(gè)片,所以就在讀取264原始數(shù)據(jù)時(shí)讀到I_slice或P_slice的時(shí)候,,一并打入pts。CMMB流正好又有現(xiàn)成的pts,,只需讀出來(lái),,按照CMMB中的換算方法,每22500就是1秒,,就能得出pts的值,,而不需要我自己手動(dòng)的去計(jì)算添加。

      例如,,視頻幀率為25HZ的時(shí)候,,即1秒25幀,每幀的間隔40ms,。按90Khz的視頻頻率來(lái)算的話(huà),,其對(duì)應(yīng)的系統(tǒng)時(shí)鐘數(shù)應(yīng)該是
      1/25*90000 = 3600 個(gè)clk。
     所以當(dāng)分析pes時(shí),,其pts字段的33個(gè)bit算出來(lái)的話(huà),,就是按這個(gè)clk為單位的。相鄰的視頻幀的pts之差值為3600.

     2,、pes -> ts
     h264打包成ts的時(shí)候,,還需要打入pat和pmt。pmt里指定了視頻的類(lèi)型和pid。
     pes打包的時(shí)候,,按ts協(xié)議格式封裝即可,。
     PCR使用和視頻一樣的pid,這里把pts當(dāng)成pcr打進(jìn)ts包,。

二,、處理AAC
     AAC的ts封裝相對(duì)于H264來(lái)說(shuō)就簡(jiǎn)單多了。這次的CMMB采用的是aac的adts格式封裝,,同h264類(lèi)似,,也有其自己的分界符,然后兩分界符之間就是數(shù)據(jù),,分界符為1111 1111 1111,,即FFF。依次讀取AAC的原始文件,,遇到一個(gè)FFF時(shí),,將其后的數(shù)據(jù)連同這個(gè)FFF的頭看成整體,作為負(fù)載封入PES,。同樣的,,每幀都需要打入pts。CMMB流中也附有AAC的pts,,讀取后計(jì)算寫(xiě)入PES即可,。也省了我去根據(jù)采樣率,每幀的樣本率去計(jì)算pts,。

三,、合并H264和AAC的ts流
     做完了上兩步工作,最后一步就更簡(jiǎn)單了,。
     先是打入PAT,、PMT。PMT需要稍微修改,,因?yàn)榧尤肓艘纛l,,所以要在其中指明音頻的類(lèi)型和pid。
     接著就是視頻,、音頻的ts包依次打,。打的時(shí)候稍微注意要判斷下視頻和音頻的pts值,保持同步,。

對(duì)于H264更底層的東西,,就沒(méi)研究下去了。對(duì)于H264的SPS獲取PTS,也沒(méi)整太明白,。還有PCR這方面,,都還不太清楚。后面再找時(shí)間慢慢研究吧~

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多