类对象支持库。路径:支持库 → 扩展类库 → 视频编码类。
类型名写「视频编码类」。声明时自动创建。
用系统 Media Foundation,把 BGRA 画面 编成 H.264(Annex-B 裸码流),也可把 Annex-B 解回 BGRA。适用于推流、存档、局域网画面传输等;不是写死的远控或播放器。适用于 Windows 7 及以上(推荐 10/11)。不需要安装 FFmpeg 等第三方库。
安装与许可
能力包:plugins/supportlib.videoenc/(放在 YStudio.exe 旁 plugins/)。在「插件管理」中启用后,点「重新扫描」或勾选启用即可热刷新支持库,一般无需重启 IDE。
开发期可能受授权位 supportlib.videoenc 约束;发行出去的程序不再回连验票。
能力一览
| 能力 | 状态 | 说明 |
|---|---|---|
| 编码(BGRA → Annex-B) | 可用 | 优先硬件 H.264 MFT(系统内存 NV12 可配通时),失败自动软编;宽高对齐 16;无音频 |
| 是否硬编 | 可用 | 是否硬编():当前打开的编码器是否硬件加速 |
| 解码(Annex-B → BGRA) | 可用 | 软解;须含关键帧;可能暂存若干帧,结束时请冲刷解码器 |
说明:不少独显硬件编码器要求 D3D 显存输入,本类走系统内存路径时可能配不通 → 自动回退软编,无独显机器行为与以前一致。
编码用法
视频编码类 编
编.置尺寸(640, 360)
编.置码率(2000000)
编.置帧率(30)
编.置关键帧间隔(30)
如果 (!编.打开编码器()) {
输出(编.取错误())
返回
}
输出("硬编=" + 到文本(编.是否硬编()))
' 画面长度 = 取宽() * 取高() * 4(BGRA)
字节集 码流 = 编.编码帧(画面)
' ……循环送帧……
字节集 尾 = 编.冲刷编码器()
编.关闭编码器()
解码用法
视频编码类 解
解.置尺寸(640, 360) ' 与码流一致;内部对齐 16
解.置帧率(30)
如果 (!解.打开解码器()) {
输出(解.取错误())
返回
}
字节集 还原 = 解.解码帧(码流)
如果 (取字节集长度(还原) = 0) {
' 解码器可能暂存,继续送下一包;或结束时冲刷
输出(解.取错误())
} 否则 {
输出("解码 " + 到文本(解.取宽()) + "x" + 到文本(解.取高()))
}
' 送完所有码流后:
字节集 残留 = 解.冲刷解码器() ' 冲刷后须重新打开解码器才能再解
解.关闭解码器()
往返建议:编码器输出的 Annex-B 直接喂给同尺寸的解码器;先有关键帧,循环 解码帧,最后 冲刷解码器。
常用命令
| 命令 | 说明 |
|---|---|
置尺寸 / 取宽 / 取高 |
打开前设置;打开后以对齐后的宽高为准 |
置码率 / 置帧率 / 置关键帧间隔 |
编码参数 |
打开/关闭编码器、是否编码器已打开、是否硬编 |
控制;打开优先硬编,失败软编 |
编码帧 / 冲刷编码器 / 是否关键帧 |
编码输出 Annex-B |
打开/关闭解码器、是否解码器已打开 |
控制 |
解码帧 |
Annex-B → BGRA;暂无输出时返回空,可用 取错误 查看提示 |
冲刷解码器 |
取出残留画面;之后须重新打开解码器 |
取错误 |
最近一次失败或提示(中文) |
注意点
- 尺寸:宽高会对齐为 16 的倍数;请用
取宽/取高计算 BGRA 长度(宽×高×4)。 - 码流:Annex-B(含起始码)。单 NAL 也会自动补起始码。
- 关键帧:解码须先见到含 SPS/PPS 的关键帧;否则可能一直解不出。
- 缓冲:解码器内部可能暂存若干帧;循环送帧仍为空时,结束输入后调用
冲刷解码器。 - 无音频:本类只处理画面裸流。播带音视频的文件请用「视频类」。
- 系统依赖:走本机 Media Foundation(硬编可选 + 软编/软解回退),不捆绑第三方库;极少数残缺系统环境可能不可用。