使用 VMR9 在 NPAPI 中进行视频呈现
Using VMR9 for video rendering in NPAPI
我正在使用DirectShow在NPAPI插件中进行视频渲染。我编写了一个将 YUY2 样本推送到上游的源过滤器,我试图在无窗口模式下使用 VMR9 将视频渲染到插件的 HWND 中。无论如何,框架实际上正在交付,但插件窗口中没有显示任何输出。我确定帧交付,因为如果我在窗口模式下使用 VMR9,我实际上可以看到视频。
这段代码用于图形构建和呈现。
// init VMR9 filter
IBaseFilter *pVmr = NULL;
HRESULT hr = CoCreateInstance(CLSID_VideoMixingRenderer9, 0,
CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&pVmr);
hr = _base->AddFilter(pVmr, L"VMR9");
pVmr->Release();
// set VMR9 windowless
IVMRFilterConfig9* pConfig;
hr = pVmr->QueryInterface(IID_IVMRFilterConfig9, (void**)&pConfig);
if (SUCCEEDED(hr))
{
pConfig->SetRenderingMode(VMRMode_Windowless);
pConfig->SetNumberOfStreams(1);
pConfig->Release();
}
// set VMR9 clipping window
IVMRWindowlessControl9* pWc = NULL;
hr = pVmr->QueryInterface(IID_IVMRWindowlessControl9, (void**)&pWc);
if (SUCCEEDED(hr))
{
hr = pWc->SetVideoClippingWindow((_outputWindow));
RECT r;
GetWindowRect(_outputWindow, &r);
pWc->SetVideoPosition(NULL, &r);
pWc->Release();
}
// init source filter
IBaseFilter *pSource = new NetReceiverFilter();
hr = _base->AddFilter(pSource, L"Net Receiver");
_capture->RenderStream(0, 0, pSource, 0, pVmr);
long evCode;
_control->Run();
_event->WaitForCompletion(10000, &evCode);
哪里:
- _outputWindow是插件的HWND
- _base是 IGraphBuilder *
- _build是ICaptureGraphBuilder2 *
- _control是 IMediaControl *
- _event是 IMediaEvent *
IVMRWindowlessControl9::SetVideoPosition
获取客户端(相对)坐标,而GetWindowRect
获取屏幕(绝对)坐标,您需要解决这个问题,例如使用GetclientRect
,或使用额外的ScreenToClient
调用。
相关文章:
- 如何在c++中录制具有精确帧时间戳的视频
- 如何在QT中的自定义视频小工具t上绘制矩形
- 如何使用OpenCV-C++编写*.mp4视频?
- 开放 CV 中的动态内存分配,用于视频处理
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- OpenCV QT,显示视频的帧(不使用while循环)
- FFmpeg——使用硬件加速进行视频解码
- 在 openCV 中手动停止视频
- 强制Qt相机视频格式
- 在macOS Mojave上尝试OpenCV视频捕获时"Abort Trap: 6"
- 应用程序在打开的简历中捕获视频后没有响应
- 使用 IMFSinkWriter 编码的视频的播放速度会根据宽度而变化
- 如何在 c++ 中通过 http 发送大型视频文件?
- 在 QLabel 中显示视频
- OpenGL 调试上下文警告 -"将使用视频内存作为缓冲区异议的来源
- 这个工厂类在这个C++视频中的意义何在?
- 如何使用Qt在新窗口中显示视频帧
- 使用 VMR9 在 NPAPI 中进行视频呈现
- VMR9 对捕获的文件施加错误的视频大小
- 视频混合呈现器 9 (VMR9):从输入引脚的AM_MEDIA_TYPE获取 FPS