許瑩瑩,劉賢華
(重慶郵電大學(xué) 通信與信息工程學(xué)院,重慶 400065)
在世界范圍內(nèi),伴隨著數(shù)字化、網(wǎng)絡(luò)化的廣播電視技術(shù)迅速發(fā)展,各式各樣的電視節(jié)目也應(yīng)運(yùn)而生。同時(shí)與之而來的眾多附加服務(wù),三網(wǎng)融合的網(wǎng)絡(luò)趨勢,也使得建立在高清數(shù)字電視廣播系統(tǒng)上的終端承載體——高清機(jī)頂盒,面臨著用戶更多的需求[1]。其中SI(Service Infor?mation)模塊是高清機(jī)頂盒中最具核心的基本模塊之一,是數(shù)字電視解析數(shù)據(jù)、EPG應(yīng)用功能的基礎(chǔ),并且完成了對PSI/SI節(jié)目特定信息的接收、解析、存儲(chǔ)、維護(hù)和檢索等功能的實(shí)現(xiàn)。因此根據(jù)當(dāng)前主流嵌入式機(jī)頂盒的設(shè)計(jì)向模塊化及層次化方向發(fā)展,對SI模塊進(jìn)行結(jié)構(gòu)優(yōu)化設(shè)計(jì),不僅能夠縮短機(jī)頂盒新產(chǎn)品的開發(fā)和調(diào)試周期,同時(shí)也能提高節(jié)目接收完整性與高效性[2],給用戶交互使用留下良好的印象。
由于高清機(jī)頂盒數(shù)據(jù)量需求很大,除了提高硬件本身解碼的速度外,還要對軟件模塊進(jìn)行重新劃分,以提高代碼的運(yùn)行效率,降低CPU的負(fù)荷[2]。SI模塊的軟件架構(gòu)與在各模塊的劃分如圖1所示。圖中虛線中所包含的Demux/Filter,Data Analysis,Section Management,Builder即為機(jī)頂盒軟件SI模塊所包含的部分。
其中Demux/Filter中定義了驅(qū)動(dòng)接口,并對解復(fù)用時(shí)Channel(通道)管理以及過濾器Filter的設(shè)置。它與硬件平臺(tái)相關(guān)性有關(guān),屬于直接調(diào)用系統(tǒng)函數(shù)及硬件接口部分。Data Analysis與Section Management是兩個(gè)獨(dú)立的模塊,Data Analysis負(fù)責(zé)解析數(shù)據(jù)包Section,而Section Management負(fù)責(zé)Section包的管理,它們之間不相互通信,而是通過OtherModule里面的數(shù)據(jù)庫將信息進(jìn)行交互[3]。Builder模塊是數(shù)據(jù)搜索模塊,當(dāng)上層UI用戶發(fā)出請求時(shí),通過Builder模塊,得到程序起始調(diào)用接口,搜索到音視頻和其他節(jié)目有關(guān)信息。
在SI數(shù)據(jù)解析過程中,即對Section包的過濾和接收,并得到PSI/SI各種信息表,依次解析出每個(gè)表中的內(nèi)容,并存入數(shù)據(jù)庫,供上層調(diào)用。在傳統(tǒng)的解析處理中,采用的是主動(dòng)式接收。主動(dòng)式接收是在接收表的過程中,當(dāng)回調(diào)函數(shù)發(fā)出用戶使用的Request時(shí),解析模塊根據(jù)Table_id去請求此表的Section,直至一張表接收完整,才存入SI數(shù)據(jù)庫中。在用戶不斷調(diào)用請求下,解析模塊主動(dòng)地去請求所要使用的表。但這種主動(dòng)式的處理方式,容易造成數(shù)據(jù)存入數(shù)據(jù)庫緩慢,延遲用戶使用請求。
在本文中采用一種新型的被動(dòng)式接收方法。被動(dòng)式接收的方法是采用添加Capture(捕獲)的方式。在解析模塊將數(shù)據(jù)返回給用戶時(shí),當(dāng)消息驅(qū)動(dòng)到來,Demux將接收的Section存入管理后,就在解析過程中添加一個(gè)Cap?ture,將所得到的全部的捕獲項(xiàng)進(jìn)行接收,存儲(chǔ)到數(shù)據(jù)庫中。若有用戶Request時(shí),則訪問數(shù)據(jù)庫即可獲得。若有更新時(shí),則根據(jù)版本號的比較,刪除過期的Capture即可。圖2為被動(dòng)式接收添加捕獲數(shù)據(jù)流程圖。
SI數(shù)據(jù)庫中表的種類繁多,數(shù)據(jù)量大且關(guān)系比較復(fù)雜。但是機(jī)頂盒的CPU資源有限,傳統(tǒng)的方法是使用鏈表來處理數(shù)據(jù),由于處理過程復(fù)雜,導(dǎo)致系統(tǒng)響應(yīng)時(shí)間過長,影響用戶的使用[2]。在本文中,筆者對高清機(jī)頂盒引入新型嵌入式數(shù)據(jù)庫SQLite3,能很好地解決上述問題,并提高對數(shù)據(jù)進(jìn)行各種操作的速度。綜合考慮SI數(shù)據(jù)庫與PSI/SI信息格式匹配,以及建立索引管理的好處,設(shè)計(jì)了一種將索引管理與樹狀鏈表相結(jié)合的存儲(chǔ)方式。
如圖3所示,在索引管理中,線性索引表不包含其他的SI信息,只包含Service的3個(gè)標(biāo)識(shí)信息(Original_Net?work_Id,Transport_Stream_Id,Service_Id),分別是指向復(fù)用流(TS流)、業(yè)務(wù)(service)的指針。這3個(gè)節(jié)目標(biāo)識(shí)符,用于在SI數(shù)據(jù)庫初始化索引表時(shí),定位節(jié)目信息的位置。3個(gè)信息指針,有利于快速找到TS流信息、Service信息、節(jié)目事件信息。從而利用索引表,可以快速實(shí)現(xiàn)節(jié)目信息的編排、刪除及更改。并且SI信息內(nèi)容是按照Net?work(網(wǎng)絡(luò))、Transport Stream(傳輸流)、Service(業(yè)務(wù))、Event(事件)的順序進(jìn)行分層描述。
引入的SQLite數(shù)據(jù)庫,具有輕巧、操作方便的特點(diǎn),是一個(gè)對所有應(yīng)用程序可用,且功能強(qiáng)勁的輕型關(guān)系型數(shù)據(jù)庫引擎。對于業(yè)務(wù)信息中的圖片和文字其都是以“0”和“1”的形式存到Flash中,因此文件存儲(chǔ)采取二進(jìn)制形式的優(yōu)點(diǎn)是操作方便、快捷,且占用較小的內(nèi)存空間。另外,在SQLite3中定義了操作二進(jìn)制的內(nèi)部接口函數(shù),更利于對SI數(shù)據(jù)庫的各種操作。
在加載內(nèi)存Flash數(shù)據(jù)時(shí),可以通過預(yù)先讀取TS信息和Service信息,得知占用內(nèi)存的大小[3],然后根據(jù)此信息創(chuàng)建一個(gè)稍大的內(nèi)存緩沖池,用于保存數(shù)據(jù)庫信息。當(dāng)內(nèi)存緩沖池空間不足時(shí),再去動(dòng)態(tài)申請內(nèi)存。這種內(nèi)存分配方式可以盡量避免內(nèi)存碎片[4],同時(shí)也避免內(nèi)存緩沖池容量大小不足的問題。
本課題是高清機(jī)頂盒DEMO項(xiàng)目中的一部分,筆者課題研究所在的公司是重慶市指定的高清數(shù)字電視機(jī)頂盒開發(fā)商。該SI模塊的優(yōu)化設(shè)計(jì)是在該公司自主研發(fā)的高清解碼芯片SIC8008的平臺(tái)上測試實(shí)現(xiàn)的?;诒疚奶岢龅那度胧絃inux下的高清機(jī)頂盒SI模塊優(yōu)化設(shè)計(jì)的架構(gòu),筆者完成了部分模塊的設(shè)計(jì)與實(shí)現(xiàn)。實(shí)驗(yàn)結(jié)果證明其優(yōu)化效果較好,性能穩(wěn)定。
在圖4可以看出,在搜索節(jié)目時(shí)有手動(dòng)、網(wǎng)絡(luò)搜索方式,當(dāng)用戶終端使用時(shí),使用該模塊開始搜索節(jié)目信息。
圖5為根據(jù)主網(wǎng)所發(fā)送的頻點(diǎn)及數(shù)據(jù)流,經(jīng)過SI模塊接收、解析、存儲(chǔ)后,將接收的節(jié)目加以統(tǒng)計(jì),考慮接收的數(shù)據(jù)完整性(接收節(jié)目數(shù)與接收時(shí)間的比值),得出的結(jié)果比較圖。由圖5可以看出,由于高清頻道主要集中在403~503 MHz頻段中,可以看出優(yōu)化后接收的高清節(jié)目的完整性,達(dá)到98%以上,明顯高于優(yōu)化前1個(gè)百分點(diǎn)。同時(shí),在實(shí)驗(yàn)過程中,內(nèi)存的占用非常合理,在節(jié)目信息量大的情況下,內(nèi)存占用會(huì)比較大,但不會(huì)影響機(jī)頂盒等正常運(yùn)行。
在介紹了嵌入式Linux下高清機(jī)頂盒SI模塊的系統(tǒng)架構(gòu)的前提下,分析了SI模塊設(shè)計(jì)要求。優(yōu)化設(shè)計(jì)方案克服了傳統(tǒng)SI模塊開發(fā)時(shí)的復(fù)雜度,接口調(diào)用的不統(tǒng)一、不開放、代碼模塊劃分不清、效率較低的弱點(diǎn),在實(shí)際應(yīng)用項(xiàng)目中取得良好的效果,具有適應(yīng)性好,穩(wěn)定,效率高的優(yōu)點(diǎn)。
[1] 閆書元.數(shù)字高清技術(shù)與高清機(jī)頂盒設(shè)計(jì)淺談[C]//2005國際有線電視技術(shù)研討會(huì)論文集.杭州:[s.n.],2005:45-56.
[2] 徐登,鄭世寶,金薦.一種優(yōu)化的機(jī)頂盒SI引擎的設(shè)計(jì)與實(shí)現(xiàn)[J].電視技術(shù),2005,29(5):13-15.
[3] 韓銳,鄧浩江,曾學(xué)文.一種可移植的機(jī)頂盒SI模塊的設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2009(27):9-11.
[4]彭銳,于鴻祥,張萍.嵌入式Linux下高清數(shù)字機(jī)頂盒軟件設(shè)計(jì)[J].電視技術(shù),2010,34(9):52-53.