媒体基础源与Windows属性处理程序详解
1. 媒体流相关操作
在媒体处理中, SendSampleToStream()
函数起着重要作用,它会根据流的类型加载音频或视频样本。样本会被传递给 IMFMediaStream
对象,之后该方法会与解析器进行检查,判断是否到达流的末尾。若检测到流结束,函数会将此信息发送给媒体流对象,以便下次调用 IMFMediaStream::RequestSample()
函数时返回 MF_E_END_OF_STREAM
错误。
1.1 媒体流对象概述
IMFMediaStream
对象通常较为简单,其主要职责是接收样本请求,将请求传递给底层源,从源获取样本并将其发送出去。由于MF采用异步架构,样本会作为媒体事件传递给监听媒体流 IMFMediaEventGenerator
接口的客户端。
IMFMediaStream
接口仅暴露了四个方法,其中三个如下:
- GetMediaSource()
:返回与流关联的源的指针。
- GetStreamDescriptor()
:返回一个流描述符,该描述符展示了流支持的媒体类型和流ID。
- RequestSample()
:从流中请求下一个样本。此函数调用不会直接返回样本,而是将样本作为异步媒体事件发送出去。媒体会话在尝试从源中提取下一个样本时会调用此方法。