.wmv文件的格式。 (或任何视频文件都会很棒)

时间:2011-10-18 15:01:53

标签: java video avi wmv

我想拍摄视频文件并使用java“加密”它。目前加密只是翻转位。 我希望视频仍能播放,因此标题必须完好无损。我发现很难找到标题的大小。 我尝试使用.avi文件,并使用此链接AVI file details假设标题大小,但这似乎不起作用。然后我最终猜到了将第一个40kb(看起来非常大?)完好无损,然后翻转了所有后续的位。虽然视频最终会出现问题,但我认为这是成功的,但猜测40kb是不可接受的。然后我在这里读到.avi文件有一个预告片,所以我决定暂时避开它们以避免这种额外的复杂情况。

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

如果不清楚,请道歉。

4 个答案:

答案 0 :(得分:1)

这不仅仅是你必须担心的标题。许多视频都有一个“全局”标题,然后每个视频帧都有自己的标题。并非视频中的每个帧都相同。一些帧可以是整个图像。有些帧只是与最后一帧等的差异......

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

.WMV档案的格式:Advanced Systems Format (ASF) Specification

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

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

答案 3 :(得分: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文件的指南。