今天就主要詳解OC下載的流程,從前端如何拿到咱們想要的數據。 前端
DSMCC_Section語法結構: 服務器
在開始下載以前,咱們必須知道在DSMCC標準中,設置Demux過濾Section時Filter的條件,其中有兩個值須要咱們注意,一個是pid,一個是table_id: session
pid:過濾DSI,DII,Module的pid,同一個值,該值從Pmt表中stream_type爲0x0b的descriptor中得到。 spa
Table_id:DSMCC標準規定,DSI,DII的table_id爲0x3B,Module的table_id爲0x3C。 rest
filter從前端每次過濾一個Section數據過來,當咱們拿到section後,咱們須要對前八個字節進行判斷,table_id爲Filter設置下去的table_id.根據Table_id的不一樣,該section後面dsmcc_section_lenght-8長度個字符所表明的含義也不一樣。 ip
dsmccMeassageHeader: it
每個Section都有一個共同的dsmccMeassageHeader,該表以下: io
主要關注字段messageId,transactionId; table
messageId只要攜帶Message的類型: stream
0x1001 downloadInfoRequrest
0x1002 downloadinfoResponse/downloadInfoIndication[DII]
0x1003 downloadDataBlock【DDB】
0x1004 downloadDataResuqest
0x1005 downloadCancel
0x1006 downloadServerInitiate[DSI]
transactionId:這個字段用於保持服務器端和客戶端session是完整性以及錯誤的處理,是個標識。便是標識又是控制信息的版本信息,在DSI和 DII中是標識。Transaction在Data carousel中惟一肯定一個下載的控制信息。當消息發生改變時,transactionId應該不斷的增長。
transactionId由transactionId originator【30-31】和transaction number[0-29]組成,共32位。
•含義豐富的transactionId字段
–用於識別DSI,DII
–用於快速判斷是否版本變化
–用於描述版本信息
–用於描述ID信息
transactionId在OC下載中,它主要指明整個OC數據的根目錄在哪一個DII裏面。
經過messageId咱們就能夠知道目前從filter接收到的section是哪一種消息類型,根據MessageLength就能夠開始去解析 DSI, DII,Module信息。