gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 22:02:15 33 4
gpt4 key购买 nike

我正在使用 DDA 用于捕获 桌面图像框架并将它们发送到服务器,这些帧应该用于创建带有 的视频MMF .我想了解,需要做什么MMF , 如果我使用 来源阅读器水槽作家 从捕获的帧中渲染视频 .

有两个问题:

1)嗯,首先,我不能完全理解,实际上,需要来源阅读器媒体来源 , 如果我已经收到来自 的视频帧DDA ?我可以将它们发送到 水槽作家 并渲染视频?

2) 据我了解,如果仍然需要 ,首先要做的事情是来源阅读器媒体来源 ,是我自己写的媒体来源 ,这将理解 DXGI_FORMAT_B8G8R8A8_UNORM 使用 捕获的帧DDA .那我应该用源码阅读器水槽作家 使用合适的解码器\编码器并将媒体数据发送到媒体接收器 .请您更详细地解释一下在这种情况下需要做什么?

最佳答案

实现 SourceReader 在您的情况下不是必需的,但您可以继续实现它,它会起作用。

相反,您也可以直接将通过桌面复制捕获的输入缓冲区提供给 SinkWriter。就像下面一样,

CComPtr<IMFAttributes> attribs;
CComPtr<IMFMediaSink> m_media_sink;
IMFSinkWriterPtr m_sink_writer;

MFCreateAttributes(&attribs, 0);
attribs->SetUINT32(MF_LOW_LATENCY, TRUE);
attribs->SetUINT32(MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS, TRUE);

IMFMediaTypePtr mediaTypeOut = MediaTypeutput(fps, bit_rate);
MFCreateFMPEG4MediaSink(stream, mediaTypeOut, nullptr, &m_media_sink));
MFCreateSinkWriterFromMediaSink(m_media_sink, attribs, &m_sink_writer);

//Set input media type
mediaTypeIn->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_RGB32);
//Set output media type
mediaTypeOut->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_H264);

IMFSamplePtr sample;
MFCreateSample(&sample);
sample->AddBuffer(m_buffer); // m_buffer is source buffer in R8G8B8A8 format

sample->SetSampleTime(m_time_stamp);
sample->SetSampleDuration(m_frame_duration);
m_sink_writer->WriteSample(m_stream_index, sample);

Here是基于 SinkWriter 的完美工作示例。它同时支持网络和文件接收器。它实际上通过 GDI 方法捕获桌面。 DDA 几乎一样,使用 DDA 确实可以获得更好的性能。

我还上传了一个样本 here这实际上是基于 桌面复制 , 并直接使用 IMF变换而是使用 Live555 将输出视频流式传输为 RTP 流。通过这种方法,我能够达到 100FPS。

如果您决定采用 SinkWriter 方法,则不必担心颜色转换部分,因为它由 SinkWriter 在后台负责。和 IMF变换 ,您将不得不处理颜色转换部分,但您将对编码器进行细粒度控制。

这里有一些更多的引用链接供您引用。
  • https://github.com/ashumeow/webrtc4all/blob/master/gotham/MFT_WebRTC4All/test/test_encoder.cc
  • DXGI Desktop Duplication: encoding frames to send them over the network
  • Getting green screen in ffplay: Streaming desktop (DirectX surface) as H264 video over RTP stream using Live555
  • Intel graphics hardware H264 MFT ProcessInput call fails after feeding few input samples, the same works fine with Nvidia hardware MFT
  • Color conversion from DXGI_FORMAT_B8G8R8A8_UNORM to NV12 in GPU using DirectX11 pixel shaders
  • GOP setting is not honored by Intel H264 hardware MFT
  • Encoding a D3D Surface obtained through Desktop Duplication using Media Foundation
  • 关于video-capture - 使用 Microsoft Media Foundation 和 Desktop Duplication API 创建视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59020238/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com