AviFile API:将WAV文件添加到AVI文件而不将其加载到RAM中

时间:2013-08-29 10:56:00

标签: .net winapi interop

在我的C#应用​​程序中,我正在与AviFile API进行互操作。我想将WAV文件作为音轨添加到静音AVI文件中。

下面的代码没有问题。但是,它将整个WAV文件加载到RAM中。 如何在不需要那么多记忆的情况下实现同样的目标呢?

如果使用AviFile API是不可能的,那么是否有任何C#库可以实现相同的目标?

Avi.AVISTREAMINFO streamInfo = new Avi.AVISTREAMINFO();
Avi.PCMWAVEFORMAT streamFormat = new Avi.PCMWAVEFORMAT();
int streamLength = 0;

IntPtr rawData = newStream.GetStreamData(ref streamInfo, ref streamFormat, ref streamLength);
IntPtr waveData = rawData;
IntPtr aviStream;
int result = Avi.AVIFileCreateStream(aviFile, out aviStream, ref streamInfo);


result = Avi.AVIStreamSetFormat(aviStream, 0, ref streamFormat, Marshal.SizeOf(streamFormat));

Avi.AVIStreamWrite(aviStream, 0, streamLength, waveData, streamLength, Avi.AVIIF_KEYFRAME, 0, 0);

Avi.AVIStreamRelease(aviStream);

Marshal.FreeHGlobal(waveData);

1 个答案:

答案 0 :(得分:0)

您可以手动打开wav文件并读取数据。在这种情况下,您必须手动交错A / V数据并自行创建avi。添加JUNK块,索引和其他所需的东西可能会很棘手。但是,如果您了解avi / RIFF架构,那么它是100%可行的。