2011-10-18 91 views
0

我想拍攝一個視頻文件,並使用java「加密」它。現在加密只是翻轉這些位。 我希望視頻仍能播放,因此標題需要保持完整。我發現很難找到標題有多大。 我試着用一個.avi文件,並假定這個鏈接的頭部大小爲AVI file details,但這似乎不起作用。然後,我終於猜測在離開第一個40kb(看起來非常大?)時保持不變,然後翻轉所有隨後的位。我猜這雖然成功,但視頻最後得到了錯誤,但在40kb處猜測並不是真的可以接受。然後我在這裏讀到.avi文件有一個預告片,所以我決定暫時避免它們,以避免這種額外的複雜性。.wmv文件的格式。 (或任何視頻文件將是偉大的)

有誰能告訴我.wmv文件的格式是什麼,關鍵是它的頭部大小。 如果沒有.wmv任何流行的視頻文件都可以!

道歉,如果這不清楚。

回答

1

正如其他人已經注意到ASF specification完全覆蓋了WMV/WMA媒體文件的格式。如果C#是您的選項,則有AsfMojo這是一個ASF文件解析器,即您可以使用AsfFile類的屬性輕鬆確定的標頭大小。

using (AsfFile asfFile = new AsfFile(@"C:\samples\sample.wmv")) 
{ 
    uint headerSize = asfFile.PacketConfiguration.AsfHeaderSize; 
} 

雖然這不會讓您加擾數據,因爲這會使文件無效。你不想打亂數據包,你想爭取個人有效載荷並保持一切完好無損。這通常是通過使用需要許可的編解碼器完成的(據我所知),否則文件將無法播放。

對於剛剛進入的有效載荷,你可以做這樣的事情:

using (AsfFile asfFile = new AsfFile(@"C:\samples\sample.wmv")) 
{ 
    var dataObject = asfFile.GetAsfObject<AsfDataObject>(); 
    foreach (var packet in dataObject.Packets) 
     foreach(var payload in packet.Payload) 
     { 
      //do something with the payload 
     } 
    } 
} 

如果您不能使用C#,您可以使用該項目至少爲如何在通用解析ASF文件的指南。

+0

我不能用這個權利查看有效載荷的位?還是我嘗試錯了?相反,我存儲了每個數據包中的所有有效負載,重新排列並將它們放回到隨機數據包中,因此我有一個「混亂」的asfObject,但我似乎無法弄清楚如何將asfObject寫入AsfFile,也不能我寫了任何AsfFile。有沒有這些方法或不可能?我嘗試使用Streamwriter編寫,我只是在我的輸出文件中獲得「AsfMojo.File.AsfFile」。 – James

1

這不僅僅是您必須擔心的標題。很多視頻都有一個「全局」標題,然後每個單獨的視頻幀都有自己的標題。不是視頻中的每一幀都是平等的。一些幀可能是整個圖像。一些幀只會是最後一幀的差異,等等...

跳過全局標題,然後加密其餘的仍然會導致一個完全損壞的視頻文件,因爲你已經損壞了所有的子標題比特以及實際的視頻數據。

所以,最大的問題是,爲什麼你想讓它看起來像一個視頻,但有垃圾顯示?如果你試圖保護內容,那麼你最好在不考慮標題/內容的情況下加密整個文件。

1

如果您翻轉視頻文件中的位,即使您避免標題,您也可能會使其無法播放。通常存在分散在整個文件中的「元」信息。即使您避免這種情況,翻轉一些位也可能會干擾壓縮並導致圖像質量受到嚴重干擾。

+0

有關如何只針對文件中的數據並保留元數據的任何建議? OpenCV或JMF會有什麼用處?或者,我最好還是試圖弄清楚數據/元數據的外觀。 – James

1

.WMV格式文件:Advanced Systems Format (ASF) Specification

通常情況下,您可以在開始時加密整個文件或固定的文件大小,以防萬一您可以(並且有API)在內存中或解密到臨時文件並從那裏播放。

或者,您可以加載附加新/自定義/私有媒體類型的有效負載流,以便在播放時調用自定義處理程序以解碼/解密數據。

相關問題