一個視頻文件包含多少0和1呢?
我們的世界分為模擬和數字兩類,你問的文件應該是數字系統中的文件,而不是生活中的實體文件。數字世界中的一切都只有兩個基本元素,高電平和低電平(也就是0和1)。這些0和一在數字系統中是最小單位比特的數值(二進制數,不同于我們生活中常用的十進制數)。無論是處理器執行的程序還是各種文件(包括視頻文件)。一個文件包含多少0和1,完全取決于這個文件的大小和內容(每個字節數據8比特,一個比特不是0就是1)。下面兩個圖是我工作中用到的MIPS cpu可執行程序和視頻流文件的二進制顯示內容:
MIPS可執行程序二進制編碼
TS流視頻文件二進制編碼
由上面兩個文件截圖不難看出,其實所有的數字文件都是二進制編碼(也就是0和1的組合)。比如0x47就是01000111。
我們再來看看視頻文件能不能被提取出來的問題。正所謂沒有規矩不成方圓,正常情況下,視頻文件都是按照一定的格式組成的,當播放器拿到視頻文件后,首先識別它是那種格式的編碼(MEPG2,MPEG3,H264…),然后按照相應格式的協議去解析,從而將視頻的內容信息提取并顯示出來(注意,這里是正常情況,后面還會介紹不能提取的情況)。我們以ts視頻文件為例進行介紹(這里只借助該協議來說明視頻是有格式的道理,并不深究協議的具體內容)。
TS流協議簡圖
以上面我貼出TS視頻文件二進制截圖為例,第一個字節0x47就是標識這個流文件是TS流,然后依次按照ts流協議去解析,每個包信息188字節數據。從這里可以看出,按照視頻的協議可以將視頻文件里面的視頻數據一個個提取出來,這也是我們數字機頂盒通過電視播放一些節目的過程。
但是我們實際生活中,無論各大影視公司(福克斯,迪士尼,華誼兄弟,…),還是節目運營商(各大有線電視公司,廣電,…)是不希望讓需要付費的影視作品被大家隨意提取出來的,畢竟他們要賺錢的嘛。那么他們是怎么做的呢?道理很簡單,對收費節目進行加密!實際場景不同,加密收費系統(DRM,PayTV等等)會有差異,但是道理都是一樣的。下面以我很熟悉的PayTV系統做簡單講解。
收費電視系統中要求比較高的廠商會要求數字機頂盒的CPU制造商在芯片的設計階段就一起進行設計方案的安全審核和討論,他們自己有一套安全啟動,密鑰派生和節目保密流程。這里簡單給出某高安公司的密鑰產生簡圖,以便大家理解。
密鑰產生示意圖
以上各個密鑰的具體含義不做贅述,大家只要知道每個密鑰都有自己特定的用處就可以了。這些密鑰都是任何人都不知道的(工廠以黑盒的方式進行燒寫芯片),另外每個機頂盒主芯片里面的密鑰數據一般也都不一樣的,唯一的(高安公司有自己的秘密數據庫存儲算法)。當一個加密的視頻文件被客戶拿到后,所有數據是加密的(一般采取對稱加密算法:AES或者TDES),不能通過任何視頻協議解析出來,只有授權的機頂盒里面的處理器CPU才能通過相應密鑰解密出明文,相應明文視頻流數據是符合某種視頻格式的,但是這些明文數據又可能被其他多媒體保護的方式給保護起來。也就是除了電視或顯示器能看到節目,其他整個過程都拿不到明文的視頻數據。
所以本質上來說,所有視頻文件都是0和1組成,并且有協議在里面,通過協議解析可以的到視頻數據。但是,實際生活中很多運營商都是要收費的,所以他們會用各自私有的一套加解密系統對自己的知識產權進行保護,從而導致我們很難提取出被保護的視頻文件內容。