FreeBasic
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

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

Перейти вниз

Пример воспроизведения видео с помощью DirectShow Empty Пример воспроизведения видео с помощью 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

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

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

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

trew пишет:

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

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

trew

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

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

Вернуться к началу

- Похожие темы

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