# sys.mediaFoundation.writer 库模块帮助文档

## sys.mediaFoundation 成员列表 <a id="sys.mediaFoundation" href="#sys.mediaFoundation">&#x23;</a>

### sys.mediaFoundation.writer <a id="sys.mediaFoundation.writer" href="#sys.mediaFoundation.writer">&#x23;</a>
用系统自带 Media Foundation 写入 MP4（H.264 视频 + AAC 音频）

### sys.mediaFoundation.writer() <a id="sys.mediaFoundation.writer" href="#sys.mediaFoundation.writer">&#x23;</a>
[返回对象:sysMfWriterObject](#sysMfWriterObject)

### sys.mediaFoundation.writer(path,options) <a id="sys.mediaFoundation.writer" href="#sys.mediaFoundation.writer">&#x23;</a>
创建 MP4 写入器，失败返回 null,错误信息。  
参数 @options 可用字段：  
width,height：视频尺寸（必须是偶数），省略则只写音频；  
fps：帧率，默认 30，可写 29.97 或 {30000,1001}；  
quality：画质 1~100，默认 80（固定 QP：关键帧 12、其他帧 20），文件大小随画面复杂度变化；  
低于 80 时主要降低运动内容的画质，关键帧 QP 不高于 14，静止文字始终清晰；  
videoBitrate：改为按平均码率（bps）编码（VBR），与 quality 只能指定一个；  
profile："high"（默认）、"main"、"baseline"；  
gop：关键帧间隔（帧数），默认 2 秒；  
hardware：是否允许硬件编码器，默认 false（软件编码）；  
encoder：编码器参数表，键为 CODECAPI_ 名称（可省略前缀），覆盖以上默认设置；  
audio：音频参数 {sampleRate=48000;channels=2;bitrate=192000}，省略则不写音频

## sysMfWriterObject 成员列表 <a id="sysMfWriterObject" href="#sysMfWriterObject">&#x23;</a>

### sysMfWriterObject.audioBitrate <a id="sysMfWriterObject.audioBitrate" href="#sysMfWriterObject.audioBitrate">&#x23;</a>
实际使用的 AAC 码率

### sysMfWriterObject.audioFrames <a id="sysMfWriterObject.audioFrames" href="#sysMfWriterObject.audioFrames">&#x23;</a>
已写入的音频采样帧数

### sysMfWriterObject.audioTime <a id="sysMfWriterObject.audioTime" href="#sysMfWriterObject.audioTime">&#x23;</a>
已写入的音频时长（秒）

### sysMfWriterObject.channels <a id="sysMfWriterObject.channels" href="#sysMfWriterObject.channels">&#x23;</a>
音频声道数

### sysMfWriterObject.close() <a id="sysMfWriterObject.close" href="#sysMfWriterObject.close">&#x23;</a>
结束写入（Finalize）并释放资源，成功返回 true。  
必须调用，否则 MP4 文件不完整（对象被回收时也会自动调用）

### sysMfWriterObject.fps <a id="sysMfWriterObject.fps" href="#sysMfWriterObject.fps">&#x23;</a>
帧率（数值）

### sysMfWriterObject.frameCount <a id="sysMfWriterObject.frameCount" href="#sysMfWriterObject.frameCount">&#x23;</a>
已写入的视频帧数

### sysMfWriterObject.frameRate <a id="sysMfWriterObject.frameRate" href="#sysMfWriterObject.frameRate">&#x23;</a>
帧率分数 {分子,分母}

### sysMfWriterObject.height <a id="sysMfWriterObject.height" href="#sysMfWriterObject.height">&#x23;</a>
视频高度

### sysMfWriterObject.path <a id="sysMfWriterObject.path" href="#sysMfWriterObject.path">&#x23;</a>
输出文件完整路径

### sysMfWriterObject.rateControl <a id="sysMfWriterObject.rateControl" href="#sysMfWriterObject.rateControl">&#x23;</a>
视频码率控制方式：  
{mode="quality";quality;qpI;qpP}、{mode="bitrate";bitrate}，  
encoder 参数里指定了 AVEncCommonRateControlMode 时为 {mode="custom"}

### sysMfWriterObject.sampleRate <a id="sysMfWriterObject.sampleRate" href="#sysMfWriterObject.sampleRate">&#x23;</a>
音频采样率

### sysMfWriterObject.sinkWriter <a id="sysMfWriterObject.sinkWriter" href="#sysMfWriterObject.sinkWriter">&#x23;</a>
IMFSinkWriter 接口对象（高级用法），关闭后为 null

### sysMfWriterObject.videoTime <a id="sysMfWriterObject.videoTime" href="#sysMfWriterObject.videoTime">&#x23;</a>
已写入的视频时长（秒）

### sysMfWriterObject.width <a id="sysMfWriterObject.width" href="#sysMfWriterObject.width">&#x23;</a>
视频宽度

### sysMfWriterObject.writeAudio(pcm,size) <a id="sysMfWriterObject.writeAudio" href="#sysMfWriterObject.writeAudio">&#x23;</a>
写入音频，成功返回 true，失败返回 null,错误信息。  
参数 @pcm 为 int16 交错 PCM（buffer 或字符串），传入指针时必须用 @size 指定字节数。  
可分块多次写入，时间戳按已写入的采样数自动计算。  
建议每写一帧视频就写入这一帧时长的音频

### sysMfWriterObject.writeFrame(frame,repeatCount) <a id="sysMfWriterObject.writeFrame" href="#sysMfWriterObject.writeFrame">&#x23;</a>
写入一帧，成功返回 true，失败返回 null,错误信息。  
参数 @frame 可以是 gdip.bitmap（尺寸必须与视频一致，建议 PARGB 格式，透明部分按黑底合成），  
也可以是自上而下、B,G,R,X 字节序、步幅为 宽×4 的 buffer、字符串或指针。  
可选参数 @repeatCount 指定重复写入的帧数（共用同一份数据），默认 1。  
时间戳按帧号自动计算
