базовое воспроизведение с программно созданным Windows Media Player

Я пыталсяпросто быстро интегрируйся Проигрыватель Windows Media через COM для воспроизведения отдельных файлов из локальной файловой системы или источников http - но из-за скудной документации и сетевых ресурсов, которые можно использовать, когда они не встроены в какой-либо контейнер Ole, я не смогчтобы якобы этот тривиальный вариант использования работал.

Инициализация и т. Д. Работает нормально, но на самом деле воспроизведение какого-либо файла всегда дает сбой

Пример кода, начиная с инициализации (обработка ошибок удалена, в основном переводится изПример C # на MSDN, выполненный в основном потоке):

CComPtr player;
player.CoCreateInstance(__uuidof(WindowsMediaPlayer), 0, CLSCTX_INPROC_SERVER);
CComQIPtr core(player);
CComPtr controls;
core->get_controls(&controls);
CComPtr playlist;
core->get_currentPlaylist(&playlist);
CComBSTR path("c:\\bar.mp3"); // alternatively http://foo/bar.mp3

Первый подход к игре что-то даеткоманда недоступна ":

core->put_url(path);
// ... waiting after that for WMP to load doesn't make a difference
controls->play(); // returns 0x000D1105 - NS_S_WMPCORE_COMMAND_NOT_AVAILABLE

Второй подход только производитS_OKс, но на самом деле ничего не играется:

CComPtr media;
core->newMedia(path, &media);
playlist->appendItem(media);
controls->playItem(media); // returns S_OK, but doesn't play

Еще я заметил, чтоcore->get_playState() всегда возвращаетсяwmposMediaOpeningсколько бы я ни ждал.

Мы наткнулись на один поток, который предполагает, что многопоточность может не работать должным образом с WMP, и этот код выполняется в многопоточной среде. Может ли это быть проблемой?

Если нет, что еще может помешать WMP воспроизводить файлы?

Известный фон:

Экземпляр WMP создается в DLL с браузером в качестве хост-процесса.

Обновить:

Попытка простого DirectShow, который WMP должен использовать сам, демонстрирует более конкретную проблему - см.вопрос для этого.

Ответы на вопрос(2)

Ваш ответ на вопрос