媒体基础源开发详解
1. 源解析与字节流处理
在创建文件源时,字节流处理程序会预加载数百字节的数据流并进行验证,通常是将其发送到对应的媒体源。若媒体源未返回错误,字节流处理程序就能确定该媒体源可以解析此数据。当用户向源解析器传入 MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE
标志时,这种功能就显得尤为重要。此时,方案处理程序会不断尝试,将数据流传递给 ByteStreamHandlers
注册表项下列出的每个字节流处理程序,以找到能处理该数据流的源。方案处理程序会遍历所有字节流处理程序,逐个询问它们是否能识别该格式,源解析器会返回第一个声称能识别文件格式的处理程序。
需要注意的是,如果某个字节流处理程序不支持文件格式验证,就会破坏源解析器的内容解析行为。因为源解析器依赖字节流处理程序来告知它所处理的文件是否受支持。若有字节流处理程序盲目接受所有文件格式,源解析器就会提前停止遍历字节流处理程序,不再尝试其他处理程序,这可能导致 MF 对许多具有意外文件扩展名的文件无法正常工作。
与 DirectShow 源过滤器和 MF 硬件解码器不同,MF 源没有优劣值。虽然可以为同一扩展名或 MIME 类型注册多个字节流处理程序,但无法指定应首先尝试哪个处理程序。在媒体基础中,唯一的优先规则是始终首先尝试 Microsoft 媒体源。
2. AVF 字节流处理程序
AVF 源需要自己的字节流处理程序,以便源解析器为 AVF 文件创建源。每个字节流处理程序都必须实现 IMFByteStrea