Проиграть .wmv видео

Тема в разделе "MS Visual C++", создана пользователем -, 11 фев 2011.

  1. Гость

    Здравствуйте, уважаемые форумчане! Я дошёл в изучении C++ до мультимедиа, и застрял на воспроизведении видео. Нужно воспроизвести видеофайл в формате .wmv Просмотрел весь инет, но ничего кроме описаний AVI и DirectShow не нашёл. Может быть, вы мне подскажете, как это можно сделать (естественно, со звуком, в своём собственном окне, не используя DirectShow, и по возможности не используя кодеки, то есть стандартными средствами Windows)? Пока что работаю через mciSendString:
    Код (C++):
    mciSendString ("Open intro.wmv type mpegvideo alias myFile", NULL, 0, 0);
    mciSendString ("Play myFile", NULL, 0, 0);
    mciSendString ("Close myFile", NULL, 0, 0);
    У этого способа три недостатка:
    1. По видимому, создаётся новый поток, и главному потоку приходится ожидать конца видео. В таком случае, как узнать длительность видеофайла?
    2. Не могу управлять создаваемым окном, например, изменить его размер или развернуть в полный экран, так как не знаю HWND. А если бы и знал, то растягивалось бы изображение до размера окна...
    3. На старом компе ОЧЕНЬ сильно тормозиииииит. На том же компе в Winamp-е всё идёт нормально.
    Заранее благодарю за любую помощь.
     
  2. Гость

    Кстати а IAVIFile может .wmv воспроизводить?
     
  3. Гость

    Ну скажите хотя бы какой тут кодек нужен для .wmv видео и как им пользоваться? Или вы и этого не знаете?
     
  4. Гость

    Вы что вообще с видео дела никогда не имели? Тогда немного изменю свой вопрос:
    Даже если я нашёл хэндл этого ActiveMovie Window - как мне развернуть его в полный экран? Например присоединить к нему DirectDraw. Только это не получается... А стандартными средствами Windows на полный экран окна разворачиваются? Или тут только мультимедийные библиотеки помогут?
     
  5. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Есть такая штука, DirectShow называется:
    Код (C++):
    #include <dshow.h>

    int main()
    {
    long            eventCode;
    IGraphBuilder * pGraphBuilder;
    IMediaControl * pMediaControl;
    IMediaEvent *   pMediaEvent;
    CoInitialize( NULL );
    CoCreateInstance( CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (LPVOID *)&pGraphBuilder );
    pGraphBuilder->QueryInterface( IID_IMediaControl, (LPVOID *)&pMediaControl );
    pGraphBuilder->QueryInterface( IID_IMediaEvent, (LPVOID *)&pMediaEvent );
    pMediaControl->RenderFile( L"c:\\biz\\test2.avi" );
    pMediaControl->Run();
    pMediaEvent->WaitForCompletion( -1, &eventCode );
    pMediaControl->Release();
    pGraphBuilder->Release();
    CoUninitialize();
    return 0;
    }
    http://msdn.microsoft.com/en-us/library/dd...v=vs.85%29.aspx
    WMV тоже должен воспроизводится. Полный экран тоже можно сделать.
     
  6. Гость

    Да? Странно. Этот DirectShow всё время пылился у меня под рукой, а я его и не замечал?...
    Но ещё вопрос. А... какая либа нужна этому DirectShow'у? Quartz что-то не катит

    Добавлено: Вообще проблема в том, что Visual C++ не может найти четыре внешних символа:
    DShow.obj : error LNK2001: unresolved external symbol _IID_IMediaEvent
    DShow.obj : error LNK2001: unresolved external symbol _IID_IMediaControl
    DShow.obj : error LNK2001: unresolved external symbol _CLSID_FilterGraph
    DShow.obj : error LNK2001: unresolved external symbol _IID_IGraphBuilder
     
  7. Гость

    Всё, проблему решил. Остаётся только один вопрос - как запустить DirectShow в своём окне?
     
  8. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
  9. Гость

    Кое-что в DirectShow я понял. Но без этой штуки тоже можно многие форматы воспроизводить. Например, существует mmio. Начал с ним работать - сразу куча проблем. Самая главная проблема - каким кодом fourcc обозначаются разделы видео и аудио в wmv видео, если видео сжато Windows Media Video V8 (WMV2), аудио сжато Windows Media Audio (WMA). Хотя возможно кодеки тут значения не имеют. В примере программы главный RIFF раздел ищется по коду "WAVE". А какой код нужен мне?
     
  10. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    На сколько я знаю mmio не используется для проигрывания (декодирования) видео, он используется для чтения/записи.
     
  11. Гость

    Для проигрывания или декодирования - нет. Мне нужно именно прочитать данные из файла, а с декодированием и выводом на экран я уже разобрался. Мне нужно знать структуру WMV файла. То есть какие разделы и в каком порядке в нём расположены.
     
  12. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Очень хочется спросить.. а тебе это зачем?
     

    Вложения:

  13. Гость

    Просто не хочется юзать DirectShow ;) Ну и со своим форматом работать проще.
     
  14. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Что-то я не понял.. а как ты собираешься проигрывать WMV файл если DirectShow юзать не хочешь?
     
Загрузка...
Похожие Темы - Проиграть wmv видео
  1. alexas
    Ответов:
    2
    Просмотров:
    1.168

Поделиться этой страницей