Wednesday, January 21, 2009

DirectShow 之 自定义视频窗口

DirectShow在播放视频时,默认会蹦出一个视频窗口来.
貌似我们不能让他在指定的窗体中播放,那我们可以把他放在其他窗体中,作为子窗体.

IVideoWindow::put_Owner似乎是可以用的方法,但是它却又一些注意点和技巧.有些是MSDN没有提及的:

1. put_Owner方法必须在Stream流已经生存的情况下才能使用.一般在IGraphBuilder::RenderFile和IGraphBuilder::Run之间比较合适.

2. 利用IVideoWindow::put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS);来让窗体看上去像是一个播放器的视频部分.当然还有IVideoWindow::SetWindowPosition方法

3. 在Filter Graph Manager的Release之前put_Owner为NULL.不然会很惨...(会给代替带来N多垃圾消息,详见MSDN)

1 comment: