潘明照 賈大偉
(作者單位:平度市融媒體中心)
為了實(shí)現(xiàn)在突發(fā)公共事件中盡快發(fā)布群眾所需信息,提升政府在處理突發(fā)性危機(jī)事件中的指揮調(diào)度能力,中國(guó)共產(chǎn)黨的十七屆六中全會(huì)就提出建立統(tǒng)一聯(lián)動(dòng)、安全可靠的國(guó)家應(yīng)急廣播體系,并致力于推動(dòng)該體系的建設(shè)。隨著數(shù)字電視技術(shù)、計(jì)算機(jī)技術(shù)在廣播電視行業(yè)的普及和推廣,利用數(shù)字電視廣播業(yè)務(wù)發(fā)布應(yīng)急信息成為應(yīng)急廣播體系建設(shè)的重要內(nèi)容之一,引起相關(guān)領(lǐng)域?qū)<遗c學(xué)者的廣泛研究[1-2],如使用數(shù)字廣播應(yīng)急預(yù)警系統(tǒng)(DVB-EWS)等。進(jìn)入數(shù)字時(shí)代,通過(guò)數(shù)字電視開(kāi)展增值業(yè)務(wù)成為可能。
由于數(shù)字壓縮技術(shù)的使用,數(shù)字電視可以在一個(gè)原模擬電視頻道中播出6~8套高質(zhì)量的標(biāo)清電視節(jié)目(或者2套左右的高清電視節(jié)目),隨著傳輸節(jié)目套數(shù)的增加,用戶如何在眾多電視節(jié)目中快速找到想要觀看的電視節(jié)目就成為一個(gè)問(wèn)題。為幫助用戶了解相關(guān)的節(jié)目信息,DVB-C(有線數(shù)字視頻廣播)制定了相關(guān)的電子節(jié)目指南(Electrical Program Guide, EPG),即一種電視節(jié)目信息導(dǎo)航系統(tǒng),我國(guó)也制定了相應(yīng)的EPG標(biāo)準(zhǔn)[3]。通過(guò)EPG,用戶可以了解待播或正在播出節(jié)目的相關(guān)信息,包括節(jié)目名稱、時(shí)間、內(nèi)容介紹等。EPG的播發(fā)需要在節(jié)目播出前端將符合數(shù)字視頻廣播(Digital Video Broadcasting, DVB)標(biāo)準(zhǔn)的業(yè)務(wù)信息(Service Information, SI)插入傳送流(Transport Stream, TS)中。SI不僅攜帶了EPG所需的全部數(shù)據(jù),還規(guī)定了一些可以由用戶定義的結(jié)構(gòu)。通過(guò)這些結(jié)構(gòu),就可以開(kāi)發(fā)一些基于SI的增值業(yè)務(wù)。本文設(shè)計(jì)的應(yīng)急信息廣播系統(tǒng)就是一個(gè)基于SI的自定義結(jié)構(gòu)開(kāi)發(fā)的業(yè)務(wù)信息系統(tǒng)。
數(shù)字電視應(yīng)急信息廣播系統(tǒng)包括信息編輯、信息發(fā)送和信息接收三個(gè)部分。信息編輯指信息編輯工作站對(duì)各類應(yīng)急信息進(jìn)行編輯制作,并將編輯制作好的信息保存到數(shù)據(jù)庫(kù)服務(wù)器中。信息發(fā)送是指信息播發(fā)服務(wù)器將編輯好的各種(應(yīng)急)信息從數(shù)據(jù)庫(kù)服務(wù)器中取出,并按照SI的自定義結(jié)構(gòu)的要求進(jìn)行打包,插入數(shù)字電視的播出碼流中,經(jīng)復(fù)用調(diào)制后送到數(shù)字發(fā)射機(jī)播出或者送入有線電視系統(tǒng)進(jìn)行播出。信息接收是指數(shù)字電視機(jī)頂盒從解碼后的TS流中取出相應(yīng)的(應(yīng)急)信息,在用戶的電視機(jī)上進(jìn)行顯示、提醒。本文內(nèi)容主要針對(duì)數(shù)字電視應(yīng)急信息廣播系統(tǒng)的信息發(fā)送端展開(kāi)。
發(fā)送端的任務(wù)是把需要播發(fā)的各種信息按順序以一定的碼率進(jìn)行打包,然后發(fā)送出去。信息播發(fā)服務(wù)器能夠定時(shí)查看數(shù)據(jù)庫(kù)服務(wù)器要發(fā)送的信息,并將這些信息打包,借助碼流播發(fā)卡輸出,經(jīng)異步串行接口(Asynchronous Serial Interface, ASI)智能切換器(冗余設(shè)計(jì),防止某臺(tái)信息播發(fā)服務(wù)器出現(xiàn)故障)后選擇最優(yōu)一路進(jìn)入碼流分配器,將打包的碼流分配,然后送到要插入信息的復(fù)用器。各復(fù)用器從打包的碼流中取出本復(fù)用器要插入的信息,與視音頻節(jié)目等其他業(yè)務(wù)信息進(jìn)行復(fù)用,形成復(fù)用的碼流,進(jìn)入加擾調(diào)制等后續(xù)處理部分。其基本原理如圖1所示。
圖1 數(shù)字電視應(yīng)急信息廣播系統(tǒng)發(fā)送端基本原理
進(jìn)行發(fā)送端設(shè)計(jì)時(shí),首先要確定需要發(fā)送的信息內(nèi)容,明確這些信息在終端如何顯示,并規(guī)劃好這些信息是在全頻點(diǎn)發(fā)送還是只在某些頻點(diǎn)發(fā)送。確定了要發(fā)送的信息和所在的頻點(diǎn)后,還需確定要發(fā)送的各類信息的碼率。(有線)數(shù)字電視一般采用正交振幅調(diào)制(Quadrature Amplitude Modulation, QAM),分為16QAM、64QAM、256QAM等多種調(diào)制方式,數(shù)字越大,頻帶利用率越高,但抗干擾能力也隨之降低。不同的QAM調(diào)制方式能夠傳輸?shù)拇a率是不同的,如64QAM的有效數(shù)據(jù)傳輸速率大約是38 Mb/s。除去音視頻節(jié)目和其他業(yè)務(wù)占用的碼率,剩余的才是可用于應(yīng)急信息發(fā)布的碼率。如果超過(guò)這個(gè)碼率,就會(huì)出現(xiàn)丟包現(xiàn)象,造成音視頻節(jié)目的卡頓。為不影響節(jié)目的正常播出,碼率應(yīng)小于該值,并留有一定余量。
確定好各類信息的碼率,就可以進(jìn)行打包播發(fā)了。打好包的數(shù)據(jù)的發(fā)送比較簡(jiǎn)單,使用無(wú)窮循環(huán)就可以實(shí)現(xiàn)連續(xù)不斷地發(fā)送數(shù)據(jù)。但是,各類信息的播出碼率是不同的,在打包各類信息時(shí)的數(shù)據(jù)量也是不一樣的,因而打包過(guò)程比較復(fù)雜。
應(yīng)急信息既可以是文字形式也可以是圖片形式,甚至可以是音頻形式或視音頻形式。本文設(shè)計(jì)的應(yīng)急信息廣播系統(tǒng)可以在數(shù)字電視顯示終端上通過(guò)各種方式顯示各種等級(jí)的應(yīng)急信息。當(dāng)應(yīng)急信息等級(jí)較高時(shí),可在顯示畫(huà)面的同時(shí)播出聲音信號(hào),甚至可以強(qiáng)制切換到應(yīng)急頻道進(jìn)行信息播發(fā)。應(yīng)急信息的播發(fā)途徑分為以下幾種:
(1)開(kāi)機(jī)畫(huà)面。這是機(jī)頂盒加電后顯示的第一幅畫(huà)面。在機(jī)頂盒加電啟動(dòng)過(guò)程中需要一定的時(shí)間,可以利用這段時(shí)間的開(kāi)機(jī)畫(huà)面進(jìn)行應(yīng)急信息的播發(fā)。
(2)EPG搭載。在顯示主菜單、頻道列表、頻道導(dǎo)航條時(shí),利用空余版面加載或疊加顯示要播發(fā)的應(yīng)急信息。此外,節(jié)目切換時(shí)一般會(huì)顯示換臺(tái)后節(jié)目的正播和待播信息,也可以同時(shí)加載要播發(fā)的應(yīng)急信息。
(3)音量調(diào)整。利用調(diào)整音量時(shí)電視機(jī)上的音量顯示的空余版面顯示應(yīng)急信息。
(4)游動(dòng)字幕。這是應(yīng)急信息播發(fā)最靈活、最有效的一種途徑。比如在播發(fā)各類預(yù)警信息時(shí),如果在每個(gè)頻點(diǎn)都插入應(yīng)急信息,則可以做到顯示全覆蓋,即所有收看電視節(jié)目的用戶不論在收看什么節(jié)目都可以接收得到應(yīng)急信息。
(5)基于特殊業(yè)務(wù)信息加載應(yīng)急信息。比如利用天氣預(yù)報(bào)顯示界面加載應(yīng)急信息,用戶可通過(guò)遙控器按鍵,在查詢天氣預(yù)報(bào)的同時(shí)獲取應(yīng)急信息內(nèi)容。
(6)其他途徑。比如掛角信息發(fā)布,在數(shù)字電視終端畫(huà)面的某角顯示應(yīng)急信息。
為了簡(jiǎn)單實(shí)用,將其做如下簡(jiǎn)化:
播發(fā)游動(dòng)字幕時(shí)停止其他信息的播發(fā)。即游動(dòng)字幕的播發(fā)具有較高的優(yōu)先級(jí),可用于重大應(yīng)急信息的即時(shí)播發(fā)。此外,高級(jí)別的緊急信息可以強(qiáng)制在數(shù)字電視的所有節(jié)目中顯示播出。而其他信息的更新播發(fā)只在每天的一個(gè)固定時(shí)間,比如每天晚上8點(diǎn)重新讀取數(shù)據(jù)庫(kù)服務(wù)器的記錄,將查詢更新后的記錄重新打包播發(fā)。
由于這樣的簡(jiǎn)化,系統(tǒng)需應(yīng)對(duì)正在播發(fā)的信息中存在錯(cuò)誤需要立即更新的情況。針對(duì)這種情況,編輯制作端將更正后的信息編輯好并存入數(shù)據(jù)庫(kù)服務(wù)器后通知發(fā)送端,發(fā)送端接收到此信息后重新讀取數(shù)據(jù)庫(kù)服務(wù)器的記錄,并重新打包播發(fā)。
信息的打包發(fā)布需要按照DVB-C的SI信息的標(biāo)準(zhǔn),并最終打包成188字節(jié)的TS包。其中包含的信息圖片、文字及與本信息相關(guān)的其他結(jié)構(gòu)是其凈負(fù)載。
在DVB-C中,所有的SI/節(jié)目特定信息(Program Specific Information, PSI)都以表的形式進(jìn)行傳輸,表中包含了整個(gè)節(jié)目信息和業(yè)務(wù)信息,這些表在傳輸時(shí),被封裝在大小固定的被稱為段(section)的數(shù)據(jù)塊中。本系統(tǒng)的發(fā)送端采用私有段結(jié)構(gòu)(見(jiàn)圖2),即ISO/IEC 13818-1:2019規(guī)定的私有段結(jié)構(gòu)中將section syntax indicator置為1時(shí)的結(jié)構(gòu)[4],它包括段頭(從table id到last section number)、私有數(shù)據(jù)(N privata data)和一個(gè)32位的循環(huán)冗余校驗(yàn)碼(CRC32)。
圖2 私有段結(jié)構(gòu)示意圖
除了封裝要發(fā)布信息的私有段外,還有一種私有段表,稱為描述符私有段表。本系統(tǒng)設(shè)計(jì)了缺省信息版本號(hào)描述符、天氣預(yù)報(bào)描述符、取消描述符、游動(dòng)字幕屬性描述符等各種描述符。
每一個(gè)具體的信息基本上是以圖片的形式進(jìn)行發(fā)布的。在封裝這種私有段時(shí),需在段頭后加入一個(gè)描述該圖片的相關(guān)描述符,如圖片類型描述符(這個(gè)描述符是必有的)、鏈接描述符(這個(gè)描述符是可選的)等。圖片類型描述符能夠描述該圖片屬于哪個(gè)類型的信息、圖片本身的文件類型(如png、jpg、gif等)信息,以便接收端解碼。在這些描述符之后是該圖片的具體數(shù)據(jù)。
也就是說(shuō),系統(tǒng)發(fā)送端會(huì)將每一個(gè)信息封裝成一個(gè)段或多個(gè)段。對(duì)每一個(gè)段都要計(jì)算其循環(huán)冗余校驗(yàn)碼CRC32。
將各信息封裝到段后,就可以進(jìn)入TS打包環(huán)節(jié)。TS包的大小固定為188字節(jié),TS層分為三個(gè)部分:TSHeader(TS包頭)、Adaptation Field(調(diào)整字段)、Payload(負(fù)載)。其中,包頭結(jié)構(gòu)中的有效凈荷單元開(kāi)始指示為payload_unit_start_indicator,標(biāo)志此TS包中帶有SI數(shù)據(jù)分段的第一個(gè)字節(jié),即這個(gè)包是一個(gè)段的起始包。
在循環(huán)播出時(shí),雖然根據(jù)業(yè)務(wù)信息封裝生成的段是不變的,但是在每次定時(shí)處理時(shí)根據(jù)段生成的TS包卻是不同的,這是因?yàn)門(mén)S包中有連續(xù)計(jì)數(shù)(continuity_conunter)字段。為保證連續(xù)計(jì)數(shù)器的連續(xù),需要在每次播發(fā)時(shí)將生成的TS包的continuity_conunter字段重新修改,以保證continuity_conunter字段的連續(xù)。
也就是說(shuō),打包有兩個(gè)層次:第一個(gè)層次是先把凈負(fù)載封裝成多個(gè)段,第二個(gè)層次是將生成的段打包成一個(gè)個(gè)的TS包。
將所有的業(yè)務(wù)信息都打包成連續(xù)的TS包后,還需要生成一個(gè)具有一定時(shí)間間隔(如0.5 s)的總的數(shù)據(jù)包,按照各業(yè)務(wù)信息設(shè)定的發(fā)送速率,計(jì)算在這個(gè)時(shí)間間隔內(nèi)各業(yè)務(wù)信息需要發(fā)送的TS包的數(shù)目,并按一定順序?qū)⑵洳迦刖彌_區(qū)(TS Buffer)中,利用定時(shí)函數(shù)將此緩沖區(qū)的內(nèi)容通過(guò)播發(fā)卡發(fā)送出去。
制作完成的應(yīng)急信息或者從上級(jí)部門(mén)傳送過(guò)來(lái)的應(yīng)急信息通過(guò)制作端上傳到服務(wù)器的數(shù)據(jù)庫(kù)中,發(fā)送端定時(shí)讀取要播出的應(yīng)急信息。
應(yīng)急廣播信息事關(guān)人民生命財(cái)產(chǎn)的安全,因此必須采取措施保證信息內(nèi)容的真實(shí)性、完整性、權(quán)威性[5]。為保證應(yīng)急信息的安全,需要對(duì)業(yè)務(wù)(應(yīng)急)信息進(jìn)行加密、數(shù)字簽名等處理,實(shí)現(xiàn)應(yīng)急廣播消息和指令的安全。假定這些處理已經(jīng)在編輯制作端完成,發(fā)送端負(fù)責(zé)這些已經(jīng)完成處理的信息的發(fā)送。本系統(tǒng)應(yīng)急信息的存取采用ADO編程方式。通過(guò)數(shù)據(jù)庫(kù),選出要播發(fā)的數(shù)據(jù)記錄,對(duì)每一條這樣的記錄,通過(guò)其組ID找出其組ID此時(shí)對(duì)應(yīng)的版本號(hào)gidvernum,并更新其下一個(gè)數(shù)據(jù)記錄對(duì)應(yīng)的版本號(hào)。再根據(jù)這條記錄的包ID找到對(duì)應(yīng)的連續(xù)記數(shù)(continuity_conunter)信息。有了這些信息就可以生成一個(gè)針對(duì)此記錄的InfoGroupDataRecord對(duì)象。根據(jù)InfoGroupDataRecord中的一個(gè)類InfoContentSectionTable的指針對(duì)象pinfopicture,在類InfoContentSectionTable中封裝各種與段生成相關(guān)的函數(shù)和信息,在makeupsections函數(shù)中將本數(shù)據(jù)記錄的應(yīng)急信息封裝成段。
需注意正確設(shè)置最后一個(gè)段的大小。在生成段時(shí),要設(shè)置段頭信息。如果段表有描述符,則要首先封裝描述符,描述符之后才是含有加密后的業(yè)務(wù)圖片的信息結(jié)構(gòu)數(shù)據(jù)。在每個(gè)段的最后計(jì)算其CRC32。生成段表之后就可以進(jìn)行TS包的打包了。
以一定速率重復(fù)發(fā)送這些信息的基本方法是利用定時(shí)器。只需要注意發(fā)送的速率不要太高使得復(fù)用器的碼率超載,定時(shí)器的精度倒不是特別重要。當(dāng)然作為系統(tǒng)來(lái)說(shuō),應(yīng)盡可能地讓碼率精確一些。對(duì)本文設(shè)計(jì)的系統(tǒng)來(lái)說(shuō),可以考慮使用多媒體定時(shí)器。即用timeSetEvent函數(shù),該函數(shù)可以達(dá)到1 ms的分辨率。
本系統(tǒng)假定游動(dòng)字幕形式的應(yīng)急信息在一個(gè)固定的時(shí)間點(diǎn)(如每晚8∶00)進(jìn)行播發(fā)(不太緊急的應(yīng)急信息的播出,如天氣災(zāi)害預(yù)報(bào)等),需在定時(shí)器的回調(diào)函數(shù)中設(shè)置一個(gè)變量m_loop,在每次調(diào)用時(shí)其值增加1,以此模擬回調(diào)函數(shù)調(diào)用的次數(shù)。通過(guò)監(jiān)視這個(gè)變量,看是否到達(dá)預(yù)定的時(shí)間,到時(shí)間后即啟動(dòng)游動(dòng)信息的播發(fā)。如果沒(méi)有到達(dá)預(yù)定的時(shí)間,則回調(diào)函數(shù)更新將要播發(fā)的數(shù)據(jù)的continuity_conunter字段,并將此數(shù)據(jù)發(fā)至播發(fā)卡播出。
用比較m_loop的次數(shù)來(lái)判斷是否到達(dá)定時(shí)時(shí)間,是因?yàn)槎〞r(shí)間隔是一個(gè)常數(shù)(如0.5 s一次)。通過(guò)當(dāng)前時(shí)間與下次定時(shí)時(shí)間的差就可以知道要循環(huán)多少次能夠到達(dá)下次定時(shí)時(shí)間,該方式可能不太精確,但對(duì)于本文設(shè)計(jì)的系統(tǒng)來(lái)說(shuō)是足夠的,因?yàn)椴惶o急的應(yīng)急信息并不一定需要太精確的定時(shí)播出。
游動(dòng)字幕的播出與其他應(yīng)急信息的播出不同,它不需要一直循環(huán)播出,其在顯示端的游動(dòng)一般只需要兩次即可。也就是說(shuō),發(fā)送端的一條游動(dòng)字幕信息只需播發(fā)2~3次即可(多播發(fā)幾次可以保證接收端軟件能夠完整收到此信息)。在所有游動(dòng)字幕信息播發(fā)完成后就可以重新讀取其他應(yīng)急信息進(jìn)行播發(fā)了。
除上述應(yīng)急信息的播發(fā)外,對(duì)某些緊急消息必須實(shí)現(xiàn)即時(shí)播發(fā)。這意味著對(duì)緊急信息需要立即響應(yīng)。為此,在發(fā)送端和編輯制作端需使用網(wǎng)絡(luò)編程。在編輯制作端將需要即時(shí)播發(fā)的信息編輯好后通知發(fā)送端,發(fā)送端接收到有緊急信息需要播出的消息后,停止當(dāng)前信息的播發(fā),轉(zhuǎn)為播發(fā)此緊急信息。緊急信息既可以設(shè)定播出次數(shù)或到期時(shí)間,也可以設(shè)置為無(wú)窮(即一直播出)。若為一直播出,則需要通過(guò)制作端發(fā)送停止緊急信息播發(fā)的消息以停止此緊急信息的播發(fā)。
調(diào)試是編程開(kāi)發(fā)重要的一個(gè)方面,通過(guò)調(diào)試找出并改正編程錯(cuò)誤是開(kāi)發(fā)人員的一項(xiàng)基本技能。本系統(tǒng)需要通過(guò)網(wǎng)絡(luò)傳輸,因此要注意字節(jié)序問(wèn)題。字節(jié)序錯(cuò)誤,就會(huì)產(chǎn)生錯(cuò)誤的結(jié)果。所以,如果接收到的數(shù)據(jù)有問(wèn)題,就要查看字節(jié)序是否存在問(wèn)題。另外,系統(tǒng)對(duì)每一個(gè)段都要計(jì)算循環(huán)冗余校驗(yàn)碼CRC32,在計(jì)算CRC32時(shí)需注意段長(zhǎng)的計(jì)算問(wèn)題。
除開(kāi)發(fā)環(huán)境提供的調(diào)試手段外,程序開(kāi)發(fā)人員還可以將打包數(shù)據(jù)寫(xiě)入文件進(jìn)行分析,看數(shù)據(jù)是否正確及哪里出了問(wèn)題。同時(shí),還可以寫(xiě)出相應(yīng)的解析程序,對(duì)打包的數(shù)據(jù)進(jìn)行分析。解析程序既可以用于打包數(shù)據(jù)的測(cè)試,也可以直接用于接收端軟件,或者使用接收端的解析軟件對(duì)打包的數(shù)據(jù)進(jìn)行解析,兩者可互相驗(yàn)證。
然而,打包數(shù)據(jù)正確、接收解析正確也并不意味著所有都正常。在測(cè)試調(diào)試過(guò)程中發(fā)現(xiàn),如果每個(gè)PID(Packet ID,包ID)只在有應(yīng)急信息圖片數(shù)據(jù)的時(shí)候才發(fā)送數(shù)據(jù),反之不發(fā)送數(shù)據(jù),則如果某個(gè)PID不存在應(yīng)急信息數(shù)據(jù),在剛沒(méi)有數(shù)據(jù)時(shí),接收到的碼流中其他PID的碼流也會(huì)出現(xiàn)錯(cuò)誤,TS計(jì)數(shù)不連續(xù),即會(huì)出現(xiàn)丟TS包的情況,一般每個(gè)PID會(huì)丟一個(gè)包。出現(xiàn)這種現(xiàn)象的原因沒(méi)有得到解釋,但估計(jì)很大程度上與復(fù)用器有關(guān)。所以讓每個(gè)PID在沒(méi)有數(shù)據(jù)時(shí)發(fā)送缺省的應(yīng)急信息數(shù)據(jù),以免引起丟包。以上是在播出碼流中隨時(shí)添加、刪除應(yīng)急信息時(shí)可能發(fā)生的情況,如果規(guī)定播發(fā)時(shí)不在播出的碼流中添加、刪除應(yīng)急信息則不會(huì)存在上述問(wèn)題。
發(fā)送端軟件是一個(gè)打包程序,它將打包的數(shù)據(jù)通過(guò)播發(fā)卡發(fā)送出去。這是一個(gè)循環(huán)播發(fā)的系統(tǒng),應(yīng)急信息播發(fā)完一遍后從頭繼續(xù)重新播發(fā)。發(fā)送端對(duì)定時(shí)精度要求并不嚴(yán)格,只需注意發(fā)送的速率不要超過(guò)其上限即可。如果某個(gè)頻點(diǎn)的總碼率超過(guò)了上限,則有可能引起該頻點(diǎn)的節(jié)目出現(xiàn)馬賽克的現(xiàn)象。一般說(shuō)來(lái),開(kāi)機(jī)畫(huà)面、節(jié)目指南附加信息等在主頻點(diǎn)播發(fā)時(shí)使用的碼率較大,所以電視系統(tǒng)在主頻點(diǎn)的節(jié)目安排應(yīng)該使其碼流有較大的余量。