我正在使用IMFMediaEngine来播放视频流(Smooth Streaming,HLS),稍后可能还会使用PlayReady 。
它使用TransferVideoFrame将视频绘制到纹理上效果很好。但我知道使用 DirectComposition 是 PlayReady + DRM + 1080p 视频的要求。所以我试图让这个工作。
这样做的另一个优点是,视频帧渲染独立于应用程序,因此应用程序 UI 中可能出现的卡顿或延迟不会影响视频播放。
我能够让它工作,但不幸的是,我使用的IDCompositionVisual总是被限制为640x480。所以视频必须缩小到它。然后,如果我将其转换为按比例放大,我会得到一张丑陋的拉伸图片。
我正在以这种方式注册视觉:
pMediaAttributes->SetUnknown(MF_MEDIA_ENGINE_PLAYBACK_VISUAL, m_pDcompVideoVisual);
如此处所述: https ://msdn.microsoft.com/en-us/library/windows/desktop/hh162850(v=vs.85).aspx
尝试在 Visual 上创建表面优先和SetContent不会改变任何内容。就像视频播放器用它自己的表面覆盖它一样,640x480。把它贴在简单的播放器上真的很好,找到这个问题的真正解决方案,并且能够在我收到MF_MEDIA_ENGINE_EVENT_FORMATCHANGE事件时指定 Visual Surface 的大小。
因为这是 IMFMediaEngine 中用于指定 DirectComposition 表面的一个选项,所以必须有一种方法来完成这项工作。