我试图编写一个应用程序来捕获屏幕的视频流并将其发送到远程客户端。我发现在Windows上捕获屏幕的最佳方法是使用DXGI Desktop Duplication API(自Windows 8起可用)。 Microsoft提供了一个整洁的sample,它将重复的帧流式传输到屏幕上。现在,我一直想知道对这些帧进行编码并通过网络发送它们的最简单但相对快速的方法是什么。
这些框架来自AcquireNextFrame
,其表面包含桌面位图和元数据,其中包含已更新的脏区域和移动区域。从这里开始,我有几个选择:
由于我之前没有做过这样的事情,我问我是否朝着正确的方向前进。最后,我希望有一个简单的,最好是低延迟的桌面捕获视频流,我可以从远程设备上查看。
另外,我想知道我是否可以使用桌面复制提供的脏区域和移动区域。我可以通过网络发送它们而不是对帧进行编码,并在客户端进行处理,但这意味着我的客户端必须具有DirectX 11.1或更高版本,如果我想要流式传输到移动平台,这是不可能的
答案 0 :(得分:5)
您可以使用 IMFTransform 界面进行H264编码。从 ID3D11Texture2D 获取IMFSample后,只需将其传递给 IMFTransform :: ProcessInput ,然后从 IMFTransform :: ProcessOutput 获取编码的IMFSample。
有关编码详情,请参阅this示例。
获得编码的IMFSamples后,您可以通过网络逐个发送它们。