一種視窗商店應用程序遠端媒體來源的實現(xiàn)裝置及方法
【技術領域】
[0001]本發(fā)明涉及多媒體軟件保護技術領域,特別涉及一種視窗商店應用程序遠端媒體來源的實現(xiàn)裝置及方法。
【背景技術】
[0002]微軟從windows vista起推出媒體基礎框架,為軟件工程師提供了一個在統(tǒng)一視窗系統(tǒng)下的多媒體影音開發(fā)平臺,具有拓展方便、性能良好,與系統(tǒng)硬件深度集合、易于開發(fā)等優(yōu)點。
[0003]微軟在windows 7、windows 8的基礎上進一步地優(yōu)化增強了媒體基礎框架,并且針對數(shù)字版權保護的需求,提供了一種與系統(tǒng)深度集成的保護模式。在桌面應用程序中,該保護模式提供了一種配置模式,可以讓媒體來源在保護環(huán)境下運行,這進一步增強了數(shù)字內(nèi)容安全。該配置模式在媒體基礎框架中被稱為遠端媒體來源模式。在非遠端媒體來源模式下,媒體來源(Media Source)運行在用戶進程中,媒體基礎框架為該媒體來源自動添加了一份運行于保護進程中的代理(source proxy);在遠端媒體來源模式下,媒體來源(Media Source)運行在保護進程中,媒體基礎框架為該媒體來源自動添加了一份運行于用戶進程中的代理(source proxy)。
[0004]但在視窗商店應用程序中,微軟沒有提供遠端媒體來源模式,也沒有提供遠端媒體來源的實現(xiàn)方法。
[0005]因此,多媒體軟件保護技術領域急需一種視窗商店應用程序遠端媒體來源的實現(xiàn)裝置及方法,將暴露在用戶進程的解密、解壓過程隱藏到系統(tǒng)提供的保護進程中去,減免了用戶為保護關鍵數(shù)據(jù)而不得不自行提供的保護功能,以及額外的為了驗證數(shù)據(jù)安全而作的攻擊測試,從而極大地減少了項目工作量,加速項目進度,以保護解壓解密授權內(nèi)容、私密文件所特需的密碼、鑰匙或私有證書。
【發(fā)明內(nèi)容】
[0006]本發(fā)明為了解決上述問題,提供了一種視窗商店應用程序遠端媒體來源的實現(xiàn)裝置及方法,技術方案如下:
一種視窗商店應用程序遠端媒體來源的實現(xiàn)裝置,包括:主體組件、代理組件和至少3個接口 ;
主體組件,為遠端媒體來源,用于運行在保護進程中;
代理組件,為代理媒體來源,分別通過第一接口、第二接口與主體組件相連接,與系統(tǒng)內(nèi)置媒體引擎相連接,用于運行在用戶進程中;
第一接口,用于媒體事件處理,在遠端媒體來源工作過程中產(chǎn)生的任何媒體事件都被放到事件序列中,等待運行在用戶進程中的媒體來源來獲取并處理;
第二接口,用于接受來自運行在代理媒體來源的控制指令;
第三接口,與主體組件相連接,用于提供媒體樣本。
[0007]優(yōu)選的,在上述一種視窗商店應用程序遠端媒體來源的實現(xiàn)裝置中,還包括:解密器、解碼器和渲染器;渲染器為系統(tǒng)內(nèi)置的渲染器,渲染器與系統(tǒng)內(nèi)置媒體引擎相連接,用于產(chǎn)生向解碼器索取數(shù)據(jù)的媒體事件;解碼器為系統(tǒng)內(nèi)置的解碼器或者軟件制造商提供的解碼器,解碼器與渲染器、系統(tǒng)內(nèi)置媒體引擎相連接,用于接收渲染器發(fā)送的需求媒體樣本的媒體事件,進而從解密器中獲取媒體樣本,并反饋回渲染器中;解密器與第三接口、解碼器、系統(tǒng)內(nèi)置媒體引擎相連接,用于接收解碼器發(fā)送的需求媒體樣本的媒體事件,進而從主體組件獲取媒體樣本,并反饋回解碼器中。
[0008]優(yōu)選的,在上述一種視窗商店應用程序遠端媒體來源的實現(xiàn)裝置中,第一接口為IMFMediaEventGenerator私有接口,第二接口為MFMediaSource私有接口或自定義接口 ;第三接口為MFMediaStream私有接口或自定義接口 ImData0
[0009]一種視窗商店應用程序遠端媒體來源的實現(xiàn)方法,包括如下步驟:
步驟一,媒體引擎創(chuàng)建代理組件,即代理媒體來源,并接受傳入的字節(jié)流通過第二接口供遠端媒體來源使用,運行在用戶進程中;
步驟二,代理媒體來源要求保護進程創(chuàng)建主體組件,即遠端媒體來源,并傳入字節(jié)流供遠端媒體來源使用,該遠端媒體來源運行在保護進程中,該主體組件用于接受解碼器提供的媒體樣本以及和代理組件聯(lián)合處理媒體事件;若字節(jié)流未經(jīng)過加密/壓縮處理,則執(zhí)行步驟四,否則執(zhí)行步驟三;
步驟三,遠端媒體來源解密/解壓字節(jié)流以產(chǎn)生非壓縮的文件頭;
步驟四,遠端媒體來源解析出正確的媒體格式;
步驟五,代理媒體來源通過第一接口從遠端媒體來源獲得正確的媒體格式,填寫媒體描述;
步驟六,媒體引擎獲取代理媒體來源的媒體描述,根據(jù)媒體描述獲知媒體流的數(shù)目和媒體格式;
步驟七,媒體引擎要求代理媒體來源根據(jù)媒體流序號創(chuàng)建對應的解密器;
步驟八,代理媒體來源要求保護進程創(chuàng)建指定的解密器,同時傳入媒體流序號和遠端媒體來源引用供解密器使用;
步驟九,媒體引擎根據(jù)媒體描述為每個媒體流創(chuàng)建解碼器和渲染器;
步驟十,媒體引擎為每個媒體流鏈接媒體管道;
步驟十一,媒體引擎向應用程序發(fā)送媒體打開事件;
步驟十二,等待用戶點擊播放按鈕或者根據(jù)用戶設置自動播放。
[0010]優(yōu)選的,在上述一種視窗商店應用程序遠端媒體來源的實現(xiàn)方法中,步驟七和步驟八中解密器的創(chuàng)建、實現(xiàn)方法為:
首先,解密器在構造時必須接受傳入?yún)?shù);
進一步地,代理媒體來源在創(chuàng)建解密器的時候,把遠端媒體來源的一份引用或者IMFMediaStream接口的一份引用作為初始化參數(shù)傳入解密器;
進一步地,解密器在構造時檢查傳入?yún)?shù),如果能查詢到IMFMediaStream接口,則使用該接口獲取數(shù)據(jù);如果不能查詢到IMFMediaStream接口,則查詢IMFMediaSource接口,如果仍然沒有該接口,則說明該解密器沒有與遠端媒體來源配合工作,該解密器需要自行決定是否轉入錯誤處理程序或者轉入非遠端媒體來源模式;如果能夠查詢到IMFMediaSource接口,則使用該接口查詢ImData私有接口,并使用ImData接口獲取數(shù)據(jù)。
[0011]優(yōu)選的,在上述一種視窗商店應用程序遠端媒體來源的實現(xiàn)方法中,步驟十二中遠端媒體來源自動播放的具體步驟為:
首先,當播放開始的時候,媒體引擎向所有的媒體管道發(fā)送“開始”命令;
進一步地,渲染器接到“開始”命令后,向媒體引擎發(fā)送媒體事件索取數(shù)據(jù);
進一步地,媒體引擎接到媒體事件后查找渲染器的前置管道,獲得MFTransform接口,調用ProcessOutput方法以獲取數(shù)據(jù);
進一步地,若前置管道不能提供足夠的數(shù)據(jù),則向解碼器索取數(shù)據(jù),如果仍不能提供數(shù)據(jù),則向解密器索取數(shù)據(jù);
進一步地,解密器通過第三接口向遠端媒體來源索取數(shù)據(jù);
進一步地,遠端媒體來源從字節(jié)流中讀取數(shù)據(jù),進行解密/解壓處理,并分離出指定媒體流需要的數(shù)據(jù)后,以媒體樣本的方式供給解密器;
進一步地,當字節(jié)流報告文件結束的時候,遠端媒體來源發(fā)送“演示結束”事件,該媒體事件被代理媒體來源轉發(fā)到媒體引擎;
進一步地,媒體引擎接到“演示結束”后,停止播放,數(shù)據(jù)流動結束。
[0012]優(yōu)選的,在上述一種視窗商店應用程序遠端媒體來源的實現(xiàn)方法中,所述步驟十二中第一接口處理媒體事件的具體操作步驟為:
首先,遠端媒體來源構建一個媒體事件隊列;
進一步地,遠端媒體來源公開繼承IMFMediaEventGenerator私有接口,并實現(xiàn)IMFMediaEventGenerator 的 4 個函數(shù)計算;
進一步地,代理媒體來源獲取IMFMediaEventGenerator私有接口 ;
進一步地,代理媒體來源調用BeginGetEvent方法,并傳入一個回調函數(shù);
進一步