IPTV支援TS流的方案形成過程

2021-07-22 10:12:20 字數 4019 閱讀 6546

直播:現有的isma方式,流程如下:

音訊採集-->音訊編碼-->rtp打包-->udp組播;

上面是mp4live的工作流程。

直播:mpeg ts流方式,流程如下:

音訊採集-->音訊編碼-->ts打包-->rtp打包-->udp組播

上面是ts流的工作流程。

點播:isma方式

點播:ts流方式

現在有如下事情需要做:

1.        2023年9月30日搭建環境,測試darwin伺服器是否支援ts流,測試環境如下:

vlc-->darwin-->vlc    

a. 我們分成兩步達到這個目標:首先試驗vlc1-->vlc2

vlc流化的配置,可以通過圖形介面配置,也可以通過命令列控制。

整個過程走的通,抓包證明中間確實是ts流。

當然,也存在問題,就是圖形會出現馬賽克,猜測是因為b幀的pts,和dts有問題。

還有乙個問題是:不能生成sdp檔案,因為我們要實現第二步。

b.  vlc-->darwin-->vlc 

darwin伺服器需要乙個sdp檔案來描述**源。

2.         問題:vlc在流化過程中,不能生成sdp檔案,需要解決這個問題?

錯誤的寫法:

vlc -vvv --extraintf=logger rtsp: :sout=#duplicate}

正確的寫法:

vlc -vvv --extraintf=logger rtsp: :sout=#duplicate}

3.         問題:vlc在流化過程中,影象質量很差,定位問題?

檢視日誌,發現:

mux_ts warning: packet with too strange dts (dts=23955930833,old=23956030944,pcr=23956030944)

mux_ts warning: packet with too strange dts (dts=23956097687,old=23956197798,pcr=23956197798)

mux_ts warning: packet with too strange dts (dts=23956231175,old=23956364663,pcr=23956364663)

mux_ts warning: packet with too strange dts (dts=23956398030,old=23956531518,pcr=23956531518)

mux_ts warning: packet with too strange dts (dts=23956564885,old=23956698373,pcr=23956698373)

mux_ts warning: packet with too strange dts (dts=23956731739,old=23956831861,pcr=23956831861)

mux_ts warning: packet with too strange dts (dts=23956898593,old=23956998715,pcr=23956998715)

mux_ts warning: packet with too strange dts (dts=23956278439,old=23957011060,pcr=23956931970)

mux_ts warning: packet with too strange dts (dts=23957044802,old=23957132191,pcr=23957132191)

問題如何解決,現在還不知道。 

而且,使用圖形介面配置串流的時候,影象有馬賽克。可能有問題。

4.         直播的方案:

a)         如果解決了問題3,那麼直播流化ts,可以通過架設方案完成;

b)        如果不能解決問題3,那麼直播流化ts,需要開發方案;可以考慮在mp4live中間加ts流化的**。

建議採用方案b,因為我們要改寫pid等一些資訊,需要符合聯通的要求,這些是無法通過配置vlc來解決的。 

5.         點播檔案的方案:

a)         mp4檔案轉化為ts檔案,然後看darwin是否能夠讀取並流化;

b)        mp4檔案給darwin,darwin讀取,然後轉為ts流,流化;

經過試驗證實:darwin伺服器不支援流化ts型別。在rtsp命令中describe階段,返回514錯誤碼:unsupported media type.

request: describe rtsp: rtsp/1.0/r/n

method: describe

url: rtsp:

response: rtsp/1.0 415 unsupported media type/r/n

status: 415

那麼現在的方案有如下兩個選擇:

a)         讀mp4,出ts流;

b)        讀ts檔案,出ts流;

6.         研究ts流的開源**

a)         mpeg4ip中的mpeg2t;

提取ts流的。

b)        vlc中的mux_ts;

c)        live555中有沒有可供借鑑的?

testmpeg2transportstreamer.cpp

d)        libtsmux,乙個開源的c庫

e)         mp4box,gpac。

mp4fileàts file, or rtp, or udp.

f)         tstools

esmerge.c 

7.         直播ts流方案

音訊採集-->音訊編碼-->ts打包-->rtp打包-->udp組播

8.         點播ts流方案

darwin伺服器讀取ts檔案,打包成為rtp資料,傳送出去。 

9.         mp4檔案轉換為ts檔案

vlc -vvv --extraintf=logger d:/11.mp4 :sout=#std

10.         mp4檔案轉換為ts流 

vlc -vvv --extraintf=logger d:/11.mp4:sout=#duplicate,dst=display}

11.     做乙個測試程式

在《iptv支援ts流的開發過程》中,會描述這個測試程式是如何開發的。

可以使用mpeg4ip中的庫,引入標頭檔案mp4.h,連線libmp4v2.so;寫法可以參考mp4creator。

audio_play_time = audio_timestamp*1000/audio_timescale;

video_play_time = video_timestamp*1000/video_timescale;

2. 這時候取到的是es流,es打包成為pes包,pes打包成為ts包。其實,我們漏下了一點東西要說,es在打包成為pes之前,需要做一點事情:

音訊es,每一幀的音訊,都需要加入audiostreamheader,每一種編碼格式,比如aac,都需要單獨取得。

a. h.264,定義個uchar h264_delimeter[4]=;

第乙個是h264_delimeter[4],0x09, 0xe0;

第二個是h264_delimeter[4],seqheader;

第三個是h264_delimeter[4],pictheader;

b. mp4, mp2, mp1,mp4gettrackesconfiguration;

c. aac音訊,放置7個位元組的adts固定頭資訊;其中要設定每一幀音訊資料的長度,所以每一幀都需要改變。

3. es-->pes

需要構造pes頭,需要打標pts和dts;

4. pes-->ts

需要構造ts頭,需要打標pcr,需要對pes分成小於188的幾塊,長度通常是184,或者184-8;8個位元組是pcr資訊。

當然,對整個ts流來說,需要乙個pat表,告訴我們有幾路節目program;

還需要幾個pmt表,pmt表告訴我們,這個節目裡面包含的幾個es流。

TS流的解碼過程

以備忘 ts 流解碼過程 1.獲取ts中的pat 2.獲取ts中的pmt 6.拼接好的pes包的包頭會有 pts,dts資訊,去掉pes的header就是 es。8.i,b,b,p 資訊是在es中的。pcr pcr是ts裡面的,即ts packet的header裡面可能會有,他用來指定所期望的該ts...

TS流中的音訊EB size

音訊的eb size對於不同的編碼型別有不同的固定值 define tsmux mp2 es buffer size 3584 define tsmux ac3 es buffer size 3584 define tsmux eac3 es buffer size 5184 define tsmu...

IP流 TS流 PS流之間的關係及區別

什麼是ts流 我們在網路上通訊都是通過傳送或接受資料報來實現的。i p資料報有首部和資料兩部分組成的,首部的前一部分是固定長度20位元組,是所有ip資料報必須具有的。首部包括 總長度 標識 mf df 片偏移。ts流 和 ps流 是經過mpeg 2系統壓縮處理後的兩種復合資訊流。據傳輸 的質量不同,...