Как проще всего вывести видео?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 07.06.03 07:24
Оценка:
Записываю я его как хочу, так что если нужен спец формат — будет
Пока первое что пришло в голову из простых соображений, это грузить немой AVI в Animation Contorol (один из Common Controls) а музыку играть через DirectSound (который и так есть в программе)
Вроде как проще некуда Однако способ явно левый. Вывод видео далеко не самая важная часть, так что хотелось бы найти быстрый (в плане написания, 5-10% производительности меня не волнуют) способ.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: Как проще всего вывести видео?
От: Alexmoon Украина  
Дата: 07.06.03 07:36
Оценка:
Здравствуйте, adontz, Вы писали:

A>Записываю я его как хочу, так что если нужен спец формат — будет

A>Пока первое что пришло в голову из простых соображений, это грузить немой AVI в Animation Contorol (один из Common Controls) а музыку играть через DirectSound (который и так есть в программе)
A>Вроде как проще некуда Однако способ явно левый. Вывод видео далеко не самая важная часть, так что хотелось бы найти быстрый (в плане написания, 5-10% производительности меня не волнуют) способ.

DirectShow тебе очень поможет. И начни с описания интерфейса IGraphBuilder.
В инете есть описания построения графов даже на русском.
Re[2]: Как проще всего вывести видео?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 07.06.03 07:42
Оценка:
Здравствуйте, Alexmoon, Вы писали:

A>DirectShow тебе очень поможет. И начни с описания интерфейса IGraphBuilder.

A>В инете есть описания построения графов даже на русском.

Ээээ видишь ли, я там в MSDN, как открыл DirectShow 9 Reference=>Interfaces ,а потом долго прокручивал список интерфейсов и добрался до его конца совсем не скоро.....
Мне бы написать это хреново видео за день и забыть
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[3]: Как проще всего вывести видео?
От: Alexmoon Украина  
Дата: 07.06.03 08:20
Оценка: 16 (1)
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, Alexmoon, Вы писали:


A>>DirectShow тебе очень поможет. И начни с описания интерфейса IGraphBuilder.

A>>В инете есть описания построения графов даже на русском.

A>Ээээ видишь ли, я там в MSDN, как открыл DirectShow 9 Reference=>Interfaces ,а потом долго прокручивал список интерфейсов и добрался до его конца совсем не скоро.....

A>Мне бы написать это хреново видео за день и забыть

Смотреть нужно не на объем, а на суть: попытаюсь насколько получится тебе разъяснить.
Там основной интерфейс IGraphBuilder. Остальные служат только для управления потоком проходящим через граф фильтров.
Сейчас попробую сделать вырезки необходимой инициализации. Там делается все за несколько часов, естественно после предварительного прочтения всего.
На синтаксис не смотри. Я пишу только суть.

вот список форматов для которых IGraphBuilder умеет строить граф автоматически:

#define FILE_FILTER_TEXT \
    TEXT("Video Files (*.avi; *.qt; *.mov; *.mpg; *.mpeg; *.m1v)\0*.avi; *.qt; *.mov; *.mpg; *.mpeg; *.m1v\0")\
    TEXT("Audio files (*.wav; *.mpa; *.mp2; *.mp3; *.au; *.aif; *.aiff; *.snd)\0*.wav; *.mpa; *.mp2; *.mp3; *.au; *.aif; *.aiff; *.snd\0")\
    TEXT("MIDI Files (*.mid, *.midi, *.rmi)\0*.mid; *.midi; *.rmi\0") \
    TEXT("Image Files (*.jpg, *.bmp, *.gif, *.tga)\0*.jpg; *.bmp; *.gif; *.tga\0") \
    TEXT("All Files (*.*)\0*.*;\0\0")


IGraphBuilder  * m_pGB;

IMediaControl  * m_pMC;
IMediaEventEx  * m_pME;
IVideoWindow   * m_pVW;
IBasicAudio    * m_pBA;
IBasicVideo    * m_pBV;
IMediaSeeking  * m_pMS;
IVideoFrameStep* m_pFS;



HRESULT InitGraphBuilder(void)
{
    ::CoInitializeEx(NULL, COINIT_MULTITHREADED);
    ::CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**)&m_pGB);
}

//все остальные интерфейсы получаешь с помощью QueryInterface, т.е. можно предположить, что реализует их один объект,
//но я думаю, что с майкрософтом легкими путями не разминешся и поэтому ты если будешь все оформлять одним классом, то
//в конструкторе ты вспомогательные интерфейсы сразу не получишь, пока не проведешь всю необходимую для них инициализацию
//и поэтому для них нужно будет предусмотреть механизм инициализации по требованию.

void ReleaseGraphBuilder(void)
{
        m_pGB.Release();
    ::CoUninitialize();
}

HRESULT STDMETHODCALLTYPE RenderFile(LPCWSTR _wstrFile, LPCWSTR _wstrPlayList)
{
    return (!m_pGB) ? E_NOINTERFACE : m_pGB->RenderFile(_wstrFile, _wstrPlayList);
}

