我正在尝试在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可以通过以下方式打开AVI文件:
  文件接口指针或
  流接口指针。打开一个
  通过使用任何一种接口文件
  指针,指定一个at符号(@)
  其次是接口指针
  文件或设备名称的位置
  lpszDevice参数。欲了解更多
  有关文件和流的信息
  接口,请参见“ AVIFile函数和
  宏。”


但不幸的是,它们没有详细介绍,我也不知道该怎么做。 “流接口指针”实际上是什么意思,我从哪里得到?因为MSDN肯定不会尝试解释他们发明的术语。

最佳答案

因此,要部分回答我自己的问题:接口指针的假定用法似乎是这样的:

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外,这里没有其他事情要做。

09-19 14:10