D
dafu2
Unregistered / Unconfirmed
GUEST, unregistred user!
我想在两个panel上同时显示一个媒体视频,当然有人建议做两个Player同时播。
这样开销很大,不理想!
据说DirectShow可以实现,通过什么分流的方式,我找了好久都没有找到方法。
还是只能在一个panel上播,各位兄台多多帮忙!
程序大概如下:
hr := CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, MyGraph);
if (FAILED(hr)) then
exit;
hr := MyGraph.RenderFile('D:/Video/test.wmv', nil);
if (FAILED(hr)) then
exit;
hr := MyGraph.QueryInterface(IID_IMediaEventEx, MyMediaEvent);
if (FAILED(hr)) then
exit;
//MediaEvent.SetNotifyWindow(self.Handle, WM_GraphNotify, 0);
//第一个是确定哪个窗体将得到消息,第二个是传递什么消息.第三个无所谓.
hr := MyGraph.QueryInterface(IID_IMediaControl, MyMediaControl);
if (FAILED(hr)) then
exit;
hr := MyGraph.QueryInterface(IID_IMediaSeeking, MyMediaSeeking);
if (FAILED(hr)) then
exit;
hr := MyGraph.QueryInterface(IID_IVideoWindow, MyVideoWindow);
hr := MyGraph.QueryInterface(IID_IVideoWindow, MyVideoWindow1);
if (FAILED(hr)) then
exit;
MyVideoWindow.put_Owner(Panel1.Handle);
//MyVideoWindow.put_Owner(panel2.Handle);
MyVideoWindow.put_WindowStyle(WS_Child or WS_CLIPCHILDREN);
MyVideoWindow.SetWindowPosition(0, 0, 300, 300);
MyMediaControl.Run;
这样开销很大,不理想!
据说DirectShow可以实现,通过什么分流的方式,我找了好久都没有找到方法。
还是只能在一个panel上播,各位兄台多多帮忙!
程序大概如下:
hr := CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, MyGraph);
if (FAILED(hr)) then
exit;
hr := MyGraph.RenderFile('D:/Video/test.wmv', nil);
if (FAILED(hr)) then
exit;
hr := MyGraph.QueryInterface(IID_IMediaEventEx, MyMediaEvent);
if (FAILED(hr)) then
exit;
//MediaEvent.SetNotifyWindow(self.Handle, WM_GraphNotify, 0);
//第一个是确定哪个窗体将得到消息,第二个是传递什么消息.第三个无所谓.
hr := MyGraph.QueryInterface(IID_IMediaControl, MyMediaControl);
if (FAILED(hr)) then
exit;
hr := MyGraph.QueryInterface(IID_IMediaSeeking, MyMediaSeeking);
if (FAILED(hr)) then
exit;
hr := MyGraph.QueryInterface(IID_IVideoWindow, MyVideoWindow);
hr := MyGraph.QueryInterface(IID_IVideoWindow, MyVideoWindow1);
if (FAILED(hr)) then
exit;
MyVideoWindow.put_Owner(Panel1.Handle);
//MyVideoWindow.put_Owner(panel2.Handle);
MyVideoWindow.put_WindowStyle(WS_Child or WS_CLIPCHILDREN);
MyVideoWindow.SetWindowPosition(0, 0, 300, 300);
MyMediaControl.Run;