相关疑难解决方法(0)

DirectX中的整个屏幕捕获和渲染[性能]

我需要一些方法来获取屏幕数据并将其传递到我的应用程序中的DX9表面/纹理,并以1600*900分辨率以至少25fps渲染它,30会更好.

我尝试了BitBliting,但即使在那之后,我的速度为20fps,在将数据加载到纹理并渲染后,我的速度为11fps,远远落后于我的需要.

GetFrontBufferData是不可能的.

以下使用Windows Media API的内容,但我不熟悉它.示例将数据保存到文件中,也许它可以设置为给你单独的帧,但我没有找到足够好的文档来自己尝试.

我的代码:

m_memDC.BitBlt(0, 0, m_Rect.Width(),m_Rect.Height(), //m_Rect is area to be captured
               &m_dc, m_Rect.left, m_Rect.top, SRCCOPY); 
      //at 20-25fps after this if I comment out the rest

//DC,HBITMAP setup and memory alloc is done once at the begining
GetDIBits( m_hDc, (HBITMAP)m_hBmp.GetSafeHandle(),
    0L,             // Start scan line
    (DWORD)m_Rect.Height(),     // # of scan lines
    m_lpData,                   // LPBYTE
    (LPBITMAPINFO)m_bi,     // address of bitmapinfo
    (DWORD)DIB_RGB_COLORS);     // Use RGB for color table
     //at 17-20fps

IDirect3DSurface9 …
Run Code Online (Sandbox Code Playgroud)

c++ directx winapi ms-media-foundation

5
推荐指数
2
解决办法
4752
查看次数

使用 Microsoft Media Foundation 和桌面复制 API 创建视频

我正在使用DDA来捕获桌面图像帧并将它们发送到服务器,这些帧应该用于创建带有MMF 的视频。我想了解,需要与做的事情MMF,如果我将使用源读取器接收器作家,以从捕捉到的帧渲染视频

有两个问题:

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

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

video-capture ms-media-foundation desktop-duplication

4
推荐指数
1
解决办法
449
查看次数