• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      TS流復(fù)用器中EPG信息處理的優(yōu)化*

      2010-03-14 09:04:56于鴻洋
      電視技術(shù) 2010年12期
      關(guān)鍵詞:復(fù)用器鏈表分段

      葛 倩,于鴻洋,張 萍

      (電子科技大學(xué) 電子工程學(xué)院,四川 成都 611731)

      1 引言

      在數(shù)字電視廣播系統(tǒng)中,在TS(Transport Stream)傳輸流最終被送到信道設(shè)備進(jìn)行信道發(fā)送之前,TS流復(fù)用器將不同來(lái)源的傳輸流合并為一個(gè)新的傳輸流。電子節(jié)目指南(Electronic Program Guide,EPG)是指在符合MPEG-2(13818-1)的TS傳輸流中插入DVB標(biāo)準(zhǔn)定義的業(yè)務(wù)信息(Service Information,SI),是一種收視導(dǎo)航工具,是交互電視的關(guān)鍵技術(shù)。EPG協(xié)助觀看電視節(jié)目的用戶選擇節(jié)目,用戶通過(guò)EPG可以得到節(jié)目的相關(guān)信息。

      復(fù)用時(shí),EPG等其他服務(wù)信息要通過(guò)復(fù)用器插入到TS流中。由于輸入到復(fù)用器的各TS流的EPG信息可能不完整或需要在原TS流中插播節(jié)目,所以復(fù)用之前需對(duì)各個(gè)待復(fù)用TS流的EPG信息進(jìn)行添加或修改。同時(shí),復(fù)用器會(huì)對(duì)節(jié)目號(hào)等信息重新賦值,攜帶EPG信息的各個(gè)表也要根據(jù)復(fù)用器的修改情況進(jìn)行相應(yīng)的修改和合并。EPG的處理在TS復(fù)用中非常重要,筆者介紹了一種TS流復(fù)用器中EPG信息相關(guān)表的處理方法。

      EPG信息由兩部分信息組成:基本EPG信息和擴(kuò)展EPG信息?;綞PG信息是指完全可以用《數(shù)字廣播業(yè)務(wù)信息規(guī)范(GY/Z174-2001)》中的網(wǎng)絡(luò)信息表(NIT)、業(yè)務(wù)群關(guān)聯(lián)表(BAT)(可選)、業(yè)務(wù)描述表(SDT)和事件信息表(EIT)進(jìn)行描述的EPG信息[1-3]。筆者主要介紹基本EPG的處理,包括對(duì)NIT,SDT和EIT的處理,BAT的處理方式與其他表相似。

      2 EPG處理系統(tǒng)框圖

      筆者設(shè)計(jì)基于IP多路輸入、多路復(fù)用輸出的TS軟件復(fù)用器中的EPG處理部分,復(fù)用器與設(shè)計(jì)均在Linux系統(tǒng)下實(shí)現(xiàn)。整個(gè)設(shè)計(jì)主要可分為EPG獲取、EPG數(shù)據(jù)存儲(chǔ)編輯、EPG發(fā)生等模塊,系統(tǒng)框圖如圖1所示。

      圖1 系統(tǒng)框圖

      EPG獲取模塊主要完成對(duì)EPG信息的接收提取與分析。之后由EPG數(shù)據(jù)存儲(chǔ)編輯模塊將得到的信息存入數(shù)據(jù)庫(kù)MySQL,并由用戶進(jìn)行導(dǎo)入或編輯操作,對(duì)EPG進(jìn)行相應(yīng)的添加或修改,最后EPG發(fā)生模塊根據(jù)數(shù)據(jù)庫(kù)中存儲(chǔ)的新EPG信息和復(fù)用信息,產(chǎn)生新的EPG數(shù)據(jù),按一定的時(shí)間間隔插入到輸出TS流中。筆者將通過(guò)對(duì)各模塊的實(shí)現(xiàn)方法介紹來(lái)論述TS流復(fù)用器中EPG信息處理的實(shí)現(xiàn)。

      3 模塊實(shí)現(xiàn)方法

      3.1 EPG獲取模塊優(yōu)化及實(shí)現(xiàn)

      3.1.1 EPG獲取優(yōu)化

      為了提高EPG的接收效率,對(duì)EPG獲取的兩個(gè)處理過(guò)程進(jìn)行了優(yōu)化,即各表section接收和接收信息完整性的判斷。

      1)section接收優(yōu)化

      部分機(jī)頂盒由于處理器主頻和存儲(chǔ)空間的限制,在接收PSI/SI表的section時(shí)采用PAT→NIT→SDT→EIT順序接收的方法,即在一個(gè)時(shí)間段內(nèi)只對(duì)一種PSI/SI表進(jìn)行接收。會(huì)出現(xiàn)接收到SDT或EIT的包時(shí),因?yàn)镻AT或NIT沒(méi)有接收完成或者丟包而放棄接收分析的情況,當(dāng)需要接收這些表時(shí)又要等到下一個(gè)發(fā)送周期,這樣接收完所有的表可能需要幾個(gè)發(fā)送周期,接收效率較低。由于系統(tǒng)在PC上實(shí)現(xiàn),存儲(chǔ)空間和處理器主頻的限制較小,故對(duì)接收方式進(jìn)行了優(yōu)化,采用并行接收,即先接收PAT,之后并行接收NIT,SDT和EIT,可以節(jié)省時(shí)間。并行接收主要體現(xiàn)在section的接收處理上,接收步驟為:

      (1) 過(guò)濾 PID=0x000的包,分析PAT,獲得 NIT的PID、該流的節(jié)目數(shù)量以及所有節(jié)目的節(jié)目號(hào),存入節(jié)目數(shù)據(jù)鏈表。由于PAT發(fā)送周期較短(為40ms),這一步驟可在很短的時(shí)間內(nèi)完成。

      (2)對(duì)其余3種表的section進(jìn)行并行接收。程序根據(jù)TS包的PID過(guò)濾出需要的包,分別送入NIT,SDT和EIT各自的接收通道中,每個(gè)通道利用獨(dú)立的數(shù)據(jù)結(jié)構(gòu)來(lái)記錄section接收情況信息和獨(dú)立的存儲(chǔ)空間,存儲(chǔ)接收到的section內(nèi)容,使得各通道互不干擾。

      (3)section進(jìn)入各自的接收通道后,先判斷是否丟包,之后對(duì)TS包解包,將section內(nèi)容存入緩沖,根據(jù)section_length來(lái)判斷一個(gè)section是否接收完成,如果完成,按照各表的結(jié)構(gòu),分析該section,存儲(chǔ)相關(guān)信息,最后判斷接收信息的完整性,決定是否繼續(xù)接收。

      2)判斷信息完整性優(yōu)化

      在判斷接收信息的完整性時(shí),不采用以往一些設(shè)計(jì)中根據(jù)last_section_number來(lái)判斷的方法,這要求section以section_number的順序依次接收,若開(kāi)始接收時(shí)錯(cuò)過(guò)section_number為0的包或者丟包,則導(dǎo)致之后section_number的包需等到下一發(fā)送周期才能接收,降低了接收效率,PSI/SI發(fā)送周期較長(zhǎng)或者網(wǎng)絡(luò)質(zhì)量較差時(shí)影響尤為嚴(yán)重。

      筆者采用一種改進(jìn)的接收判斷方法,可以解決這個(gè)問(wèn)題,即利用段存在標(biāo)志數(shù)組來(lái)判斷信息完整性,不要求按照section_number順序接收。具體實(shí)現(xiàn)為:程序首次收到該表section時(shí),通過(guò)last_section_number(EIT還需要segment_last_section_number和last_table_id以及本TS流中的節(jié)目數(shù)和節(jié)目的program_number)計(jì)算出該表的section總數(shù)和所有section_number,以此建立section存在標(biāo)志數(shù)組。以SDT為例,若得到last_section_number為1,則可以計(jì)算出該流SDT分段有2個(gè)section,section_number分別為0和1,即可建立標(biāo)志數(shù)組,把0和1的位置置位為存在。之后每接收完一個(gè)section,把對(duì)應(yīng)標(biāo)志數(shù)組中的該section標(biāo)志置位為已接收,并檢查所有的存在標(biāo)志,若有存在標(biāo)志未置位為已接收,則繼續(xù)接收該表,否則該表接收完成,停止接收。

      3)優(yōu)化結(jié)果

      優(yōu)化以存儲(chǔ)空間為代價(jià)來(lái)提高接收效率,適合于在存儲(chǔ)空間限制較小的PC上實(shí)現(xiàn)。若不經(jīng)優(yōu)化,系統(tǒng)可能需要接收端接收到數(shù)次完整的信息才能完成接收,而優(yōu)化之后的系統(tǒng)接收端只須收到一次完整的信息,就可以完成接收,減小了PSI/SI發(fā)送周期和丟包的影響。

      3.1.2 表分析處理流程圖

      系統(tǒng)對(duì)各表采用介紹的優(yōu)化方法進(jìn)行并行接收,完成EPG信息的分析存儲(chǔ),接收框圖如圖2所示。

      3.2 EPG數(shù)據(jù)存儲(chǔ)和編輯

      EPG相關(guān)表格接收完畢后,形成數(shù)據(jù)鏈表,結(jié)構(gòu)如圖3所示。

      這樣的結(jié)構(gòu)可以通過(guò)輸入TS流標(biāo)號(hào)和節(jié)目號(hào)迅速定位節(jié)目信息,使之在鏈表中的添加刪除靈活簡(jiǎn)便,也便于之后的表生成模塊的處理。

      選用的數(shù)據(jù)庫(kù)為MySQL。MySQL是一個(gè)開(kāi)放源碼的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),支持Linux操作系統(tǒng),CPU利用率高,查詢速度快,還提供多種語(yǔ)言支持,滿足EPG信息的多語(yǔ)言要求?;谶@些特性,MySQL可以滿足設(shè)計(jì)中對(duì)EPG處理的要求。

      所有的EPG信息存入創(chuàng)建的database中,程序根據(jù)輸入TS流的EPG建立table:SDT,EIT_PF和EIT_schedule_stream.No_prog_program.No,存入相關(guān)信息。

      用戶通過(guò)EPG編輯器對(duì)EPG信息進(jìn)行編輯。其功能模塊包括網(wǎng)絡(luò)配置和事件編輯(包括節(jié)目編輯和節(jié)目單導(dǎo)入導(dǎo)出),完成后,將修改的信息導(dǎo)入數(shù)據(jù)庫(kù)。

      圖3 EPG信息數(shù)據(jù)鏈表

      3.3 EPG數(shù)據(jù)打包發(fā)送

      3.3.1 各表section生成

      為了便于表的生成,為各輸出流建立一個(gè)數(shù)據(jù)結(jié)構(gòu)數(shù)組mult_infomation,存儲(chǔ)該流的復(fù)用信息,其中包含了stream_id(輸入 TS 流標(biāo)號(hào)),origin_program_number(該節(jié)目的原始節(jié)目號(hào)),new_program_number(在復(fù)用流中的節(jié)目號(hào))等信息,數(shù)組的項(xiàng)數(shù)為該復(fù)用流中所包含的節(jié)目數(shù),通過(guò)該數(shù)據(jù)結(jié)構(gòu)可以方便地得到節(jié)目被復(fù)用到輸出流中的位置。

      NIT,SDT和EIT在TS流中的獨(dú)立性各不相同,所以section生成方式稍有不同。NIT對(duì)網(wǎng)絡(luò)信息進(jìn)行描述,在同一網(wǎng)絡(luò)中,所有流的NIT是相同的,只須生成一種NIT section之后進(jìn)行打包,作為同一網(wǎng)絡(luò)中所有流的NIT包,對(duì)于SDT,每個(gè)流的SDT section各不相同,需對(duì)各輸出流生成各自的SDT section,之后再打包,EIT是以節(jié)目為單位獨(dú)立的,即相同節(jié)目的EIT section除了service_id,其余部分在各TS流中都是相同的,所以先對(duì)各輸入TS流的各節(jié)目生成EIT section,之后輸出流根據(jù)mult_infomation從這些EIT section中選出需要的section,修改service_id,進(jìn)行打包。

      生成section的信息從數(shù)據(jù)庫(kù)中讀取,之后根據(jù)各表的結(jié)構(gòu)建立section,完成后計(jì)算CRC并插入。輸出TS流還需帶有同一網(wǎng)絡(luò)中其他TS流的SDT和EIT信息,傳輸這些信息需修改 table_id(SDT改為 0x4F,EIT在原table_id上加上0x10)和重新計(jì)算CRC。

      3.3.2 生成各表的待發(fā)送TS包鏈表

      SDT和EIT作為其他流信息發(fā)送時(shí)只須改變table_id和CRC,所以同一網(wǎng)絡(luò)TS流中的SDT和EIT除table_id和CRC部分不同之外,其余部分完全相同,同時(shí),一個(gè)網(wǎng)絡(luò)中所有流共用一個(gè)NIT。由于設(shè)計(jì)的復(fù)用器輸出流均在同一網(wǎng)絡(luò)中,故各表可分別僅用一個(gè)TS包鏈表和相應(yīng)的修改信息構(gòu)成網(wǎng)絡(luò)中所有輸出流的待發(fā)送包。

      為了建立鏈表,須對(duì)生成的section打包并存儲(chǔ)到TS包數(shù)據(jù)結(jié)構(gòu)中,該數(shù)據(jù)結(jié)構(gòu)除了有TS包的完整內(nèi)容之外,還帶有output_id(輸出流編號(hào))和需要替換的內(nèi)容(table_id和CRC)。建立好的鏈表如圖4所示(以SDT為例),其中NEXT_SDT_USE[output_id]為指向TS包數(shù)據(jù)結(jié)構(gòu)的指針,每個(gè)輸出流均有1個(gè),用于在發(fā)送TS包時(shí)指示當(dāng)前應(yīng)發(fā)送的包,header_n和rear_n為指向輸出流n的本流SDT包鏈表的頭和尾。

      圖4 TS包鏈表結(jié)構(gòu)

      3.3.3 各輸出流EPG包發(fā)送

      對(duì)于每一個(gè)輸出流,需發(fā)送的表為:網(wǎng)絡(luò)NIT、流SDT和EIT、同一網(wǎng)絡(luò)中其他流SDT和EIT分段。DVB關(guān)于SI表的傳輸間隔要求如表1[4]所示。

      表1 DVB關(guān)于SI表的傳輸間隔

      以SDT發(fā)送為例,每隔2 s發(fā)送一次本流SDT分段,每隔10 s發(fā)送一次本流和其他流SDT分段,每發(fā)送一個(gè)包,NEXT_SDT_USE[output_id]就指向下一個(gè)包,當(dāng)發(fā)現(xiàn)發(fā)送完成標(biāo)志(僅發(fā)送當(dāng)前流分段時(shí)標(biāo)志為rear_n,發(fā)送所有分段時(shí)標(biāo)志為header_n)即停止發(fā)送,等待下一發(fā)送周期,EIT和NIT的發(fā)送與此類似。當(dāng)TS包作為其他流分段 (根據(jù)結(jié)構(gòu)體中output_id和當(dāng)前輸出流id判斷)發(fā)送時(shí),須根據(jù)結(jié)構(gòu)體中的修改信息進(jìn)行修改。

      3.3.4 EPG信息更新

      EPG更新可以采用兩種方式:僅允許用戶手動(dòng)更新和根據(jù)輸入TS流更新。更新方式的選擇以輸入TS流為單位。

      1)用戶手動(dòng)更新。在復(fù)用過(guò)程中,用戶通過(guò)EPG編輯器更新EPG信息,導(dǎo)入數(shù)據(jù)庫(kù),程序根據(jù)數(shù)據(jù)庫(kù)中的信息重新生成表,并使表的version_number加1,完成更新。

      2)根據(jù)輸入TS流更新。開(kāi)始復(fù)用后,程序監(jiān)視各種表的version_number,若發(fā)現(xiàn)版本號(hào)變化,進(jìn)行相關(guān)表的重新接收存儲(chǔ),按照復(fù)用信息mult_infomation確定應(yīng)該重建哪些表,同樣,使表的version_number加1。更新原則為[5]:

      (1)若NIT變更,重新建立整個(gè)網(wǎng)絡(luò)的傳輸流和業(yè)務(wù)信息。

      (2)若SDT變更,重新建立對(duì)應(yīng)傳輸流里的業(yè)務(wù)信息。

      (3)若EIT變更,不改變整個(gè)網(wǎng)絡(luò)的傳輸流和業(yè)務(wù)信息,只改變相應(yīng)的事件信息。

      4 實(shí)驗(yàn)結(jié)果與分析

      TS流復(fù)用器的EPG處理系統(tǒng)工作于Linux系統(tǒng)下,完成復(fù)用器中EPG信息的添加、刪除等處理,進(jìn)行測(cè)試,結(jié)果與分析如表2所示。

      表2 系統(tǒng)EPG接收效率測(cè)試結(jié)果

      測(cè)試中的丟包由隨機(jī)刪去發(fā)送流PSI/SI包來(lái)模擬,丟包程度為能夠保證接收端在1min內(nèi)收到一次完整的信息,接收超時(shí)時(shí)間設(shè)為1 min,若在網(wǎng)絡(luò)環(huán)境較差的情況下,可適當(dāng)增加接收超時(shí)時(shí)間,以保證獲取完整的信息。在不丟包的情況下,理論上,對(duì)于TS1和TS2,優(yōu)化后的接收方式需要的最長(zhǎng)時(shí)間分別為5 s和30 s。由表2的測(cè)試結(jié)果可以看到,優(yōu)化后的接收方式所用的時(shí)間小于未優(yōu)化的接收方式,并且丟包對(duì)優(yōu)化后的接收方式影響較小,對(duì)于沒(méi)有優(yōu)化的接收方式,丟包的影響在發(fā)送周期較長(zhǎng)的分段時(shí)尤為嚴(yán)重。

      之后對(duì)EPG信息通過(guò)EPG編輯器進(jìn)行修改,輸出流經(jīng)EPG分析軟件分析,各表均正常。EPG編輯器界面如圖5所示。

      圖6和圖7分別為輸入輸出流的EPG在數(shù)據(jù)庫(kù)中的情況 (系統(tǒng)對(duì)復(fù)用輸出流再次進(jìn)行接收可分析得到輸出流的EPG情況),右半部分為數(shù)據(jù)庫(kù)中的table,左半部分為SDT內(nèi)容。輸入為2個(gè)TS流,第1個(gè)流沒(méi)有EPG信息,SDT中的provide_name和program_name默認(rèn)為節(jié)目號(hào)。經(jīng)EPG編輯后輸出,輸出為1個(gè)流,第1個(gè)流選取節(jié)目號(hào)為ec1的流,第2個(gè)流選取所有節(jié)目,可以看到,節(jié)目號(hào)均重新賦值,并且對(duì)ec1節(jié)目的SDT進(jìn)行了添加。

      [1]王大鵬.電子節(jié)目指南(EPG)在機(jī)頂盒中的實(shí)現(xiàn)[C]//國(guó)際有線電視技術(shù)研討會(huì)論文集,2003.杭州:中國(guó)廣播電視協(xié)會(huì)技術(shù)工作委員會(huì),2003:406-410.

      [2]ISO/IEC 13818-1,Third edition 2007.10 information technologygeneric coding ofmoving pictures and associated audio information:system[S].2007.

      [3]方濤.數(shù)字電視業(yè)務(wù)信息及其編碼[M].北京:國(guó)防工業(yè)出版社,2003.

      [4]Guidelines on implementation and usage of service information[EB/OL].[2010-04-13].http://www.bjpace.com.cn/data/tec/tec-DVB/DVB-20BlueBooks-20Standards/Specifications-20and-20Standards/multiplexing/dvb-si/a005r1.pdf.

      [5]陳德林.EPG前端SI發(fā)表和機(jī)頂盒終端收表策略[J].廣播與電視技術(shù),2005(8):99-101.

      猜你喜歡
      復(fù)用器鏈表分段
      一類連續(xù)和不連續(xù)分段線性系統(tǒng)的周期解研究
      基于二進(jìn)制鏈表的粗糙集屬性約簡(jiǎn)
      跟麥咭學(xué)編程
      分段計(jì)算時(shí)間
      基于分束器與雙向型的光分插復(fù)用器分析研究
      基于鏈表多分支路徑樹(shù)的云存儲(chǔ)數(shù)據(jù)完整性驗(yàn)證機(jī)制
      3米2分段大力士“大”在哪兒?
      太空探索(2016年9期)2016-07-12 10:00:04
      復(fù)用器與遙控設(shè)備兼容問(wèn)題探討及解決方案
      鏈表方式集中器抄表的設(shè)計(jì)
      關(guān)于年齡分段的描述
      安乡县| 绥德县| 钟祥市| 荆门市| 山丹县| 社会| 丰台区| 宣威市| 泰兴市| 洪江市| 林芝县| 镇原县| 武穴市| 烟台市| 大石桥市| 长沙县| 通道| 象州县| 来宾市| 丰都县| 武隆县| 临汾市| 沙雅县| 来凤县| 湖北省| 田东县| 鹤庆县| 旌德县| 绥芬河市| 通州区| 娄烦县| 东莞市| 依安县| 揭西县| 桦甸市| 界首市| 玉门市| 廊坊市| 华池县| 丹阳市| 克什克腾旗|