添加增强的视频渲染流
Add Enhanced Video Renderer Stream
我有一个利用EVR的直接显示程序。我想添加另一个视频流,基本上是在主视频流上插入一个图中图框,但我不太清楚如何做到这一点:
// When this is called, the graph is already running with the EVR
// displaying a web cam in stream 0
HRESULT CVideoControl::AddVideoStream(wchar_t* file)
{
HRESULT hr;
CComPtr<IMFMediaSink> sink;
CComPtr<IMFStreamSink> stream;
//hr = pEVR->QueryInterface(__uuidof(IMFMediaSink), (void **) &sink); <- FAILS
hr = MFCreateVideoRenderer(__uuidof(IMFMediaSink), (void **) &sink);
hr = sink->AddStreamSink(1234, NULL, &stream);
CComPtr<IMFGetService> service;
hr = pEVR->QueryInterface(&service);
CComPtr<IMFVideoMixerControl> mixer;
hr = service->GetService(MR_VIDEO_MIXER_SERVICE, IID_PPV_ARGS(&mixer));
MFVideoNormalizedRect rect = { .25, .25, .5, .5 };
hr = mixer->SetStreamOutputRect(1234, &rect);
hr = m_pGraph->RenderFile(file, NULL);
return hr;
}
除了SetStreamOutputRect返回"提供的流号无效"之外,所有内容都返回S_OK。
我也怀疑MFCreateVideoRenderer
的呼叫,因为这是一个直接展示节目,而不是媒体基金会。
我很确定我过于简化了这一点,但我找不到太多关于这方面的文档。有什么建议吗?
https://msdn.microsoft.com/en-us/library/windows/desktop/aa965247(v=vs.85).aspx
在directshow程序中,您需要使用CoCreateInstance创建EVR,然后使用上面链接中解释的它的IEVRFilterConfig接口:
EVR滤波器从一个输入引脚开始,该引脚对应于参考流。要为子流添加引脚,请查询IEVRFilterConfig接口的过滤器并调用IEVRFilterConfig::SetNumberOfStreams。在连接任何输入引脚之前调用此方法。引脚0总是参考流。在连接任何其他引脚之前连接此引脚,因为参考流的格式可能会限制可用的子流格式。
相关文章:
- 如何在c++中录制具有精确帧时间戳的视频
- 使用 IMFSinkWriter 编码的视频的播放速度会根据宽度而变化
- 如何实时捕获相机的视频?
- 帧提取 使用OpenCV的视频文件开头只有几秒钟
- 使用 OpenCV C++ 每 1 分钟创建新的视频文件
- 从iPhone相机拍摄的视频似乎被OpenCV旋转了90度?我该如何解决这个问题?
- OpenCV没有显示来自Macbook网络摄像头的视频
- 在何处更改参考代码以从 HEVC 编码的视频中提取运动矢量
- 如何使用FFMPEG从编码的视频中提取AVPACKET的重要信息
- 我的视频流程在运行darknet.exe以进行检测对象时崩溃了
- 如何使用Raspberry Pi相机作为C ++ OpenCV中的视频输入
- OpenCV噪声消除静态摄像机的视频
- PCL中的这些增强指针初始化是不同的
- 如何使用FFMPEG与C拦截编码的视频数据
- 从opencv的视频关注和标量拍摄的图像之间的整数划分
- ARtoolkit加载从4k相机索尼捕获的视频文件
- openCV读取.avi文件的视频捕获获取空框架
- 如何为 OpenCV 的视频编写器动态选择可用的编解码器?
- 从OpenCV C 中的视频文件中检索每三个帧
- 添加增强的视频渲染流