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