# sys.mediaFoundation.reader 库模块帮助文档

## sys.mediaFoundation 成员列表 <a id="sys.mediaFoundation" href="#sys.mediaFoundation">&#x23;</a>

### sys.mediaFoundation.reader <a id="sys.mediaFoundation.reader" href="#sys.mediaFoundation.reader">&#x23;</a>
用系统自带 Media Foundation 读取、解码音视频文件（MP4、MOV、M4A、MP3、WAV、WMV 等）

### sys.mediaFoundation.reader() <a id="sys.mediaFoundation.reader" href="#sys.mediaFoundation.reader">&#x23;</a>
[返回对象:sysMfReaderObject](#sysMfReaderObject)

### sys.mediaFoundation.reader(path,options) <a id="sys.mediaFoundation.reader" href="#sys.mediaFoundation.reader">&#x23;</a>
打开媒体文件，失败返回 null,错误信息。  
可选参数 @options 可用字段：  
hardware：是否允许硬件解码，默认 false；  
videoProcessing："advanced"（默认）或 "basic"，选择系统视频处理器；  
sampleRate：readAudio 输出的采样率，省略为源采样率，指定时由系统重采样；  
channels：readAudio 输出的声道数 1 或 2，省略时与源相同（多于 2 声道的源混缩为立体声）

## sysMfReaderObject 成员列表 <a id="sysMfReaderObject" href="#sysMfReaderObject">&#x23;</a>

### sysMfReaderObject.close() <a id="sysMfReaderObject.close" href="#sysMfReaderObject.close">&#x23;</a>
关闭读取器并释放资源（对象被回收时也会自动调用）

### sysMfReaderObject.eachFrame() <a id="sysMfReaderObject.eachFrame" href="#sysMfReaderObject.eachFrame">&#x23;</a>

```aardio
for(bitmap,time,frame in sysMfReaderObject.eachFrame()){  
\t/*bitmap 是复用的 PARGB 位图*/  
}
```

### sysMfReaderObject.lastError <a id="sysMfReaderObject.lastError" href="#sysMfReaderObject.lastError">&#x23;</a>
eachFrame 迭代中遇到的错误信息

### sysMfReaderObject.path <a id="sysMfReaderObject.path" href="#sysMfReaderObject.path">&#x23;</a>
媒体文件完整路径

### sysMfReaderObject.readAudio(seconds) <a id="sysMfReaderObject.readAudio" href="#sysMfReaderObject.readAudio">&#x23;</a>
读取音频并解码为 int16 交错 PCM（buffer），返回 PCM,起始时间(秒)。  
可选指定要读取的秒数（按解码块边界会略多一点），省略则读取剩余全部音频。  
读完返回 null，出错返回 null,错误信息

### sysMfReaderObject.readFrame() <a id="sysMfReaderObject.readFrame" href="#sysMfReaderObject.readFrame">&#x23;</a>
按顺序读取下一帧，返回 位图,时间(秒),帧号（从 0 开始，按时间戳换算）。  
位图是读取器复用的 PARGB 位图，下次读取会覆盖，需要保留请调用其 copy 函数。  
读完返回 null，出错返回 null,错误信息

[返回对象:gdipbitmapObject](https://www.aardio.com/zh-cn/docs/library-reference/gdip/bitmap.html#gdipbitmapObject)

### sysMfReaderObject.seek(seconds) <a id="sysMfReaderObject.seek" href="#sysMfReaderObject.seek">&#x23;</a>
视频与音频同时定位到指定秒数，成功返回 true。  
之后读取的首帧是离该时刻最近的帧，音频从该时刻开始

## sysMfReaderObject.info 成员列表 <a id="sysMfReaderObject.info" href="#sysMfReaderObject.info">&#x23;</a>

媒体信息，没有视频或音频时对应字段为 null

### sysMfReaderObject.info.audio <a id="sysMfReaderObject.info.audio" href="#sysMfReaderObject.info.audio">&#x23;</a>
音频信息 {sampleRate;channels;bitsPerSample;subtype;bitrate}。  
调用 readAudio 后 sampleRate、channels 更新为解码输出格式，bitsPerSample 为 16

### sysMfReaderObject.info.duration <a id="sysMfReaderObject.info.duration" href="#sysMfReaderObject.info.duration">&#x23;</a>
时长（秒）

### sysMfReaderObject.info.video <a id="sysMfReaderObject.info.video" href="#sysMfReaderObject.info.video">&#x23;</a>
视频信息 {width;height;fps;frameRate;subtype;bitrate}
