1

您好,过去几天我一直在苦苦挣扎,使用简单的应用程序可以为不同视频流的同时视频播放创建多个预览(但在示例 mpeg4 中格式相同)。在我的平台上没有 Xaml 运行时,所以我使用带有 DirectShow 的简单 WinApi32 函数。

但无论我做什么,我都无法同时播放多个视频流。我现在怀疑是否可以在 Windows Embedded Compact 上使用 DirectShow。但也许我错了,因为我没有详细介绍创建过滤器图的细节。

我的方法是简单地创建几个IBuilderGraphIMediaControlIMediaEventEx接口。然后我为每个图形构建器使用RenderFile方法来创建过滤器图形,然后为每个集合通知窗口创建IVideoWindow并使用IMediaControl::Run开始播放文件。

这适用于桌面 windows 7 平台,但根本不适用于 CE。只有一个预览实际上正在播放视频流,而其他预览是黑色的,不显示任何内容。

所以我的问题是“这可能在 Windows Embedded Compact 7 上播放多个视频吗? ”如果是,请解释我可以使用什么工具。

4

2 回答 2

0

微软官网有说明 https://docs.microsoft.com/en-us/windows/win32/api/control/nn-control-ivideowindow IVideoWindow 接口(control.h)

IVideoWindow 接口设置视频窗口的属性。应用程序可以使用它来设置窗口所有者、窗口的位置和尺寸以及其他属性。

注意 IVMRWindowlessControl 或 IVMRWindowlessControl9 接口现在优先于 IVideoWindow。有关详细信息,请参阅使用无窗口模式。

Video Renderer 过滤器和 Filter Graph Manager 都公开了这个接口。Filter Graph Manager 将所有方法调用转发到 Video Renderer。它还转发视频渲染器需要接收的某些窗口消息,例如 WM_DISPLAYCHANGE。因为视频窗口通常是应用程序窗口的子窗口,所以过滤器不会收到这些消息。因此,它依赖于 Filter Graph Manager 来转发它们。在大多数情况下,由于刚刚描述的消息传递问题,应用程序应该查询过滤器图形管理器以获得此接口,而不是直接调用过滤器。但是,如果过滤器图具有多个 Video Renderer,则过滤器图管理器仅与其中一个通信,可任意选择。因此,如果您的应用程序使用多个视频窗口,直接在过滤器上使用 IVideoWindow 接口。在这种情况下,您必须使用 IVideoWindow::NotifyOwnerMessage 方法将窗口消息转发到每个 Video Renderer 实例。

示例代码如下 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;
}
于 2022-03-03T05:43:25.330 回答
-1

我很惊讶你能够让流媒体继续进行。我读到这个:

Windows Embedded Compact 也不支持 IMediaControl 接口。尝试访问任一成员都会产生E_NOTIMPL错误

在:http: //msdn.microsoft.com/en-us/library/ee494426.aspx

于 2014-05-20T10:58:32.693 回答