Пример воспроизведения видео с помощью DirectShow

Предыдущая тема Следующая тема Перейти вниз

Пример воспроизведения видео с помощью DirectShow

Сообщение  trew в Вс Янв 30, 2011 4:56 pm

С этим DirectShow убил кучу времени. На английском форуме хрен помогут... Evil or Very Mad Пример идущий вместе с компилятором, наоборот только запутает новичка. Кто только создавал его, и для кого это сделано.... Наверно многие считают, что это круто, когда пишешь и другие ушами хлопают разбирая более 800 строчек твоего кода, да еще в нескольких файлах. На мой взгляд надо решать задачу коротким, понятным кодом, а не выпендриваться. Вот пример воспроизведения видеофайла:

Код:
#include once "win/dshow.bi"
#Include once "windows.bi"

Dim as HWND                                    hwnd
Dim As MSG                                    msg
Dim As IGraphBuilder  Ptr              pGraph
Dim As IMediaControl  Ptr              pControl
Dim As IMediaEvent    Ptr              pEvent
Dim As IVideoWindow    Ptr              vidwindow
Dim As IMediaSeeking  Ptr              medseek


hWnd = CreateWindowEx( 0, "#32770", "Video", WS_OVERLAPPEDWINDOW Or WS_VISIBLE, 100, 100, 336, 278, 0, 0, 0, 0 )

Var hr = CoInitialize(0)
if (FAILED(hr)) Then
   MessageBox(0,"ERROR - Could not initialize COM library","Error",0)
   End
EndIf
hr = CoCreateInstance(@CLSID_FilterGraph,NULL, CLSCTX_INPROC_SERVER,@IID_IGraphBuilder, @pGraph)
if (FAILED(hr)) Then
   MessageBox(0,"ERROR - Could not create the Filter Graph Manager.","Error",0)
   End
EndIf
hr = IGraphBuilder_QueryInterface(pGraph,@IID_IMediaControl, @pControl)
hr = IGraphBuilder_QueryInterface(pGraph,@IID_IMediaEvent, @pEvent)
hr = IGraphBuilder_QueryInterface( pGraph, @IID_IVideoWindow, @vidwindow )
hr = IGraphBuilder_QueryInterface( pGraph, @IID_IMediaSeeking, @medseek )
IGraphBuilder_RenderFile(pGraph, "1.avi", NULL )
IVideoWindow_put_Owner( vidwindow, hwnd )
IVideoWindow_put_WindowStyle( vidwindow, WS_CHILD or WS_CLIPSIBLINGS or WS_CLIPCHILDREN )
IVideoWindow_SetWindowPosition( vidwindow, 0, 0, 320, 240)
IMediaControl_Run(pControl)
While GetMessage( @msg, 0, 0, 0 ) 
  TranslateMessage( @msg )
  DispatchMessage( @msg )
      Select Case msg.message
        Case 273
          End
      End Select
Wend

IBasicVideo_Release(pControl)
IBasicVideo_Release(pEvent)
IBasicVideo_Release(pGraph)
IBasicVideo_Release(vidwindow)
IBasicVideo_Release(medseek)

CoUninitialize()

Можно расширить, если добавить тулбар или кнопки и присвоить им методы:

1) запуск файла: IMediaControl_Run(pControl)
2) пауза : IMediaControl_Pause(pControl )
3) стоп : IMediaControl_STOP(pControl )
4) изменение скорости: IMediaSeeking_SetRate(medseek,10.0)
и другие.

Если кто знает, подскажите пожалуйста как управлять несколькими потоками? То есть можно запустить одновременно несколько файлов, но методы Pause,stop и другие работают только с последним запущенным файлом, хотя другие проигрываются в это время, но остановить или приостановить их у меня не получается.

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Пример воспроизведения видео с помощью DirectShow

Сообщение  trew в Вт Фев 01, 2011 6:08 pm

trew пишет:

Если кто знает, подскажите пожалуйста как управлять несколькими потоками? То есть можно запустить одновременно несколько файлов, но методы Pause,stop и другие работают только с последним запущенным файлом, хотя другие проигрываются в это время, но остановить или приостановить их у меня не получается.

Вопрос снят, решение нашел сам.

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения