【发布时间】:2013-09-03 06:40:55
【问题描述】:
我正在创建自己的视频文件格式,并想写出文件头和帧头。
目前我只有这样定义的占位符:
byte[] fileHeader = new byte[FILE_HEADER_SIZE * sizeof(int)];
byte[] frameHeader = new byte[FRAME_HEADER_SIZE * sizeof(int)];
我使用以下文件头将它们写出来:
fsVideoWriter.Write(fileHeader, 0, FILE_HEADER_SIZE);
这对于帧头:
fsVideoWriter.Write(frameHeader, 0, FRAME_HEADER_SIZE);
现在我实际上需要正确使用这些标题,我不确定这是否是编写它们的最方便的方法,因为我不确定在我的各个字段中是否易于阅读需要与标题分开变量。
我想过做如下的事情:
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct FileHeader
{
public int x;
public int y;
public int z;
// etc. etc.
}
我想以这样一种方式定义它,以便我可以随着文件格式的发展而轻松升级(即包括版本号)。这是定义文件/帧头的推荐方法吗?如果是这样,我应该如何使用 .NET FileStream 类读/写它?如果这不是推荐的方法,请提出正确的方法,因为也许有人已经创建了一个通用的视频文件相关类来处理这种事情?
【问题讨论】:
-
我想我可以使用 Marshal.PtrToStructure() 和 Marshal.StructureToPtr(),但我想避免使用非托管代码。
标签: c# .net header filestream file-format