條件接收系統(tǒng)(Conditional Access System,CAS)是數(shù)字電視接收控制的核心技術(shù)保障系統(tǒng)。在當(dāng)前國內(nèi)有線數(shù)字電視市場上,運(yùn)營商大多都采用同密技術(shù)運(yùn)營CA系統(tǒng);為了維護(hù)系統(tǒng)的安全性,CAS開發(fā)商對條件接收系統(tǒng)的內(nèi)部技術(shù)細(xì)節(jié)嚴(yán)格保密,在進(jìn)行用戶端軟件移植時(shí),CAS開發(fā)商僅提供已經(jīng)生成的函數(shù)庫,再由終端設(shè)備開發(fā)者完成底層的驅(qū)動(dòng)程序、上層的數(shù)據(jù)調(diào)用、屏幕顯示等內(nèi)容,共同完成CAS客戶端軟件移植工作。
同時(shí),不同CA系統(tǒng)在軟件架構(gòu)、接口參數(shù)、調(diào)用流程定義等方面都有各自的特點(diǎn),沒有統(tǒng)一規(guī)范可循,因此對終端廠商而言,在更換不同芯片平臺(tái)或在同一平臺(tái)移植不同CA系統(tǒng)時(shí),需要按照相關(guān)要求重新開發(fā)移植軟件。為解決CA移植工作中的簡易化、再復(fù)用等問題,筆者設(shè)計(jì)和開發(fā)了數(shù)字電視接收終端CAS適配層軟件。
2 適配層設(shè)計(jì)基礎(chǔ)和總體設(shè)計(jì)
一般而言,CAS由加擾與加密兩個(gè)部分組成,對應(yīng)到終端設(shè)備就是解密和解擾。同密CAS的核心是采用一個(gè)通用加擾算法,不同的CA系統(tǒng)可以對各自的密鑰數(shù)據(jù)使用各自的加密算法,但都要遵循通用加擾算法來加擾信息,這就使得一個(gè)傳輸系統(tǒng)中可運(yùn)行多個(gè)CAS,這種共同點(diǎn)就是接收終端CAS適配層的技術(shù)基礎(chǔ)之一。
接收終端設(shè)備通過調(diào)諧和解調(diào)獲得傳輸流,傳輸流通過硬件解復(fù)用分離出音頻流、視頻流、EMM、ECM和其他SI信息。其中EMM與ECM被送入智能卡,EMM數(shù)據(jù)先通過卡內(nèi)密鑰被解密,將當(dāng)前卡的授權(quán)信息寫入智能卡,這些授權(quán)信息就是業(yè)務(wù)密鑰SK。ECM數(shù)據(jù)在卡內(nèi)用SK解密生成控制字CW及節(jié)目本身信息。終端設(shè)備得到控制字CW后寫入解擾器,實(shí)現(xiàn)對相關(guān)節(jié)目的音視頻進(jìn)行解擾,終實(shí)現(xiàn)加擾節(jié)目的收看。以上工作是由終端軟件提供上層調(diào)用、流程控制,底層驅(qū)動(dòng)軟件提供支持,并配合智能卡和CAS函數(shù)庫共同完成的;由此也可看到,正是由于原理上的相似性,使得設(shè)計(jì)一個(gè)條件接收適配層來適應(yīng)各種條件接收系統(tǒng)成為可能。
根據(jù)對多個(gè)條件接收系統(tǒng)的分析,可見各個(gè)系統(tǒng)所涉及到的終端調(diào)用和驅(qū)動(dòng)軟件大致相同,包括實(shí)時(shí)操作系統(tǒng)抽象層、智能卡驅(qū)動(dòng)、NVRAM存儲(chǔ)器驅(qū)動(dòng)、解復(fù)用器驅(qū)動(dòng)、解擾器驅(qū)動(dòng)和屏幕顯示等內(nèi)容。根據(jù)這些模塊的功能區(qū)分和調(diào)用關(guān)系將其分為業(yè)務(wù)、通用驅(qū)動(dòng)、解擾3類適配組件,同時(shí)將調(diào)用流程標(biāo)準(zhǔn)化,屏蔽了相關(guān)接口和驅(qū)動(dòng)的差異,由此構(gòu)成了CA系統(tǒng)適配層,其總體架構(gòu)設(shè)計(jì)及與其他模塊的關(guān)系參見圖1。
2) 通用驅(qū)動(dòng)適配組件包括操作系統(tǒng)移植層、NVRAM數(shù)據(jù)管理層和解復(fù)用層3個(gè)模塊。操作系統(tǒng)移植層提供任務(wù)、消息、定時(shí)器、信號(hào)量以及存儲(chǔ)器的操作系統(tǒng)服務(wù)。NVRAM數(shù)據(jù)管理層用三元組(Address,Buffer,Length)描述適配層傳遞參數(shù),并在底層實(shí)現(xiàn)數(shù)據(jù)隱藏。解復(fù)用驅(qū)動(dòng)執(zhí)行傳輸流的解復(fù)用,并從中過濾出符合指定條件的數(shù)據(jù)。
3) 解擾適配組件由僅與CA直接相關(guān)的驅(qū)動(dòng)模塊組成,包括智能卡和解擾器模塊,主要接收來自其他組件的消息和數(shù)據(jù),配合CAS函數(shù)庫共同完成解密和解擾工作。智能卡模塊提供T=0和T=14兩種協(xié)議的系統(tǒng)接口,完成智能卡的初始化,復(fù)位和讀寫功能,并隨時(shí)檢測卡的狀態(tài),將變化狀態(tài)通知系統(tǒng)和CAS庫。終端軟件將ECM和EMM內(nèi)包含的信息送到智能卡內(nèi)部,終獲得控制字。系統(tǒng)再通過解擾器模塊將控制字寫入到通用解擾器的指定寄存器中以終進(jìn)行解擾。
3 適配層關(guān)鍵模塊設(shè)計(jì)和實(shí)現(xiàn)
3.1 節(jié)目播放模塊
本模塊傳遞上層播放新節(jié)目的調(diào)用到CA函數(shù)庫,并接收更新模塊的消息從而更新節(jié)目的播放,以及停止節(jié)目的播放。節(jié)目播放模塊通過CA_HAL_PlayNotify(pvoid *Param)獲得播放節(jié)目的消息,該消息傳遞了需要播放的節(jié)目wNewProgramID,這是一個(gè)由(TSID,Servi-ceID,NetworkID)三元組來確定的值,可以識(shí)別一套節(jié)目。模塊使用函數(shù)GLOB_DB_GetProgramlnfo(UINT32 ProgramId,pVoid* sCurProginfo)從頻道數(shù)據(jù)庫獲得相關(guān)的節(jié)目數(shù)據(jù),使用函數(shù)CA_HAL_PlaySendMes-sage()將ECM PID,EMM PID傳遞到解復(fù)用模塊,并通過注冊的回調(diào)函數(shù)CA_HAL_DemuxCallBack(UINT32TableType,pVoid*PayamFunc()),獲得ECM和EMM數(shù)據(jù),并傳遞給給CAS庫。與此同時(shí)播放模塊將A/V PID等設(shè)置到AV模塊,對該模塊使能。
另外,節(jié)目播放模塊通過函數(shù)CA_HAL_SIMonitor-CallBack(UINT32 ModuleId,UINT32 ProgramlD,UINT32ChangeType)獲得SI動(dòng)態(tài)更新模塊的消息,并進(jìn)行對應(yīng)的處理,如重新加載變化后的參數(shù)、卸載CA庫的關(guān)聯(lián)等。系統(tǒng)在執(zhí)行上述動(dòng)作的同時(shí),EMM和ECM數(shù)據(jù)被送入CAS庫執(zhí)行后續(xù)的解密動(dòng)作。
3.2 解復(fù)用模塊
本模塊的設(shè)計(jì)目的就是對解復(fù)用驅(qū)動(dòng)進(jìn)行接口適配層封裝和數(shù)據(jù)接收的標(biāo)準(zhǔn)化處理,這樣就可根據(jù)條件接收系統(tǒng)廠商提供的接口不同,將這些已經(jīng)封裝好的接口按著CA庫的要求調(diào)用。
本適配層解復(fù)用模塊所要完成的主要功能就是過濾和接收ECM和EMM表,本設(shè)計(jì)考慮了3種形式的數(shù)據(jù)接收方式,可兼容不同的硬件平臺(tái)EMM與ECM接收設(shè)計(jì)上的差異,以及兼容各種第三方CAS庫。種情況是適配層通過SI動(dòng)態(tài)監(jiān)測模塊獲取PSI數(shù)據(jù)。在這種設(shè)計(jì)中將所有PSI,SI表的過濾交給統(tǒng)一的模塊——SI動(dòng)態(tài)監(jiān)測模塊設(shè)置解復(fù)用通道,以獲得CAT,PMT,ECM和EMM表,但這些表的處理返回給各個(gè)請求模塊,有利于解復(fù)用模塊的資源使用和跨平臺(tái)移植。第二種情況是由解復(fù)用適配層過濾EMM,ECM數(shù)據(jù),然后通過CA接口傳給所移植的CAS庫。另一種情況是解復(fù)用適配層傳送EMM PID和ECM PID給第三方CAS庫,由CAS庫直接操作過濾器完成EMM和ECM數(shù)據(jù)的過濾和處理。在本模塊的設(shè)計(jì)中,通過系統(tǒng)初始化選擇不同的工作方式,對種情況,通過CA_HAL_RegisterCallBack(UINT32TableType,pVoid*ParamFunc())在SI中注冊請求,并通過回調(diào)函數(shù)獲得數(shù)據(jù)的存儲(chǔ)地址。對后兩種情況也是用類似的方法,不同的是由其他模塊向本模塊申請注冊,本模塊獲得數(shù)據(jù)后回送到請求方。
一般來說,對某個(gè)節(jié)目進(jìn)行授權(quán)的EMM數(shù)據(jù)流只有一個(gè),而解擾一個(gè)節(jié)目所需接收的ECM則可能是1個(gè)(TS層加擾),也可能是多個(gè)(PES層加擾),這樣終端軟件要求多個(gè)ECM過濾通道。同時(shí),一般的CA會(huì)支持多種授權(quán)方式,各種方式的EMM尋址方式不相同,因此EMM又有幾種不同的table id,EMM過濾通道上也需要幾個(gè)獨(dú)立的過濾器。通過{UINT32 *pChannelId,UINT8FilterCount,UINT32 FilterLength,UINT32 BufferLength}四元組就可以確定一個(gè)ECM或EMM過濾通道的屬性,其中UINT32 *pChannelId指向定義通道的變量,用于設(shè)置流PID;UINT8 FilterCount,記錄通道中使用的過濾器的個(gè)數(shù);UINT32 FilterLength存儲(chǔ)過濾器的長度;UINT32 BufferLength指定緩存能存儲(chǔ)Section的信息長度。其他相關(guān)功能如分配通道,設(shè)定PID,注冊通道回調(diào)函數(shù),控制通道動(dòng)作,設(shè)置過濾器的狀態(tài)都可以通過相應(yīng)的接口函數(shù)完成CAS庫所要求的動(dòng)作。
解復(fù)用適配層通過CA_HAL_DemuxSendMessage(UINT32 Moduleld,void *g_cmd)函數(shù)傳送請求到所需要的模塊如SI模塊或者CA庫。并通過CA_HAL_De-muxCallBack(UINT32 iTableType,pVoid *ParamFunc())注冊回調(diào)函數(shù),用于獲得從其他模塊傳入的數(shù)據(jù),對ECM與EMM數(shù)據(jù)則調(diào)用接口函數(shù)通知CAS庫。
3.3 智能卡適配模塊
在同密系統(tǒng)終端中,常用ISO7816標(biāo)準(zhǔn)中的T=0協(xié)議,以及為了簡化通信過程而設(shè)計(jì)的T=14協(xié)議。軟件對智能卡的操作流程都遵循初始化、打開、復(fù)位、讀寫、關(guān)閉的順序動(dòng)作,其中復(fù)位過程可使智能卡進(jìn)行復(fù)位應(yīng)答,且在每次插入卡后必定會(huì)調(diào)用執(zhí)行,以使卡進(jìn)人安全工作狀態(tài)。對于T=0和T=14協(xié)議的硬件參數(shù)配置要求不同,復(fù)位時(shí)要用不同的驅(qū)動(dòng)參數(shù)進(jìn)行復(fù)位,得到復(fù)位應(yīng)答參數(shù),再對后面的讀寫參數(shù)進(jìn)行進(jìn)一步的設(shè)置。因此在適配層的軟件設(shè)汁中,將復(fù)位應(yīng)答參數(shù)與復(fù)位程序運(yùn)行時(shí)得到的參數(shù)進(jìn)行比較,得到智能卡的協(xié)議類型,再根據(jù)協(xié)議要求對智能卡進(jìn)行讀寫操作。這樣除了初始化的差異外,適配層就可使用同一個(gè)版本的軟件來兼容多種情況的處理。
3.4 解擾適配模塊
在解擾適配層首先需要處理不同加擾層次的問題,這包括TS加擾、PES加擾及兩種加擾同時(shí)存在的情況,對這3種情況雖然在DVB標(biāo)準(zhǔn)中禁止,但實(shí)際運(yùn)營中會(huì)存在。通過全局變量保存節(jié)目的EMM_PID、音頻PID、視頻PID、加擾層等信息,在取到解擾字后,根據(jù)這些信息對解擾器進(jìn)行設(shè)置,這樣就將不同條件接收系統(tǒng)的函數(shù)統(tǒng)一到適配層中對數(shù)據(jù)進(jìn)行處理。同時(shí),對解擾器資源進(jìn)行統(tǒng)一封裝和管理。
4 系統(tǒng)調(diào)試及性能優(yōu)化
由于適配層軟件涉及到多個(gè)軟件模塊及它們之間的配合關(guān)系,為方便適配層軟件的調(diào)試,尤其在現(xiàn)場環(huán)境下的狀態(tài)觀察,在適配層中設(shè)計(jì)了相應(yīng)的監(jiān)測模塊。技術(shù)人員可通過UI或串口查詢各個(gè)模塊的狀態(tài),這包括當(dāng)前節(jié)目信息(如AudioPID,VideoPID,ECM PID,EMM PID。AudioECM PID,VideoECM PID,節(jié)目加密狀態(tài)等);CA模塊的狀態(tài)(如ECM與EMM讀寫狀態(tài),智能卡和控制字的讀寫狀態(tài)等);DEMUX狀態(tài)數(shù)據(jù)(PID所用SLOT是否被正常分配,有效地址的分配狀態(tài))等,這是通過在適配層的邊界上設(shè)置觀測點(diǎn)并以主動(dòng)查詢方式實(shí)現(xiàn)的。
另外,本適配層的設(shè)計(jì)不僅要滿足多種CA的移植需求,同時(shí)還要滿足不同CA系統(tǒng)的性能要求。比較典型的性能要求是系統(tǒng)處理能力必須要滿足在CA系統(tǒng)用戶數(shù)達(dá)到極限時(shí)處理EMM和ECM過濾的需要,如對一個(gè)100萬用戶的CA系統(tǒng),其EMM數(shù)據(jù)高峰值就可達(dá)到2 Mbit/s,ECM的數(shù)據(jù)則超過150 Kbit/s,為保證EMM和ECM必須完整地過濾接收,終端接收軟件需要對適配層軟件進(jìn)行相應(yīng)的優(yōu)化。筆者采用數(shù)據(jù)連續(xù)接收、兩個(gè)任務(wù)配合、二次復(fù)制數(shù)據(jù)到用戶空間處理的方法。在對解復(fù)用的通道控制上,將通道和過濾器保持在同一個(gè)狀態(tài),即始終保持在打開狀態(tài),包括在Section數(shù)據(jù)等待接收的狀態(tài)下,也不關(guān)閉通道和過濾器,直到智能卡被拔出,或者用戶的操作關(guān)閉了EMM的過濾。
同時(shí),為了快速取走數(shù)據(jù)而不致數(shù)據(jù)被覆蓋,設(shè)置解復(fù)用底層的循環(huán)緩沖足夠存儲(chǔ)多個(gè)Section,一般設(shè)為4096的整數(shù)倍。另外,為了加速數(shù)據(jù)復(fù)制,在適配層使用專門的任務(wù)將底層線性緩沖的數(shù)據(jù)復(fù)制到應(yīng)用空間,然后在應(yīng)用空間內(nèi)進(jìn)行下一步處理。在這種方法中,增加了一個(gè)專門的任務(wù)來進(jìn)行數(shù)據(jù)復(fù)制。經(jīng)過實(shí)際測試,效率和系統(tǒng)都好于通過單純提高任務(wù)優(yōu)先級(jí)的方法,接收性能和擴(kuò)展性都能較好地滿足系統(tǒng)的應(yīng)用需求。
在適配層設(shè)計(jì)中,對系統(tǒng)魯棒性(如智能卡多次插拔)、傳輸流的各種加擾模式、節(jié)目成人級(jí)控制、IPPV節(jié)目、區(qū)域阻塞功能以及系統(tǒng)狀態(tài)監(jiān)測等功能進(jìn)行充分測試,測試結(jié)果表明本設(shè)計(jì)能夠滿足系統(tǒng)的需求。
5 小結(jié)
本文提到的設(shè)計(jì)方法在一個(gè)平臺(tái)上開發(fā)實(shí)現(xiàn)后,先后又在兩個(gè)芯片平臺(tái)移植了3個(gè)CAS系統(tǒng),由此形成的多款產(chǎn)品在多個(gè)市場中得到應(yīng)用。實(shí)踐證明,采用適配層設(shè)計(jì),使得移植工作代碼復(fù)用率提高到35%,并縮短了40%的工期;在質(zhì)量上不僅通過了CAS廠商的認(rèn)證測試,也經(jīng)受了外部復(fù)雜網(wǎng)絡(luò)環(huán)境的考驗(yàn)。這都為公司產(chǎn)品的快速上市奠定了良好的基礎(chǔ)。也證明這種方法簡化了數(shù)字電視條件接收系統(tǒng)移植的工作,能夠加速新的條件接收系統(tǒng)的移植和整合。當(dāng)然,作為CA系統(tǒng)應(yīng)用的一種嘗試,在實(shí)踐過程中也逐步暴露出一些問題,需要優(yōu)化,比如進(jìn)一步完善和擴(kuò)展適配層功能、優(yōu)化適配層的邊界條件、縮短判斷智能卡讀寫協(xié)議過程的延時(shí)等,這都是今后努力的方向。