使用MCI从内存中播放avi流

时间:2009-03-02 09:48:44

标签: c# c++ windows avi

我正在尝试使用C#中的MCI播放压缩的AVI文件。到目前为止,我可以通过打开文件来播放它。

我打开文件的方式是:

String opencommand = "open \"" + file + "\" type mpegvideo alias someMovie shareable";    
int error;    
error = Avi.mciSendString(opencommand, null, 0, IntPtr.Zero);

其中file是文件路径。视频以这种方式播放。

如果我能够从已经使用avifil32.dll中的AVIFileOpen()AVIFileGetStream()加载的流中播放它,那将会更好。从MSDN文档中,我似乎应该能够做到这一点。他们这样说here

  

“MCI可以使用a打开AVI文件   文件接口指针或   流接口指针。打开一个   使用任一类型的接口文件   指针,指定一个at符号(@)   接着是接口指针   文件或设备名称的位置   lpszDevice参数。更多   有关文件和流的信息   接口,请参阅“AVIFile函数和   宏。“”

但不幸的是,他们没有详细说明,我不知道我应该做什么。 “流接口指针”实际意味着什么,我从哪里得到一个?因为MSDN肯定不会试图解释他们发明的术语。

1 个答案:

答案 0 :(得分:0)

所以部分回答我自己的问题:接口指针的假设用法似乎是这样的:

Avi.AVIFileOpen(ref aviFile, fileName, Avi.OF_SHARE_DENY_WRITE, 0);
Avi.mciSensString("open @" + aviFile + " type mpegvideo alias someMovie", null, 0, IntPtr.Zero);

其中“aviFile”是指向由AviFileOpen()填充的文件接口的指针。我还尝试使用AviFileGetStream()获取流接口指针并将其传递给MCI,但两个指针都不起作用,MCI抱怨它无法找到该文件。

根据MS,这是一个已知的,未解决的当然,bug所以除了将文件路径传递给MCI之外,没有什么可做的。