25、媒体会话与高级功能开发

媒体会话与高级功能开发

1. 媒体会话基础

在媒体处理中,媒体会话是一个关键的概念。当 HandleSourceStreamEvent() 函数接收到源流的 MEMediaSample 事件时,它会先从事件对象中提取样本,并将其缓存到会话对象中。接着,调用 SetEvent() 设置Win32事件,通知等待的同步MFT线程有新样本可用。同步MFT线程会从内部变量中提取样本并返回。

2. 会话时钟机制

会话时钟在媒体播放中起着重要作用。所有样本流在拓扑中的流动由接收器触发的样本请求事件驱动,接收器通过拓扑主动拉取单个样本。MP3会话使用标准渲染接收器,每个样本依次被渲染。接收器通过查看样本中的呈现时间戳,并将其与呈现时钟对象进行比较,来确定每个样本的渲染时间。

呈现时钟实现了 IMFPresentationClock 接口,它提供相对于媒体项开始的时钟访问。在播放开始时,呈现时钟初始化为零,只有当样本的呈现时间戳与呈现时钟的时间匹配时,样本才会被渲染。例如,如果在五秒时暂停呈现时钟,然后将其重置为零,音频将停止播放,直到时钟再次达到五秒。

媒体会话负责在每次搜索时调整时钟。如果将源搜索到媒体开始后的35秒,需要将呈现时钟也调整到35秒。在具有多个数据流和多个接收器的拓扑中,呈现时钟可确保各个流之间的同步,使当前播放的视频帧与音频匹配。

呈现时钟由一个媒体接收器(通常是音频渲染器)维护,每个接收器在开始播放前必须有对呈现时钟的引用。在 CMP3Session::Start()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值