本文共 2891 字,大约阅读时间需要 9 分钟。
本文旨在总结 Direct Show 中一些常用的 API 接口函数,供开发者在日常工作中查阅和回忆。如有未提及的函数,建议通过 MSDN 和相关搜索进行查找。
在当前线程上初始化 COM 库。
HRESULT CoInitialize(LPVOID pvReserved);
pvReserved:保留参数,必须为 NULL。S_OK 表示 COM 库在此线程上成功初始化。S_FALSE 表示 COM 库已经在此线程上初始化过。###备注新应用程序应调用 CoInitializeEx 而不是 CoInitialize,因为 CoInitializeEx 提供了更灵活的线程模型设置。
关闭当前线程上的 COM 库,释放所有资源。
void CoUninitialize();
此函数无返回值。
###备注线程初始化后必须调用相应的 CoUninitialize 来释放资源。
创建一个指定 CLSID 的 COM 对象。
HRESULT CoCreateInstance( REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID *ppv);
rclsid:COM 对象的类标识符 (CLSID)。pUnkOuter:指向 IUnknown 接口的指针,通常设为 NULL。dwClsContext:指定创建对象的上下文。riid:指定要获取的接口标识符 (IID)。ppv:接收创建成功后对象接口的指针。返回值为 HRESULT,具体值请参考 MSDN。
###备注
CoCreateInstance。CoCreateInstanceEx。CoCreateInstanceEx。查询 COM 对象是否支持特定接口。
HRESULT QueryInterface(REFIID riid, void **ppvObject);
riid:指定要查询的接口标识符 (IID)。ppvObject:接收支持该接口的指针。S_OK 表示支持该接口。E_NOINTERFACE 表示不支持。###备注QueryInterface 是 IUnknown 接口的重要方法,用于动态接口查找。
构建一个渲染特定文件的 filter graph。
HRESULT RenderFile(LPCWSTR lpcwstrFile, LPCWSTR lpcwstrPlayList);
lpcwstrFile:包含媒体文件名的宽字符字符串。lpcwstrPlayList:保留参数,必须为 NULL。返回值为 HRESULT,具体值请参考 MSDN。
###备注该方法会构建一个 filter graph 用于播放指定文件。
运行 filter graph,实现数据流动。
HRESULT Run();
返回值为 HRESULT,具体值请参考 MSDN。
###备注在 filter graph 已停止的情况下,该方法会暂停并启动 graph。成功调用后,graph 会持续运行,直到数据流完或被手动停止。
等待 filter graph 完成渲染。
HRESULT WaitForCompletion(long msTimeout, long *pEvCode);
msTimeout:超时时间,单位为毫秒。传递 0 表示立即返回,传递 INFINITE 表示无限等待。pEvCode:接收事件代码的变量指针。返回值为 HRESULT,具体值包括:
S_OK:成功等待完成。E_ABORT:超时已到。VFW_E_WRONG_STATE:filter graph 未运行。###备注该方法会阻塞直到超时或 graph 完成渲染。
为 capture graph builder 设置要使用的 filter graph。
HRESULT SetFiltergraph(IGraphBuilder *pfg);
pfg:指向 IGraphBuilder 接口指针。返回值为 HRESULT,具体值请参考 MSDN。
###备注如果不调用此方法,capture graph builder 会在需要时自动创建 filter graph。如果已有 filter graph,此方法返回 E_UNEXPECTED。
将 source filter 的 output pin 连接到 sink filter。
HRESULT RenderStream( const GUID *pCategory, const GUID *pType, IUnknown *pSource, IBaseFilter *pIntermediate, IBaseFilter *pSink);
pCategory:指向 pin 类别的 GUID,传递 NULL 可匹配任何类别。pType:指向 pin 的媒体类型 GUID,传递 NULL 可匹配任何类型。pSource:指定起始 filter 或 output pin 的指针。pIntermediate:指定中间 filter 的指针,可设为 NULL。pSink:指定终止 filter 的指针,可设为 NULL(此时使用默认 renderer)。返回值为 HRESULT,具体值请参考 MSDN。
###备注该方法通过连接多个 filter 来形成一个流,常用于视频捕获和预览。
CLSID_FilterGraph:用于在共享工作线程上创建 Filter Graph Manager。CLSID_CaptureGraphBuilder2:用于创建 capture graph builder。以上内容涵盖了 Direct Show 中一些常用的 API 接口函数及其使用方法,希望对开发者有所帮助。
转载地址:http://jgsyz.baihongyu.com/