配置 Demux 输出引脚

当 MPEG-2 demux 接收数据包时,它必须确定输出引脚应分析并传送数据。 在程序流模式下,demux 将流 ID 映射到输出引脚。 在传输流模式下,它将 PID 映射到输出引脚。 例如,在传输流模式下,如果 PID 0x31映射到 pin 0,则具有该 PID 编号的每个 TS 数据包将路由到输出引脚 0。 如果 demux 接收的数据包流 ID 或 PID 未映射到任何输出引脚,则它只会丢弃数据包。

在拉取模式下,demux 会自动为文件中的音频和视频流创建输出引脚,并将流 ID 映射到引脚。

在推送模式下,输出引脚必须由应用程序或其他筛选器配置。 对于使用广播驱动程序体系结构 (BDA) 的数字电视源,网络提供商筛选器适用于 TIF 筛选器以配置 demux。 应用程序不必执行任何操作。 在其他方案中,应用程序必须配置输出引脚。

demux 以无输出引脚开头。 若要创建输出引脚,请在筛选器上调用 IMpeg2Demultiplexer::CreateOutputPin 方法。 此方法采用媒体类型和固定名称,并返回 IPin 指针。 当引脚连接到另一个筛选器(通常是解码器)时,将使用媒体类型,例如使用 Demux 和基本流。 固定名称可以是喜欢的任何内容,但不允许重复的引脚名称。

接下来,将一个或多个流 ID 或 PID 分配给新的输出引脚。 对于程序流,请查询 IMPEG2StreamIdMap 的引脚并调用 IMPEG2StreamIdMap::MapStreamId。 对于传输流,请查询 IMPEG2PIDMap 的引脚并调用 IMPEG2PIDMap::MapPID

可通过多种方式分析 TS 数据包。 对于每个输出引脚,分析方法由 MediaSampleContent 参数确定为 MapPID 方法。

说明
MEDIA_ELEMENTARY_STREAM 筛选器提供 PES 有效负载。 在此模式下,筛选器会解压缩 PES 数据包,因此下游筛选器接收 ES 字节流,而不使用 PES 数据包标头。 仅 (音频和视频流。)
MEDIA_MPEG2_PSI 筛选器提供完整的 PSI 部分,例如 PAT 表、PMT 表、CAT 表等。
MEDIA_TRANSPORT_PAYLOAD 筛选器从 TS 数据包中提取有效负载,并在不进一步分析的情况下传递它们。 对于基本流,这意味着 demux 将传送整个 PES 数据包,包括 PES 数据包标头。
MEDIA_TRANSPORT_PACKET 该筛选器提供整个 TS 数据包。 demux 会根据 TS 数据包的 PID 路由 TS 数据包,但不会检查或处理数据包。 未筛选出出现错误的数据包。demux 不重新复用数据包,生成的输出流不符合 MPEG-2 传输流。 此模式称为 直通 模式。

 

对于程序流,demux 始终提供 PES 有效负载。

使用 MPEG-2 Demultiplexer