專利名稱::基于avi格式的多媒體數(shù)據(jù)加密方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及視頻編碼技術(shù),特別涉及視頻數(shù)據(jù)的加密保護方法。技術(shù)背景隨著計算機網(wǎng)絡(luò),尤其是寬帶網(wǎng)絡(luò)和無線網(wǎng)絡(luò)的快速發(fā)展,越來越多的電影開始在互聯(lián)網(wǎng)上發(fā)布和傳播。正規(guī)的獲取媒體文件的方式是取得授權(quán)后下載、播放相應(yīng)的媒體文件,可是越來越多的未經(jīng)授權(quán)的媒體文件(盜版)的出現(xiàn),將極大地損害版權(quán)所有人的利益。這些文件非常容易傳播和分發(fā),并且有著和正版一樣的質(zhì)量,基于此,針對數(shù)字信息的版權(quán)保護顯得越來越重要。用于加強保護數(shù)字化音視頻節(jié)目內(nèi)容的版權(quán)保護技術(shù),如數(shù)字版權(quán)管理技術(shù)(DigitalRightManagementDRM)等就應(yīng)運而生了,通過這些技術(shù)可以保證媒體文件內(nèi)容的完整性以及它們被合法使用。DRM等數(shù)字版權(quán)保護技術(shù),主要是通過對音視頻數(shù)據(jù)的加密處理,達到對內(nèi)容的可控使用。DRM技術(shù)中通常采用的對稱密鑰算法,分為塊加密(BlockCiphers)和流加密(StreamCiphers)算法。塊加密是一次加密成塊的數(shù)據(jù),一般是64位(8字節(jié))的文本。而流加密則加密位"流"——理論上講增量是一個位,但實現(xiàn)時通常每次作用于明文的一個字節(jié)——將連續(xù)生成的"密鑰流"與明文相組合。流加密的優(yōu)點是速度快,但是不如塊加密安全,塊加密特點則是安全性好、速度慢,剛好與流加密相反。在目前的DRM系統(tǒng)中,一般采用塊加密算法。在DRM技術(shù)中,對視頻文件的加密有以下幾種方式1.對待保護文件全部進行加密。這種方式不管保護內(nèi)容是什么格式,將其全部當(dāng)作需要加密的數(shù)據(jù)進行加密處理。在加密處理時,首先將文件按照加密算法的要求進行分塊處理,然后對每個數(shù)據(jù)塊進行加密,一般采用密碼分組鏈接模式(CipherBlockChainingCBC)。這種方式的優(yōu)點是不需要知道待保護文件的文件格式,可以對所有的文件進行加密處理,通用性非常強。但是經(jīng)過這種方式處理的流媒體文件,由于將流媒體的信息也一起處理了,不能使用流媒體承載協(xié)議,也不能被相應(yīng)的播放器識別,因此在使用前必須先將整個文件解密,一邊解密一邊使用。而且,將整個文件解密也增大了對內(nèi)容失控的風(fēng)險。對于大的流媒體文件,整個文件的解密也需要很大的緩存空間,間接增加了成本。2.按照實時傳輸協(xié)議(RTP)負載(PayLoad)進行加密處理。這種方式的處理可以在流媒體服務(wù)器上進行,也可以事先按照RTP打包的規(guī)律,事先對音視頻文件進行打包處理。在服務(wù)器端,如果對RTP負載進行加密,則會加重流媒體服務(wù)器的負擔(dān),嚴(yán)重影響流媒體服務(wù)器的性能。并且這種方式不能對下載播放的節(jié)目進行保護,而這對流媒體可能是最大的需求。如果在事先對音視頻文件進行打包處理,對于標(biāo)準(zhǔn)的流媒體服務(wù)器,是可行的。但是,目前很多流媒體協(xié)議都是在標(biāo)準(zhǔn)協(xié)議的基礎(chǔ)上進行了部分的私有化,因此無法保證能夠被流媒體協(xié)議正確的承載。在播放器端,由于服務(wù)器端的加密是針對RTP負載進行處理的,則解密必須在RTP解析后立即進行。這樣從RTP解析到解碼器會出現(xiàn)明文,增大了失控的危險性。
發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問題,就是提供一種基于DRM技術(shù)對視頻塊加密的方法,可以減輕客戶端解密的負擔(dān),并支持本地播放和網(wǎng)絡(luò)播放。本發(fā)明解決所述技術(shù)問題,采用的技術(shù)方案是,基于AVI格式的多媒體數(shù)據(jù)加密方法,包括以下步驟a.根據(jù)AVI文件格式,解析出視頻塊;b.對解析出的視頻塊進行部分加密并添加DRM信息;c.修改視頻塊長度信息;d.對下一個視頻塊進行部分加密并添加DRM信息;e.完成文件中所有視頻塊的上述處理后,修改文件長度信息。所述步驟a具體為al.分析AVI文件,解析出avihchunk和fccType是vids的strhchunk,從而得到視頻流的序號;a2.找到LISTmovi,進入LISTmovi下一層,如果存在LISTrec就繼續(xù)尋找,直到找fccType的開頭兩個字節(jié)組成的數(shù)字等于視頻流的序號的數(shù)據(jù)塊即為視頻塊。進一步的,步驟c為,如果存在LISTrec,加密完該記錄下的所有視頻塊后修改LISTrec的長度。進一步的,步驟c為,如果有索引信息,修改相應(yīng)的長度和偏移量。具體的,步驟b所述部分加密,是指對除去塊頭部分的視頻塊進行加密。本發(fā)明的有益效果是,能夠有效減輕客戶端解密的負擔(dān),并支持本地播放及網(wǎng)絡(luò)播放。圖l是本發(fā)明加密流程圖。具體實施方式下面結(jié)合附圖詳細描述本發(fā)明的技術(shù)方案。AVI(音視頻交叉AudioVideoInterleave)是一種音頻視像交插記錄的數(shù)字媒體文件格式,又是一種RIFF(ResourceInterchangeFileFormat)格式的文件。其視頻可以采用多種編碼方式,一般有以下幾種1)非壓縮格式的AVI文件,或者是MPEG1(—種編碼標(biāo)準(zhǔn))格式文件。2)DIVX(DigitalVideoExpress)格式的AVI,這是MPEG4的一種。3)XVID(ExcellentVideoData)格式的AVI,這也是MPEG4的一種,可以說是從DIVX變種而來的。4)ffdshow(全能的解碼、編碼器)MPEG4格式的AVI,現(xiàn)在越來越多的AVI都采用ffdshowMPEG4,集成了DIVX與XVID(還支持WMV(WindowsMediaVideo)及AC3音頻編碼標(biāo)準(zhǔn))。AVI文件結(jié)構(gòu)包含三部分文件頭、數(shù)據(jù)塊和索引塊。其中數(shù)據(jù)塊包含實際數(shù)據(jù)流,即圖像和聲音序列數(shù)據(jù),這是文件的主體,也是決定文件容量的主要部分,視頻文件的大小等于該文件的數(shù)據(jù)率乘以該視頻播放的時間長度。索引塊包括數(shù)據(jù)塊列表和它們在文件中的位置,以提供文件內(nèi)數(shù)據(jù)隨機存取能力。文件頭包括文件的通用信息,定義數(shù)據(jù)格式,所用的壓縮算法等參數(shù)。AVI數(shù)據(jù)結(jié)構(gòu)如下表所示:<table>tableseeoriginaldocumentpage5</column></row><table><table>tableseeoriginaldocumentpage6</column></row><table>RIFF文件使用四字符碼(Four-CharacterCodeF0URCC)來表征數(shù)據(jù)類型,比如'RIFF'、'AVI'、'LIST'等。RIFF文件首先含有一個下表所示的文件頭結(jié)構(gòu):<table>tableseeoriginaldocumentpage6</column></row><table>最開始的4個字節(jié)是一個四字符碼'RIFF',表示這是一個RIFF文件;緊跟著后面用4個字節(jié)表示此RIFF文件的大??;然后又是一個四字符碼說明文件的具體類型(比如AVI、WAVE(波形類型)等);最后就是實際的數(shù)據(jù)。注意文件大小值的計算方法為實際數(shù)據(jù)長度+4(文件類型域的大小);也就是說,文件大小的值不包括'RIFF'域和"文件大小"域本身的大小。RIFF文件的實際數(shù)據(jù)中,通常還使用了列表(List)和塊(Chunk)的形式來組織。列表可以嵌套子列表和塊。其中,列表的結(jié)構(gòu)為'LIST'listSizelistTypelistData。'LIST'是一個四字符碼,表示這是一個列表;listSize占用4字節(jié),記錄了整個列表的大??;listType也是一個四字符碼,表示本列表的具體類型;listData就是實際的列表數(shù)據(jù)。注意listSize值的計算方法為實際的列表數(shù)據(jù)長度+4(listType域的大小);也就是說listSize值不包括'LIST'域和listSize域本身的大小。塊的結(jié)構(gòu)為ckIDckSizeckData。ckID是一個表示塊類型的四字符碼;ckSize占用4字節(jié),記錄了整個塊的大?。籧kData為實際的塊數(shù)據(jù)。注意ckSize值指的是實際的塊數(shù)據(jù)長度,而不包括ckID域和ckSize域本身的大小。(注意在下面的內(nèi)容中,將以LIST(listType(listData))的形式來表示一個列表,以ckID(ckData)的形式來表示一個塊,如[OptionalElement]中括號中的元素表示為可選項。)AVI文件類型用一個四字符碼'AVI'來表示。整個AVI文件的結(jié)構(gòu)為一個RIFF頭+兩個列表(一個用于描述媒體流格式、一個用于保存媒體流數(shù)據(jù))+—個可選的索引塊。AVI文件的展開結(jié)構(gòu)大致如表l所示。首先,RIFF('AVI'…)表征了AVI文件類型。然后就是AVI文件必需的第一個列表——'hdrl'(頭列表HeaderList)列表,用于描述AVI文件中各個流的格式信息(AVI文件中的每一路媒體數(shù)據(jù)都稱為一個流)。'hdrl'列表嵌套了一系列塊和子列表——首先是一個'avih'(主AVI頭信息)塊,用于記錄AVI文件的全局信息,比如流的數(shù)量、視頻圖像的寬和高等。然后,就是一個或多個'strl'(流列表StreamList)子列表。(文件中有多少個流,這里就對應(yīng)有多少個'strl'子列表。)每個'strl'子列表至少包含一個'strh'(流的頭信息StreamHeader)塊禾口一個'strf'(流格式StreamFormat)塊,而'strd'(流數(shù)據(jù)StreamData)塊(保存編解碼器需要的一些配置信息)和'strn'(流名字StreamName)塊(保存流的名字)是可選的。首先是'strh'塊,用于說明這個流的頭信息,然后是'strf'塊,用于說明流的具體格式。如果是視頻流,則使用一個BITMAPINFO(位圖信息)數(shù)據(jù)結(jié)構(gòu)來描述;如果是音頻流,則使用一個WAVEFORMATEX(波形數(shù)據(jù)格式)數(shù)據(jù)結(jié)構(gòu)來描述當(dāng)AVI文件中的所有流都使用一個'strl'子列表說明了以后('strl'子列表出現(xiàn)的順序與媒體流的編號是對應(yīng)的,比如第一個'strl'子列表說明的是第一個流(Stream0),第二個'strl'子列表說明的是第二個流(Stream1),以此類推),'hdrl'列表的任務(wù)也就完成了,隨后跟著的就是AVI文件必需的第二個列表——'movi'(電影Movie)列表,用于保存真正的媒體流數(shù)據(jù)(視頻圖像幀數(shù)據(jù)或音頻采樣數(shù)據(jù)等)??梢詫?shù)據(jù)塊直接嵌在'movi'列表里面,也可以將幾個數(shù)據(jù)塊分組成一個'rec'(記錄Record)列表后再編排進'movi'列表。數(shù)據(jù)塊使用了一個四字符碼來表征它的類型,這個四字符碼由2個字節(jié)的類型碼和2個字節(jié)的流編號組成。標(biāo)準(zhǔn)的類型碼定義如下'db'(非壓縮視頻幀)、'dc'(壓縮視頻幀)、'pc'(改用新的調(diào)色板)、'wb'(音縮視頻)。比如,第一個流(Stream0)是音頻,則表征音頻數(shù)據(jù)塊的四字符碼為'00wb';第二個流(Stream1)是視頻,則表征視頻數(shù)據(jù)塊的四字符碼為'00db'或'00dc'。對于視頻,一個數(shù)據(jù)塊就是一幀數(shù)據(jù),而對于音頻則可能包含幾幀數(shù)據(jù)。最后,緊跟在'hdrl'列表和'movi'列表之后的,就是AVI文件可選的索引塊。這個索引塊為AVI文件中每一個媒體數(shù)據(jù)塊進行索引,并且記錄它們在文件中的偏移(可能相對于'movi'列表,也可能相對于AVI文件開頭)。索引塊使用一個四字符碼'idxl'(版本號為l的索引Indexl)來表征。還有一種特殊的數(shù)據(jù)塊,用一個四字符碼'JUNK'(垃圾)來表征,它用于內(nèi)部數(shù)據(jù)的隊齊(填充),應(yīng)用程序應(yīng)該忽略這些數(shù)據(jù)塊的實際意義。以上為AVI文件結(jié)構(gòu)描述,下面將描述基于塊的DRM加密流程,流程圖如圖l所示a.解析AVI文件,得到avihchunk和視頻流的序號對AVI文件頭進行解析,找出hdrl列表,然后在hdrl列表下一層找尋avihchunk,把avihchunk的內(nèi)容記錄下來。接著往下找,找到第一個strhchunk,如果strhchunk的fccType是vids則表示第一條流為視頻,否則繼續(xù)找其余的strhchunk,直到得到視頻流的序號。b.找到視頻塊,對視頻塊進行部分加密并添加DRM信息,修改視頻塊和LISTrec長度信息找到存放媒體數(shù)據(jù)的列表即movi列表。進入movi列表的下一層尋找數(shù)據(jù),如果數(shù)據(jù)為LISTrec,則進入LISTrec的下一層尋找fccType的開頭兩個字節(jié)組成的數(shù)字等于視頻流的序號的數(shù)據(jù)塊(即視頻塊),然后對視頻塊除去塊頭部分進行部分加密(采用塊加密算法),并在視頻塊后面添加針對此塊數(shù)據(jù)的DRM信息,包括DRM標(biāo)志、是否加密標(biāo)識、加密起始位置、加密間隔。當(dāng)LISTrec下的所有視頻塊都加密后,還要修改LISTrec的長度(原長度+rec包含的視頻塊數(shù)量4DRM信息長度)。如果視頻塊直接屬于movi列表的下一層則加密后只需修改視頻塊的長度(原長度+DRM信息的長度)即可。c.當(dāng)處理完所有視頻塊后修改文件長度信息d.如果文件存在索引,修改索引的偏移量和長度判斷avihchunk的dwFlags(雙字標(biāo)志DWORDFlags)是否包含AVIF—HASINDEX(AVI是否包含索引),如果不包含則說明文件不包含索引信息,處理完畢。否則要處理索引信息,當(dāng)遇到rec列表索引或視頻塊索引,修改索引的偏移量和長度。如果遇到其它索引,只需要修改索引的偏移量。處理完索引后文件處理完畢。以上方法適用于AVI格式視頻塊的加密處理。通過在每個視頻塊后面添加DRM信息,可以實現(xiàn)塊的部分加密。其中加密間隔控制塊內(nèi)部分加密,而是否加密標(biāo)識控制部分塊的加密。部分加密的優(yōu)點是可以減輕客戶端解密的負擔(dān)。該方法不僅適用于本地播放也適用于網(wǎng)絡(luò)播放,通用性很強,將此方法擴展,也可以應(yīng)用到其它格式的視頻文件。權(quán)利要求1.基于AVI格式的多媒體數(shù)據(jù)加密方法,其特征在于,包括以下步驟a.根據(jù)AVI文件格式,解析出視頻塊;b.對解析出的視頻塊進行部分加密并添加DRM信息;c.修改視頻塊長度信息;d.對下一個視頻塊進行部分加密并添加DRM信息;e.完成文件中所有視頻塊的上述處理后,修改文件長度信息。全文摘要本發(fā)明涉及視頻編碼技術(shù),特別涉及視頻數(shù)據(jù)的加密保護方法。本發(fā)明公開了一種基于AVI格式的多媒體數(shù)據(jù)加密方法,可以減輕客戶端解密的負擔(dān),并支持本地播放和網(wǎng)絡(luò)播放。本發(fā)明的技術(shù)方案是,基于AVI格式的多媒體數(shù)據(jù)加密方法,包括以下步驟a.根據(jù)AVI文件格式,解析出視頻塊;b.對解析出的視頻塊進行部分加密并添加DRM信息;c.修改視頻塊長度信息;d.對下一個視頻塊進行部分加密并添加DRM信息;e.完成文件中所有視頻塊的上述處理后,修改文件長度信息。本發(fā)明的有益效果是,能夠有效減輕客戶端解密的負擔(dān),并支持本地播放及網(wǎng)絡(luò)播放。文檔編號H04N7/24GK101222624SQ200710202928公開日2008年7月16日申請日期2007年12月7日優(yōu)先權(quán)日2007年12月7日發(fā)明者劉賢洪,焜陳申請人:四川長虹電器股份有限公司