YStudio Y++

视频编码类

Y++ / YStudio 开发文档 · 一点滴

类对象支持库。路径:支持库 → 扩展类库 → 视频编码类。

类型名写「视频编码类」。声明时自动创建。

用系统 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;暂无输出时返回空,可用 取错误 查看提示
冲刷解码器 取出残留画面;之后须重新打开解码器
取错误 最近一次失败或提示(中文)

注意点

  1. 尺寸:宽高会对齐为 16 的倍数;请用 取宽/取高 计算 BGRA 长度(宽×高×4)。
  2. 码流:Annex-B(含起始码)。单 NAL 也会自动补起始码。
  3. 关键帧:解码须先见到含 SPS/PPS 的关键帧;否则可能一直解不出。
  4. 缓冲:解码器内部可能暂存若干帧;循环送帧仍为空时,结束输入后调用 冲刷解码器。
  5. 无音频:本类只处理画面裸流。播带音视频的文件请用「视频类」。
  6. 系统依赖:走本机 Media Foundation(硬编可选 + 软编/软解回退),不捆绑第三方库;极少数残缺系统环境可能不可用。