我是Directshow和C++中的新成员。我尝试从源捕捉视频并使用VP8对其进行编码。要做到这一点我使用DirectShow的过滤器从https://code.google.com/p/webm/downloads/list
FilterGraph动态我正在工作,由这四种过滤器:VP8-DirectShowFilter:QueryInterface结果为E_NOINTERFACE(C++)
recorder -> WebM VP8 Encoder Filter -> WebM Muxer Filter -> FileWriter
的问题是,我需要的属性从VP8编码器更换过滤器。使用GraphEdit,我可以改变例如Targed Bitrate,但我不知道如何以C++编程(我不想使用PropertyPage)。 我也下载了源代码并找到并包含了文件vp8encoder \ vp8encoderfilter.hpp。这导致了我需要包含vp8encoderidl.h文件的问题。起初,我没有在soure文件夹中找到这个文件,所以我从互联网上的某个地方下载了它。后来,我看到IDL文件夹包含一个vp8encoder.idl文件,我将其添加到我的项目中,编译它并包含生成的vp8encoder_h.h文件。在这两种情况下(使用互联网或头文件的代码),我可以编译我的项目并录制视频。于是,我就从DirectShow过滤得到IVP8Encoder接口:
//Instanziate Encoder-Filter
hr = CoCreateInstance(__uuidof(IVP8Encoder), NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&pVideoEncoder);
//Get Interface
IVP8Encoder *iEncoder = NULL;
hr = pVideoEncoder->QueryInterface(__uuidof(IVP8Encoder), (void**)&iEncoder);
的的QueryInterface() - 返回E_NOINTERFACE。所以我认为,这可能是第一个参数不正确,但我不知道需要哪个参数。
我很感谢您的帮助,并提前致谢!