正如其他人所指出的,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 文件的指南。