问题标签 [desktop-duplication]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
228 浏览

c++ - DXGI 桌面复制导致 FreeSync/G-Sync 卡顿

将 DXGI 桌面复制与 FreeSync/G-Sync 显示器一起使用会导致全屏游戏卡顿。它发生在 Windows 10 处于“无边框全屏”模式的游戏中(您可以检查它,例如,当您改变音量时,即使在游戏中也会看到左上角的滑块)。

我尝试了示例桌面复制并尝试更新 DuplicateOutput1 函数。https://code.msdn.microsoft.com/windowsdesktop/Desktop-Duplication-Sample-da4c696a 用守望先锋等测试。

从微软的 Windows 10 1809 开始,改变了游戏全屏运行的方式,因此 DDupl 从那时起在玩时几乎无法使用。没有人为此找到解决方案吗?谢谢你。

0 投票
2 回答
129 浏览

mouse-cursor - 是否不再使用“蒙版颜色”类型的光标?

我正在开发一个屏幕捕获工具并设法使它工作,即使有鼠标光标支持。

问题是,有一种称为DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR的鼠标光标。我找不到这种类型的任何游标,所以我无法测试它。

这让我想,这种光标是否已经不再使用(Windows 8 和更新版本支持)?你能告诉我任何像这样的光标的例子吗?

0 投票
1 回答
209 浏览

c++ - 在 Desktop Duplication API 中获取帧之间的 CPU 使用率高,超时间隔不同

我正在尝试以16 毫秒的超时时间捕获屏幕,当在全屏 4k 60fps 视频上测试捕获时,我得到了60-65 FPS 。在这种情况下,CPU 使用率约为0-1%。但是当鼠标光标在屏幕上移动时,FPS 和 CPU 使用率分别上升了100+ 帧25-30%。所以,有一个问题:如果超时设置为 16,为什么我可以得到大于 70 的FPS ?

如果超时设置为 0:捕获的 FPS 数量相同,但CPU 使用率保持稳定在20-30%,即使屏幕上有静态图像。在这种情况下,超时错误的数量显着增加。这是否与上一个问题有关?

0 投票
1 回答
178 浏览

image - 从 D3D11_MAPPED_SUBRESOURCE(桌面复制 API)压缩原始资源数据,桌面图像帧

我需要通过网络传输使用 Desktop Duplication API 捕获的桌面图像数据帧,但存在一个问题:原始帧数据的大小 ,采用DXGI_FORMAT_B8G8R8A8_UNORM格式的FullHD格式,大约等于 8 MB,尺寸太大,尤其是一帧。

有没有什么好的方法可以压缩框架、桌面图像、来自D3D11_MAPPED_SUBRESOURCE的数据并获得至少以KB为单位的大小?也许某种从 bmp 到 jpeg 的转换?

我已经尝试过LZ4压缩,使用LZ4_compress_default方法,得到了 3.4 MB大小的字节数组,这对于帧来说仍然太多了。

0 投票
1 回答
566 浏览

winapi - 如何获得 d3d_aware 的 IMFTransform(将 Windows 复制 API 的输入编码为 H264)?

下一个代码应该提供 inputInfo 和 outputInfo 配置以获取 IMFTransform,并且此 IMFTransform 用于将 ID3D11Texture2D(格式为 DXGI_FORMAT_B8G8R8A8_UNORM)编码为 H264

我了解格式 DXGI_FORMAT_B8G8R8A8_UNORM 可以作为 MFVideoFormat_NV12 上的 IMFTranform 是 D3D_AWARE 。但是我在获得 D3D_AWARE 的 IMFTranform 时遇到问题

在最后几行,当我这样做时:

我收到错误“错误 pTranform not D3D_AWARE”,我不知道如何获得 D3D_AWARE 的 pTranform

我用这个 Windows Duplication API 在我的计算机上尝试了一些程序,然后将其编码为 H264 并且它们可以工作

提前致谢

0 投票
1 回答
495 浏览

video-capture - 使用 Microsoft Media Foundation 和 Desktop Duplication API 创建视频

我正在使用DDA捕获桌面图像帧并将它们发送到服务器,这些帧应该用于使用MMF创建视频。我想了解MMF需要做什么,如果我将使用Source ReaderSink Writer捕获的帧渲染视频

有两个问题:

1)嗯,首先,我不能完全理解,如果我已经从DDA接收到视频帧,实际上是否需要带有Media Source的Source Reader?我可以将它们发送到Sink Writer并渲染视频吗?

