微软媒体基础应用程序开发:转码技术详解
1. 错误代码处理与转码会话
在媒体处理过程中,某些错误代码可以被忽略。例如, MF_E_NO_MORE_TYPES
是媒体基础转换(MFT)在返回所有支持的媒体类型后返回的错误代码,它并不表示失败。
使用转码 API 构建部分转码拓扑后,可将该拓扑传递给媒体基础(MF)会话以启动实际的转码过程。转码会话的行为与播放会话相同,运行所需的代码也与播放器中的会话代码几乎相同。
不过,转码拓扑在拓扑解析阶段比播放器在播放过程中更容易失败。拓扑并非实际处理数据的 MF 组件,而是由一组不完整的激活对象组成,用于初始化和实例化实际的源、MFT 和接收器。转码 API 构建的部分拓扑可能因多种原因无法渲染,比如在拓扑解析阶段,MF 可能找不到将源内容转换为请求输出格式的 MFT;或者转码配置文件中设置的输出视频媒体类型不一致,没有编码器接受该类型。
与播放器类似,各组件之间的通信大多通过 CTranscodeApi
类实现的 IMFAsyncCallback
接口异步进行。以下是 CTranscodeApi
类实现的核心 IMFAsyncCallback::Invoke()
方法:
//
// IMFAsyncCallback::Invoke implementation. This is the function called by the media
// session whenever any