void ShowVideo(void)
{

        //инициализировать построитель графов
        InitGraphBuilder();        
        //построить граф
        m_pGB.RenderFile(my filename, 0);
        //установить окно получающее события уведомления
    m_pVW->SetNotifyWindow((OAHWND)m_hOwner, WM_INIT_GRAPHNOTIFY, (long)m_pGB);

    //зарегистрировать родительское окно для video window
        m_pVW->put_Owner((OAHWND)m_hOwner);
    //установить стили для video window
        m_pVW->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
    
    m_pVW->SetWindowPosition(left, top, lWidth, lHeight);
    m_pVW->SetWindowForeground(OATRUE);
    m_pVW->HideCursor(OATRUE);

    //запустить процесс преобразования медиа потока через цепь фильтров
        HRESULT _hres = m_pMC->Run();
}

//для наиболее быстрого освобождения графа достаточно сделать Release всем интерфейсам
//другой способ - это остановить рендеринг и удалить все фильтры из графа
//если ты не удалишь все фильтры из графа, то два источника при повторном построении графа объединятся

//это достаточный минимум для воспроизведения

//написал тебе, правда из памяти, за 5 минут. Остальное также просто, конечно после первого знакомства,
//но без этого на сегодняшний день воспроизводить медиа потоки сплошной .....
//кстати упомяну, что написано в МСДН. DirectShow технология при установленном DirectX использует ее механизмы,
//а без него использует VFW

//удачи. все не смогу тебе одним письмом объяснить, да оно далее также просто как GUI Windows.
Re: Как проще всего вывести видео?
От: MAKCblM Россия  
Дата: 07.06.03 16:09
Оценка: 24 (1)
Здравствуйте, adontz, Вы писали:

A>Записываю я его как хочу, так что если нужен спец формат — будет

A>Пока первое что пришло в голову из простых соображений, это грузить немой AVI в Animation Contorol (один из Common Controls) а музыку играть через DirectSound (который и так есть в программе)
A>Вроде как проще некуда Однако способ явно левый. Вывод видео далеко не самая важная часть, так что хотелось бы найти быстрый (в плане написания, 5-10% производительности меня не волнуют) способ.

Есть еще MCI Window (см. в MSDN функции с префиксом MCI), вообще все элементарно.
Но я бы тоже рекомендовал DirectShow — более перспективный способ (MCI — еще от времен Win3.1 тянется), поддерживает гораздо больше форматов, быстрее и т.д. Используешь его — потом пригодится. А по сложности — ненамного сложнее (если только для проигрывания роликов).
Re[2]: Как проще всего вывести видео?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 07.06.03 21:11
Оценка:
Здравствуйте, MAKCblM, Вы писали:

MAK>Но я бы тоже рекомендовал DirectShow — более перспективный способ (MCI — еще от времен Win3.1 тянется), поддерживает гораздо больше форматов, быстрее и т.д. Используешь его — потом пригодится. А по сложности — ненамного сложнее (если только для проигрывания роликов).


Вобщем откопал в SDK PlayWnd Sample, вроде то, что надо и размер не большой. Будем изучать
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: Как проще всего вывести видео?
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 08.06.03 15:47
Оценка:
Здравствуйте, adontz, Вы писали:

A>Вывод видео далеко не самая важная часть, так что хотелось бы найти быстрый (в плане написания, 5-10% производительности меня не волнуют) способ.


вот это — http://www.codeproject.com/audio/mp3player.asp видел?
Re[2]: Как проще всего вывести видео?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 08.06.03 17:50
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>вот это — http://www.codeproject.com/audio/mp3player.asp видел?


То есть использовать Video For Windows? Тоже идея, посмотрим.. вообще-то это мне даже больше нравиться, не так громоздко
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: Как проще всего вывести видео?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 08.06.03 20:37
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>вот это — http://www.codeproject.com/audio/mp3player.asp видел?


Уау как кульно! 2 строчки кода и у меня уже есть видео! Я даже не мечтал о таком!
Кстати, правильно ли я понял, что там используеться [ActiveX] Windows Media Player?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[3]: Интересно как это будет уживаться с DirectGraphics9..
От: adontz Грузия http://adontz.wordpress.com/
Дата: 08.06.03 20:43
Оценка:
Интересно как это будет уживаться с DirectGraphics9.....
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[3]: Как проще всего вывести видео?
От: Alexmoon Украина  
Дата: 09.06.03 08:52
Оценка: 18 (1)
Здравствуйте, adontz, Вы писали:

A>То есть использовать Video For Windows? Тоже идея, посмотрим.. вообще-то это мне даже больше нравиться, не так громоздко.

VFW — это наследие Windows 3x линейки, да и проще не всегда лучше. Не так громоздко, обозначает еще и не так быстро.
Не делай так. Ты посмотри по внимательней на DirectShow и после первого продукта его использующего ты поймешь, что это не сложнее, если упупстить просто инициализацию COM. Но куда ты сегодня без COM?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.