你好,过去几天我一直在挣扎,使用简单的应用程序可以为不同视频流的同时视频播放创建多个预览(但mpeg4中的格式是相同的)。在我的平台上,没有Xaml运行时,所以我在DirectShow中使用简单的DirectShow函数。
但是无论我做什么,我都不能同时播放多个视频流。我现在很怀疑在windows嵌入式Compact上使用DirectShow是否可行。但也许我错了,因为我没有详细介绍创建过滤器图的细节。
我的方法是简单地创建很少的IBuilderGraph,IMediaControl,和IMediaEventEx接口。然后,对每个图形生成器使用RenderFile方法创建筛选图,然后为每组通知窗口创建IVideoWindow,并使用RenderFile开始播放文件。
这在桌面windows 7平台上工作,但在CE上却不起作用。只有一个预览实际上正在播放视频流,而另一个则是黑色的,没有显示任何内容。
所以我的问题是“是否有可能在windows embedded Compact7上进行多次视频回放?”,如果是的话,请解释我可以使用什么工具。
发布于 2022-03-03 05:43:25
微软官方网站解释了https://learn.microsoft.com/en-us/windows/win32/api/control/nn-control-ivideowindow IVideoWindow接口(control.h)
IVideoWindow接口在视频窗口上设置属性。应用程序可以使用它来设置窗口所有者、窗口的位置和尺寸以及其他属性。
注意,IVMRWindowlessControl或IVMRWindowlessControl9接口现在比IVideoWindow更受欢迎。有关更多信息,请参见使用无窗口模式。
视频渲染器过滤器和过滤器图形管理器都公开了这个接口。将所有方法调用转发给视频渲染器。它还转发视频渲染程序需要接收的某些窗口消息,如WM_DISPLAYCHANGE。由于视频窗口通常是应用程序窗口的子窗口,因此筛选器将不会接收这些消息。因此,它依赖于过滤器图形管理器来转发它们。在大多数情况下,应用程序应该查询的这个接口,而不是直接调用过滤器,因为刚才描述的消息传递问题。但是,如果筛选图有多个视频渲染器,则筛选图管理器只与其中一个进行通信,任意选择。因此,如果应用程序使用多个视频窗口,则直接在过滤器上使用IVideoWindow接口。在这种情况下,必须使用IVideoWindow::NotifyOwnerMessage方法将窗口消息转发给每个视频渲染器实例。
示例代码如下所示:https://cpp.hotexamples.com/examples/-/IVideoWindow/-/cpp-ivideowindow-class-examples.html
HRESULT
recChannel_t::unmap(void)
{
__CONTEXT("recChannel_t::unmap");
IBaseFilter *pFilter = NULL;
int hr = 0;
hr = pGraph->FindFilterByName(L"Video Renderer", &pFilter);
if (!hr)
{
IVideoWindow *pWindowInfo = NULL;
hr = pFilter->QueryInterface(IID_IVideoWindow, (void **)&pWindowInfo);
errorCheck(hr);
pWindowInfo->put_Visible(OAFALSE);
pWindowInfo->put_AutoShow(OAFALSE);
pWindowInfo->Release();
}
pControl->StopWhenReady();
#ifdef _WINDOWS
if (fControl)
{
fControl->CWnd::ShowWindow(SW_HIDE);
}
#endif
mapping = false;
return 0;
}发布于 2014-05-20 10:58:32
我很惊讶你竟然能让流媒体进行下去。我读过这个:
WindowsEmbeddedCompact上也不支持IMediaControl接口。尝试访问任何成员都会生成
E_NOTIMPL错误。
In:http://msdn.microsoft.com/en-us/library/ee494426.aspx
https://stackoverflow.com/questions/12771314
复制相似问题