2)据我所知,如果仍然需要Source ReaderMedia Source ,首先要做的是编写我自己的Media Source,它将理解使用DDA捕获的DXGI_FORMAT_B8G8R8A8_UNORM帧。然后我应该使用带有合适 Decoders\Encoders 的Souce ReaderSink Writer并将媒体数据发送到Media Sinks。请您更详细地解释一下在这种情况下需要做什么?

0 投票
0 回答
192 浏览

winapi - 如何将 IMFSample 从 Windows Duplication API 编码为 H264?

我正在寻找一种可行的替代方案来完成这项工作

我的目标是一台通用计算机(因此它暂时可以在每个客户端计算机上运行),我已经尝试了几个月的 IMFTransform 库,但是在我的计算机上(即使在 MFTEnumEx 上有不同的过滤器),我无法获得一个 IMFTransform是 d3d11_aware [我已经在此页面上询问并尝试了所有这些答案:如何获得 d3d_aware 的 IMFTransform(将来自 Windows Duplication API 的输入编码到 H264)?]

由于这个库不适合我,我正在寻找替代方案。我听说有 FFMPEG 用于编码,但到目前为止我找不到证据它可以将 DXGI_FORMAT_B8G8R8A8_UNORM 作为输入。如果有办法,我会全力以赴研究它,我只需要方向

edit1(在edit2上我会留下这个修复,以防它可以帮助某人):

问题显然是在检索 imfAttributes 时,它是空的ppActivates[] 如果 MF_SA_D3D_AWARE,显然 IMFTransform 工作正常

运行时,在最后一行我在 VRscreenStreamer.exe 中的 0x00007FFC7EEED4CB (mfplat.dll) 处抛出异常:0xC0000005:访问冲突写入位置 0x0000000000000000

edit2:为了解决这个问题,我使用了 MFGetAttributeUINT32 而不是 GetUINT32:

0 投票
1 回答
814 浏览

c# - DesktopDuplication API 中的 ReleaseFrame() 调用无效

我的应用程序的用户在使用DesktopDuplication API.

开始捕获后,应用程序崩溃,因为应用程序无法释放OutputDuplication.

用户电脑详情:

错误日志:

用户可以在没有捕获鼠标光标的情况下捕获屏幕,因此捕获光标的捕获方法一定有问题。

当每个帧的捕获完成时,DuplicatedOutput必须释放该帧。

但是当发布失败时InvalidCall,我该怎么办?
另外,如何在用户 PC 上调试这种错误(而不是在开发人员的机器上)?


编辑:

这就是我想要做的:

Graphics Tools启用 on后Windows Settings,我将此代码添加到捕获初始化中:

然后我将应用程序设置为在笔记本电脑的专用 GPU 上运行,因为我确信它会导致InvalidException.

我运行了该应用程序并尝试了output1.DuplicateOutput(Device);它,但它按预期失败了。

之后,我尝试在 DebugView 也在运行时运行该应用程序,它只在关闭应用程序时给我一些消息,而不是在出现错误时给我一些消息。

因此,我尝试dxcap使用以下命令捕获错误:

dxcap -debug -toXML '[path]\debug.xml' -file '[path]\debug.vsglog' -c '[path]\bin\Debug\MyApp.exe'

不幸的是,CreateDevice()失败了:

HRESULT:[0x887A0004],模块:[SharpDX.DXGI],ApiCode:[DXGI_ERROR_UNSUPPORTED/Unsupported],消息:此系统不支持指定的设备接口或功能级别。

然后我又试了一次,但这次只用了DeviceCreationFlags.Debug它,它起作用了。我还在分析文件。

调试

0 投票
0 回答
108 浏览

c# - 桌面复制 API 中视频输出的 C# 服务问题

我使用C# 服务C++ DLL 函数调用桌面复制 API ,只要我在 C++ 项目中使用此 DLL 或 C#用于 DLL 函数调用,它就可以正常工作。但是,当从 C# 服务调用使用IDXGIAdapter1 COM 对象的EnumOutputs函数时会出现一些问题:EnumOutputs无法检测到任何视频适配器上的任何视频输出。我使用了不同的登录服务用户:系统用户、有权与桌面和管理员交互的系统用户,但这些都不起作用。

这个问题可能是什么原因?

我将使用EnumOutputs函数的 DLL 函数中的信息写入 txt 文件,它向我显示:

调用 **EnumOutput** 函数的 DLL 函数的输出信息

0 投票
1 回答
388 浏览

c++ - 使用 DXGI 捕获屏幕上的光标形状

我在DXGI中使用windows screen capture API编写了一个屏幕截图程序。它工作正常。但是在某些情况下(例如当我拖动一个窗口来移动它时),结果包含一个光标形状。

像这样]

这不是我所期望的。有谁知道我该怎么做才能摆脱它。