Demux 时钟行为
[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayer、 IMFMediaEngine 和 音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
在推送模式下,MPEG-2 Demultiplexer (demux) 公开 IReferenceClock 接口。 它充当实时源,因此默认情况下会选择它作为图形引用时钟;有关详细信息 ,请参阅实时源 。
- 对于传输流,demux 将其时钟同步到对应于应用程序最近映射的音频或视频流的 PCR 流。 在内部,demux 跟踪 PAT 和 PMT 表。 当应用程序将基本流 PID 映射到输出引脚时,demux 会查找该 PID 的 PCR 流并使用该 PCR 流。 (目前,应用程序无法直接指定 PCR PID。)
- 对于程序流,demux 将其时钟同步到 SCR 流。
将筛选器时钟同步到 PCR 或 SCR 流可防止数据溢出或下溢,如果图形时钟与流时钟不同,可能会导致数据溢出或下溢。 demux 还会将 PES PTS 值转换为 DirectShow 引用时间,并使用这些值对媒体样本进行时间戳。 时间戳适用于下一帧边界;无法保证帧边界将与媒体样本的开头对齐。
demux 保证时间戳单调增加。 这意味着,例如,如果传输流包含一个段(例如使用与main程序不同的时钟创建的广告),则 demux 将调整演示时间戳以隐藏下游筛选器的时间中断。
相关主题