---
name: yangge521/hw-codec-adapt
source: https://app.decimal.ai/s/yangge521-hw-codec-adapt@1/SKILL.md
source_sha256: c6e1a06b9cdb
---

# 跨平台 GPU 硬件编解码适配

## 概述

实现视频编解码在不同 GPU 平台间的自动适配，支持 NVIDIA NVENC、摩尔线程 mtenc、Intel VA-API，通过统一接口屏蔽底层差异。

## 使用场景

- 跨 GPU 平台部署：同一代码在 NVIDIA/摩尔线程/Intel 上运行
- 硬件编码推流：降低 CPU 负载，提升编码吞吐
- 视频解码 GPU 卸载：大批量视频分析场景
- 多平台兼容库：开发跨平台视频处理中间件
- 自动降级：GPU 不可用时自动回退到 CPU 编码
- 性能对比：同一路视频在不同编码器上对比效果

## 操作指南

### 1. 平台检测与编解码器选择

通过检测 nvidia-smi/mthreads-gmi/vainfo 命令是否可用来判断 GPU 类型。根据类型返回对应编码器（h264_nvenc/h264_mtenc/h264_vaapi/libx264）和解码器。

### 2. 统一推流接口

GPUStreamer 类封装统一逻辑：构造时自动检测 GPU，build_push_command 生成 FFmpeg 命令。NVIDIA 用 p1/ull，摩尔线程用 fast，Intel 用 veryfast。

### 3. 视频解码 GPU 卸载

使用 FFmpeg 硬件解码器（h264_cuvid/h264_mtdec/h264_vaapi）替代 CPU 解码，输出 rawvideo/bgr24 供推理处理。

### 4. 编解码性能对比

| 编码器 | 平台 | 1080p@60fps CPU 占用 | 延迟 |
|-------|------|---------------------|------|
| libx264 | CPU | ~80% | ~50ms |
| h264_nvenc | NVIDIA | ~5% | ~10ms |
| h264_mtenc | 摩尔线程 | ~8% | ~15ms |
| h264_vaapi | Intel | ~10% | ~12ms |

## 常见问题与排查

| 问题 | 原因 | 解决方案 |
|------|------|---------|
| NVENC 不可用 | 驱动版本旧 | 更新到最新驱动 |
| VA-API 编码失败 | 权限不足 | 添加 video 组权限 |
| 画面绿屏 | 像素格式不匹配 | 检查 pix_fmt |
| 编码器初始化失败 | GPU 显存不足 | 释放显存后重试 |
| 跨平台结果不一致 | 编码参数差异 | 统一 bitrate/GOP |
| mtenc 不支持某些 preset | 版本限制 | 使用 fast 替代 |

## 扩展方向

- **AV1 编码**: h264 的下一代，压缩率提升 30%
- **HEVC/H.265**: 比 H.264 节省 50% 码率
- **多帧并行编码**: 利用 GPU 并行处理多帧
- **动态码率**: 根据场景复杂度自适应码率
- **ROI 编码**: 感兴趣区域高质量编码
- **零拷贝编码**: GPU 推理结果直接送编码器

## 技能链路

- **rtmp-streaming**: 推流时选择合适的编码器
- **yolo-video-inference**: 推理结果帧的编码输出
- **gpu-concurrent**: 多路编码的 GPU 分配
- **gpu-benchmark**: 编解码性能基准测试
- **perf-monitor**: 编码延迟监控

## 检查清单

- [ ] GPU 类型自动检测正确
- [ ] 编解码器匹配 GPU 平台
- [ ] 推流延迟小于 200ms
- [ ] CPU 占用显著降低
- [ ] 多路推流性能稳定
- [ ] CPU 回退方案已实现