Пример воспроизведения видео с помощью DirectShow
Страница 1 из 1
Пример воспроизведения видео с помощью DirectShow
С этим DirectShow убил кучу времени. На английском форуме хрен помогут... Пример идущий вместе с компилятором, наоборот только запутает новичка. Кто только создавал его, и для кого это сделано.... Наверно многие считают, что это круто, когда пишешь и другие ушами хлопают разбирая более 800 строчек твоего кода, да еще в нескольких файлах. На мой взгляд надо решать задачу коротким, понятным кодом, а не выпендриваться. Вот пример воспроизведения видеофайла:
Можно расширить, если добавить тулбар или кнопки и присвоить им методы:
1) запуск файла: IMediaControl_Run(pControl)
2) пауза : IMediaControl_Pause(pControl )
3) стоп : IMediaControl_STOP(pControl )
4) изменение скорости: IMediaSeeking_SetRate(medseek,10.0)
и другие.
Если кто знает, подскажите пожалуйста как управлять несколькими потоками? То есть можно запустить одновременно несколько файлов, но методы Pause,stop и другие работают только с последним запущенным файлом, хотя другие проигрываются в это время, но остановить или приостановить их у меня не получается.
- Код:
#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 пишет:
Если кто знает, подскажите пожалуйста как управлять несколькими потоками? То есть можно запустить одновременно несколько файлов, но методы Pause,stop и другие работают только с последним запущенным файлом, хотя другие проигрываются в это время, но остановить или приостановить их у меня не получается.
Вопрос снят, решение нашел сам.
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|