Использование MCI для воспроизведения потока AVI из памяти - PullRequest
1 голос
/ 02 марта 2009

Я пытаюсь воспроизвести сжатый файл AVI, используя MCI в C #. Пока что мне удалось воспроизвести его, открыв файл.

Я открыл файл так:

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

Где file - путь к файлу. Видео воспроизводится нормально таким образом.

В моем случае было бы намного лучше, если бы я мог воспроизвести его из потока, который уже загружен с использованием AVIFileOpen() и AVIFileGetStream() из avifil32.dll. Из документации MSDN кажется, что я должен быть в состоянии сделать это. Они так говорят здесь :

"MCI может открывать файлы AVI с помощью указатель на интерфейс файла или указатель на интерфейс потока Чтобы открыть файл с использованием любого типа интерфейса указатель, укажите знак (@) сопровождаемый указателем интерфейса в место файла или имя устройства для параметр lpszDevice. Для большего информация о файле и потоке интерфейсы, см. «Функции AVIFile и Макросы. ""

Но, к сожалению, они не вдавались в детали, и я понятия не имею, что я должен делать. Что на самом деле означает «указатель интерфейса потока» и откуда его взять? Потому что MSDN, конечно, не пытается объяснить выдуманные ими термины.

1 Ответ

0 голосов
/ 03 марта 2009

Итак, частично, на мой вопрос: предполагаемое использование указателя интерфейса выглядит примерно так:

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, это известная, конечно, нерешенная, ошибка , поэтому здесь нечего делать, кроме передачи пути к файлу в MCI.

...