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