0

我想拍摄一个视频文件并使用 java 对其进行“加密”。现在加密只是翻转比特。我希望视频仍然能够播放,因此标题需要完好无损。我发现很难找到标题有多大。我尝试使用 .avi 文件并使用此链接AVI 文件详细信息假定标题大小,但这似乎不起作用。然后我最终猜想保持前 40kb(看起来很大?)完好无损,然后翻转后面的所有位。这成功了,我猜虽然视频最后有问题,但猜测 40kb 是不可接受的。然后我在这里读到 .avi 文件有一个预告片,所以我决定暂时避免使用它们以避免这种额外的复杂性。

谁能告诉我 .wmv 文件的格式是什么,最重要的是它的标题的大小。如果不是 .wmv,任何流行的视频文件都可以!

如果不清楚,请道歉。

4

4 回答 4

1

您需要担心的不仅仅是标题。很多视频都有一个“全局”标题,然后每个单独的视频帧都有自己的标题。并非视频中的每一帧都是平等的。有些帧可能是整个图像。有些帧只会是与最后一帧的区别,等等......

跳过全局标题然后加密其余部分仍然会导致视频文件完全损坏,因为您已经破坏了所有子标题位以及实际视频数据。

所以,最大的问题是,为什么你想让它看起来像一个视频,但显示垃圾?如果您试图保护内容,那么最好加密整个文件而不考虑标题/内容。

于 2011-10-18T15:08:46.863 回答
1

如果您翻转视频文件中的位,即使您避开标题,也可能会使其无法播放。通常有“元”信息散布在整个文件中。即使您避免了这种情况,翻转一些位也可能会干扰压缩并严重破坏图像质量。

于 2011-10-18T15:10:12.533 回答
1

.WMV 文件的格式:高级系统格式 (ASF) 规范

通常,您会在开始时加密整个文件或固定文件大小,以防您可以(并拥有 API)在内存中解密或解密到临时文件并从那里播放。

或者,您将加密附加新/自定义/私有媒体类型的有效负载流,以便在播放时调用您的自定义处理程序以解码/解密数据。

于 2011-10-18T15:54:33.383 回答
1

正如其他人所指出的,ASF 规范完全涵盖了 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 文件的指南。

于 2011-10-29T20:44:36.853 回答