亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Android的機(jī)頂盒CAS系統(tǒng)的開發(fā)

        2012-06-25 02:46:04李浩亮劉永飛
        關(guān)鍵詞:智能卡機(jī)頂盒子系統(tǒng)

        李浩亮,劉永飛

        (鄭州大學(xué) 信息工程學(xué)院,鄭州 450001)

        引 言

        CAS(Conditional Access System,條件接收系統(tǒng))是一種加密系統(tǒng)方法總稱,通過這個(gè)系統(tǒng)可以實(shí)現(xiàn)網(wǎng)絡(luò)控制、收費(fèi)、加密、管理等諸多功能,廣泛應(yīng)用于視頻點(diǎn)播、電子銀行、網(wǎng)上超市、遠(yuǎn)程教育等諸多環(huán)境。其與數(shù)字廣播系統(tǒng)獨(dú)立,但對(duì)商業(yè)的數(shù)字廣播系統(tǒng)來說,是其成功運(yùn)營的基礎(chǔ)、增值服務(wù)的命脈,CAS系統(tǒng)須保證未授權(quán)用戶不能收看加密節(jié)目,而授權(quán)的用戶可以收看加密節(jié)目,同時(shí)可以對(duì)單用戶進(jìn)行識(shí)別、控制,消除傳統(tǒng)網(wǎng)路電視的盲目性,是我國數(shù)字網(wǎng)絡(luò)改造的核心部分。CAS系統(tǒng)由兩部分組成:前端加擾管理系統(tǒng)和終端解擾子系統(tǒng)。機(jī)頂盒屬于終端設(shè)備,本文介紹的CAS系統(tǒng)屬于終端解擾子系統(tǒng)。

        任何一款復(fù)雜電子設(shè)備,都離不開一款強(qiáng)大的操作系統(tǒng)支持,而Android系統(tǒng)起初是Google公司為移動(dòng)設(shè)備開發(fā)的一套操作系統(tǒng),但由于其開源、擁有OHA聯(lián)盟強(qiáng)大的后盾,而且具有獨(dú)特的系統(tǒng)架構(gòu)以及Linux內(nèi)核底層的穩(wěn)定支撐,很快有許多其他產(chǎn)品廠商都紛紛開發(fā)出Android平臺(tái),使其成為目前在大型嵌入式設(shè)備上最流行的操作系統(tǒng)。目前華為、中興等為代表的機(jī)頂盒廠商都在紛紛推出基于Android平臺(tái)的機(jī)頂盒。本文詳細(xì)介紹了機(jī)頂盒CAS終端子系統(tǒng)的設(shè)計(jì)過程和移植到Android平臺(tái)上的過程。

        1 終端解擾子系統(tǒng)解擾過程

        數(shù)字電視節(jié)目都是通過介質(zhì)(地面、電纜、衛(wèi)星)以TS流的形式傳播的。TS流依據(jù) MPEG-2協(xié)議被分成長(zhǎng)度188字節(jié)的ES包,每一個(gè)ES包都有自身識(shí)別的PID號(hào),根據(jù)PID號(hào)的不同分成各種功能不同的表,其中對(duì)CAS系統(tǒng)有用的是ECM表和EMM表。EMM(Entitle Manager Message)表為授權(quán)管理信息表,里面主要包含每個(gè)用戶授權(quán)的節(jié)目數(shù)和對(duì)應(yīng)的SK(Service Key)業(yè)務(wù)密鑰信息。ECM(Entitle Control Message)表為授權(quán)控制信息表,里面含有對(duì)解擾最重要的CW(Control Word)控制字,取得對(duì)應(yīng)節(jié)目的CW之后,就可以交給安全模塊解擾,解擾后的明文CW就可以用來解擾加密節(jié)目,整個(gè)解密過程也就完成了。

        CA解擾的過程如圖1所示。

        2 終端子系統(tǒng)設(shè)計(jì)

        圖1 CA解擾的過程

        考慮到應(yīng)用設(shè)計(jì)與底層硬件智能卡進(jìn)行交互,且Android系統(tǒng)提供有NDK套件工具,使得底層的其他語言的API與Android應(yīng)用層JAVA語言無縫對(duì)接,所以可以把CAS以庫的形式存放到Android中間層,供Android上層GUI調(diào)用。CAS系統(tǒng)的設(shè)計(jì)用到上述的ECM表和EMM表,但EMM表和ECM表要從PSI中的PMT、CAT表獲得其PID號(hào)。圖2、圖3是用專用工具截取的一段PMT和CAT表里面的CA信息。

        圖2 CAT表中的ECM表

        圖3 PMT表中的EMM表

        從圖2可以看出此TS流中的CAT表中含有ca_descriptor描述符,并可以得出ECM的ca_pid為0x0562。而從圖3中可以看出,PMT表中含有的EMM表的ca_pid為0x0ffe。此時(shí)就可以設(shè)置操作demod來分配filter通道,過濾出 EMM、ECM 表的section_descriptor_table,來取得CA有關(guān)的信息。如果用戶要流暢地播放節(jié)目,機(jī)頂盒(Set-Top Box,STB)就要不斷地獲得密文CW送入智能卡中,從整個(gè)解碼過程中可以把整個(gè)CAS終端子系統(tǒng)分為3個(gè)模塊:EMM解析模塊、ECM解析模塊、智能卡任務(wù)模塊。Android系統(tǒng)采用的是Linux內(nèi)核,保留了posix的pthread、message、memory pool等通用的 API,所以在設(shè)計(jì)3個(gè)模塊時(shí),可以使用pthread_create()創(chuàng)建任務(wù)模塊;使用msgget()創(chuàng)建消息,實(shí)現(xiàn)3個(gè)任務(wù)模塊的通信與同步。

        2.1 EMM任務(wù)模塊

        由圖1可知,TS流經(jīng)tuner調(diào)諧,把高頻載波去掉,再經(jīng)過demod解調(diào),就可以根據(jù)PES包的PID號(hào)和TABLE_ID號(hào)設(shè)置其里面的filter。一般來說一個(gè)demod含有多個(gè)filter,在系統(tǒng)啟動(dòng)開始就會(huì)分配PAT表的filter,有PAT表的setction_descriptor的描述就可以得到PMT表的PID,此時(shí)同樣分配PMT表的filter。如果此節(jié)目是加密節(jié)目,在其段描述符中就會(huì)含有EMM表的PID號(hào),一旦找到EMM的PID號(hào),就可以為EMM表分配filter。如果EMM里面的CA信息版本號(hào)和智能卡存儲(chǔ)的CA信息版本號(hào)一致,就舍棄此EMM;如果不一致,就重新改寫智能卡里面的CA用戶的信息。EMM任務(wù)模塊流程如圖4所示。

        圖4 EMM任務(wù)模塊流程

        在EMM任務(wù)模塊中,通過CAS_EMM_TASK()函數(shù)創(chuàng)建任務(wù),在CAS_EMM_TASK()中調(diào)用CAS_EMM_ReceiveMessage()函數(shù)來接收EMM filter發(fā)送過來的CA信息。在沒有EMM流時(shí),EMM任務(wù)一直掛起,而一旦filter發(fā)現(xiàn)EMM表,就會(huì)把EMM的CA信息發(fā)送到EMM任務(wù)中,同時(shí)關(guān)掉filter,避免其未處理完此EMM,而又接收新的EMM。此時(shí)EMM任務(wù)從掛起進(jìn)入就緒態(tài),從而處理來自filter的EMM信息,處理完之后,再次分配EMM的filter。

        2.2 ECM任務(wù)模塊

        通過解讀CAT表可知,此節(jié)目表是否加密,如果加密則設(shè)置相應(yīng)ECM的filter過濾出對(duì)應(yīng)的ECM表,此時(shí)結(jié)合智能卡中存儲(chǔ)的EMM的CA信息,就可以判斷出用戶是否對(duì)此節(jié)目授權(quán),若授權(quán)則取出智能卡中的SK業(yè)務(wù)密鑰,找出對(duì)應(yīng)的奇偶控制字(CW),送入到智能卡中,通過智能卡系統(tǒng)解密出CW,送入到STB中實(shí)現(xiàn)數(shù)據(jù)、視頻、音頻的解碼。整個(gè)過程如圖5所示。

        圖5 ECM任務(wù)模塊流程

        在ECM任務(wù)模塊中,通過CAS_ECM_TASK()創(chuàng)建線程任務(wù),在其內(nèi)部調(diào)用CAS_ECM_ReceiveMessage()函數(shù)接收來自ECM的filter過濾出的CA信息;此時(shí)通過CAS_CARD_ReadMessage()讀取智能卡內(nèi)部用戶授權(quán)信息,來判斷ECM是否有效且取出對(duì)應(yīng)的密文的CW;而用CAS_ECM_SendToCard()函數(shù)把密文CW送入到智能卡中解密,解密出明文CW;用CAS_CW_SendToSTB()函數(shù)送入到機(jī)頂盒,此時(shí)解復(fù)用模塊接收到明文CW就可以得到解碼加密流了。

        2.3 智能卡任務(wù)模塊

        智能卡的通信標(biāo)準(zhǔn)有T0和T1兩種,T0按字節(jié)傳送,T1按塊傳送,而在設(shè)計(jì)過程中通常支持兩種協(xié)議。一般采用I2C總線通信,而智能卡內(nèi)部一般沒有上拉電阻,所以在電路設(shè)計(jì)過程中,SCL和SDA的引腳處必須加上拉電阻,否則無法正常通信。根據(jù)通信協(xié)議,如果要對(duì)智能卡數(shù)據(jù)讀寫操作,首先要發(fā)送5字節(jié)的命令字,這5字節(jié)命令字依次為CLA、INS、P1、P2、P3,其中CLA為指令類型,INS為命令符,P1、P2為操作文件位置,P3為后續(xù)字符數(shù)。智能卡接收到命令符就可以根據(jù)命令種類對(duì)其后續(xù)數(shù)據(jù)進(jìn)行操作,同時(shí)智能卡就可以發(fā)出兩個(gè)字節(jié)W1、W2的應(yīng)答符。如果成功,W1、W2分別為0x90、0x00;如果不成功則會(huì)返回相應(yīng)的代碼,以便給開發(fā)者提供調(diào)試。因?yàn)橹悄芸▋?nèi)部十分復(fù)雜,篇幅有限,所以想深入了解原理的話可以參考智能卡標(biāo)準(zhǔn),這里僅介紹機(jī)頂盒操作智能卡過程的設(shè)計(jì)。

        如圖6所示,在智能卡任務(wù)模塊中,在系統(tǒng)啟動(dòng)之初,未進(jìn)入文件系統(tǒng)之前,就要對(duì)智能卡進(jìn)行初始化,分配內(nèi)存池,強(qiáng)制為智能卡復(fù)位,從而選擇通信類型(T0或T1),全部完成之后就可以進(jìn)入文件系統(tǒng)。通過CAS_CARD_TASK()為智能卡建立線程,在其線程內(nèi)部使用CAS_CARD_ReceiveMessage()接收來自EMM或者ECM的命令字。如果合法,通過CAS_CARD_SendMessage()可以把應(yīng)答字給其兩個(gè)模塊,同時(shí)通知其他兩個(gè)模塊發(fā)送操作數(shù),若是EMM則到此結(jié)束,若為ECM則智能卡會(huì)把解密的CW 通過CAS_CARD_SendMessage()發(fā)送給機(jī)頂盒。

        圖6 智能卡任務(wù)模塊流程

        2.4 其他細(xì)節(jié)設(shè)計(jì)

        CAS系統(tǒng)除了最重要的解擾以外,還有其他重要的附屬功能,如郵件、在線付費(fèi)、在線充值、節(jié)目點(diǎn)播、區(qū)域限制、用戶管理。這些信息都存儲(chǔ)在EMM表中,所以EMM和ECM表的解析也是一個(gè)十分重要的步驟,只有正確地提取出EMM中的CA信息,才能順利地進(jìn)行下一步的操作。根據(jù)MPEG-2標(biāo)準(zhǔn)和PSI/SI協(xié)議,以及智能卡廠商的提供功能表,就能設(shè)計(jì)出EMM和ECM的解析函數(shù)。

        表1列出了一個(gè)通用CA的描述符。

        表1 一個(gè)通用CA的描述符

        由于每個(gè)智能卡廠商的填充數(shù)據(jù)不一樣,所以必須根據(jù)廠商的定義再去提取數(shù)據(jù)、處理數(shù)據(jù)。由于筆者參與設(shè)計(jì)的是某公司提供的智能卡,所以數(shù)據(jù)的格式也都以它為標(biāo)準(zhǔn)。最終設(shè)計(jì)包括12個(gè)源文件、5個(gè)頭文件。

        3 CAS子系統(tǒng)Android的移植

        CAS終端子系統(tǒng)起初設(shè)計(jì)由于涉及到與底層交互,采用的是C語言。如果想要使上層的JAVA環(huán)境調(diào)用其API,就要遵循JNI規(guī)范添加新的頭文件,使其應(yīng)用層能夠方便地調(diào)用。同時(shí)Google在設(shè)計(jì)Android之初就提供了NDK套件,有著獨(dú)有的交叉編譯器,使得原有的許多C語言編寫的驅(qū)動(dòng)、應(yīng)用程序可十分方便地移植到Android系統(tǒng)中。

        3.1 搭建Android的NDK開發(fā)環(huán)境

        由于是在 Windows下進(jìn)行開發(fā),所以要在 Windows下模擬Linux的開發(fā)環(huán)境,需要下載cygwin工具,下載地址為 http://www.cygwin.com/setup.exe。安裝方法請(qǐng)參考相關(guān)文檔,這里就不贅述了。同樣也需要Android的NDK套件,下載地址為 http://developer.android.com/sdk/ndk/index.html;可以選擇最新的版本下載,下載完畢,直接解壓到同一路徑下。然后在cygwin的安裝目錄home/Administrator下的./bash_profile文件添加 NDK的路徑,就可以使用NDK下的ndk-build命令了,進(jìn)入samples/hello-jni。在cygwin中調(diào)用ndk-build,如果出現(xiàn)如圖7所示的結(jié)果,則NDK的環(huán)境已經(jīng)搭建成功。

        3.2 編寫CAS子系統(tǒng)的makefile

        筆者使用的是android-ndk-r7b版本,也是目前最新版本,其交叉編譯器位于其toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/arm-linux-android/bin中,庫的頭文件位于/platforms/android-xx/arch-arm/usr/include中,庫位于 platform/android-xx/arch-arm/usr/lib中。知道了編譯器和C庫的頭文件,就可以容易地編寫出makefile。在編寫makefile時(shí)需要注意,若用到了posix的pthread庫,則需要添加“LDFLAGS+=-lpthread”,否則在執(zhí)行鏈接的時(shí)候會(huì)出現(xiàn)錯(cuò)誤。編譯完成之后如圖8所示。

        圖7 搭建成功后的顯示內(nèi)容

        圖8 編譯完成后的顯示結(jié)果

        3.3 實(shí)現(xiàn)CAS子系統(tǒng)的JNI接口函數(shù)

        因?yàn)镃AS子系統(tǒng)提供給外部使用的API達(dá)20多個(gè),這里以CASTB_GetVersion()函數(shù)為例,其他都是如此實(shí)現(xiàn)。新建一個(gè)文件夾,命名為STBCA,在文件下建立兩個(gè)文件夾分別命名為JNI和SRC。JNI存放為CAS的JNI本地 API,源文件為castb_api_jni.c;SRC存放的是上層JAVA應(yīng)用程序,根據(jù)JNI標(biāo)準(zhǔn)則需把CASTB_GetVersion()定義為“Java_com_jpf_stbca_STBCA_CASTB_Get-Version();”。只要調(diào)用3.2小節(jié)的中l(wèi)ibCAS.a庫中的源函數(shù)就實(shí)現(xiàn)了對(duì)原函數(shù)的包裝,在同一目錄下添加android.mk,內(nèi)容如下所示:

        通過3.1小節(jié)的步驟就可以生成cas_jni.so庫,上層如果要調(diào)用cas_jni.so庫中的函數(shù)只要在JAVA文件中聲明 public native CASTB_GetVersion()函數(shù),且使用“static{system.loadlibrary("cas_jni");}”把動(dòng)態(tài)庫加載到連接器中,就完成了全部的設(shè)計(jì)。通過實(shí)踐,負(fù)責(zé)上層軟件編寫的同時(shí)能夠無縫地實(shí)現(xiàn)CAS系統(tǒng)API的調(diào)用。

        結(jié) 語

        本文詳細(xì)闡述了CAS子系統(tǒng)的開發(fā)過程和Android系統(tǒng)移植。在Android機(jī)頂盒的開發(fā)過程中,使用的是華為的H3716C平臺(tái),筆者承擔(dān)了CAS系統(tǒng)和PSI/SI節(jié)目表解析的開發(fā)與移植。使用此CAS子系統(tǒng)播放加密節(jié)目,持續(xù)穩(wěn)定地播放一周而且沒有出現(xiàn)馬賽克或卡現(xiàn)象,說明此CAS子系統(tǒng)比較穩(wěn)定。但CAS是一套功能完整的獨(dú)立系統(tǒng),而筆者只是重點(diǎn)探討解密的過程,許多其他功能未有涉及,若想深入了解CAS系統(tǒng),請(qǐng)參考CAS系統(tǒng)標(biāo)準(zhǔn)。

        [1]ANSI ISO/IEC 13818-1-2000信息技術(shù).移動(dòng)畫面和相關(guān)音頻信息的通用編碼系統(tǒng)[S].

        [2]Download the Android NDK[OL].[2012-03].http://developer.android.com/sdk/ndk/index.html.

        [3]韓超,梁泉.Android系統(tǒng)原理及開發(fā)要點(diǎn)詳解[M].北京:電子工業(yè)出版社,2010.

        猜你喜歡
        智能卡機(jī)頂盒子系統(tǒng)
        不對(duì)中轉(zhuǎn)子系統(tǒng)耦合動(dòng)力學(xué)特性研究
        GSM-R基站子系統(tǒng)同步方案研究
        東方磁卡李曉東:進(jìn)擊的智能卡研發(fā)巨子
        安全使用機(jī)頂盒注意五點(diǎn)
        駝峰測(cè)長(zhǎng)設(shè)備在線監(jiān)測(cè)子系統(tǒng)的設(shè)計(jì)與應(yīng)用
        數(shù)字電視機(jī)頂盒軟件自動(dòng)測(cè)試系統(tǒng)的開發(fā)及應(yīng)用
        基于STC89 單片機(jī)的非接觸智能卡讀寫機(jī)設(shè)計(jì)
        電子制作(2017年17期)2017-12-18 06:40:36
        有線電視高清數(shù)字電視機(jī)頂盒測(cè)試系統(tǒng)的構(gòu)建
        臨沂機(jī)頂盒智能卡升級(jí)方案介紹
        What is Apple Watch All About?
        特级做a爰片毛片免费看108| 操国产丝袜露脸在线播放| 蜜桃国产精品视频网站| 太大太粗太爽免费视频| 中文字幕久久国产精品| 中文字字幕在线中文乱码解| 亚洲av国产av综合av卡| 在线精品国产一区二区三区| 人妻丰满av无码中文字幕| 国产亚洲午夜高清国产拍精品不卡| 美女偷拍一区二区三区| 日本系列有码字幕中文字幕| 免费国产在线精品一区| 四川老熟妇乱子xx性bbw| 国产一级在线现免费观看| 亚洲视频综合在线第一页| 日本中文字幕精品久久| 999国产精品999久久久久久| 蜜臀av 国内精品久久久| 国产亚洲欧美精品一区| 国产三级av在线播放| 国内嫩模自拍偷拍视频| 国产情侣自拍一区视频| 国产精品泄火熟女| 亚洲不卡中文字幕无码| 中文字幕亚洲精品人妻| 国产午夜精品视频观看| 狠狠摸狠狠澡| 日产国产精品亚洲系列| 亚洲欧洲综合有码无码| 亚洲高清精品一区二区| 精品一二三四区中文字幕| 久久99精品九九九久久婷婷| 亚洲国产成人精品福利在线观看| 精品一区二区三区长筒靴| 日本黄色3级一区二区| 国产精品美女久久久久av福利| 国产av国片精品| 日韩极品视频在线观看| 国产高潮流白浆视频在线观看| 蜜桃一区二区三区|