Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

AV1 编码示例

本示例演示使用 rav1e(编码器)和 dav1d(解码器)进行实时 AV1 视频编码和解码,并通过 Rerun 进行可视化。

源代码:av1-encoding

概述

该数据流捕获摄像头画面,使用 AV1 编码,解码后再次编码,再解码,最后显示结果。这模拟了一个往返编码管道,用于测试视频压缩质量。

camera -> rav1e (编码) -> dav1d (解码) -> rav1e (编码) -> dav1d (解码) -> rerun (显示)

节点

  • camera:使用 opencv-video-capture 从摄像头捕获画面
  • rav1e-local:使用 dora-rav1e 将画面编码为 AV1 格式
  • dav1d-remote:使用 dora-dav1d 解码 AV1 画面
  • rav1e-remote:对解码后的画面重新编码为 AV1
  • dav1d-local:最终解码 AV1 画面
  • plot:使用 dora-rerun 在 Rerun 查看器中可视化解码后的画面

前置条件

  • Rust 工具链(用于构建 rav1e/dav1d 节点)
  • Python 3.8+
  • 摄像头

快速开始

1. 安装 dora

# 安装 dora CLI
cargo install dora-cli

# 安装 Python 包(版本必须与 CLI 匹配)
pip install dora-rs

重要:确保 dora CLI 版本与 dora-rs Python 包版本匹配:

dora --version      # 检查 CLI 版本
pip show dora-rs    # 检查 Python 包版本

2. 克隆 dora-hub(获取节点源码)

git clone https://github.com/dora-rs/dora-hub.git
cd dora-hub

3. 构建节点

# 构建 AV1 编码器/解码器节点
cargo build -p dora-rav1e --release
cargo build -p dora-dav1d --release

# 安装 Python 节点
pip install -e node-hub/opencv-video-capture
pip install -e node-hub/dora-rerun

4. 运行数据流

cd examples/av1-encoding

# 启动 dora 守护进程
dora up

# 构建并启动数据流
dora build dataflow.yml
dora start dataflow.yml

5. 查看输出

连接 Rerun 查看器以查看视频流:

rerun --connect rerun+http://127.0.0.1:9876/proxy

6. 停止数据流

dora stop

配置

相机节点

通过 dataflow.yml 中的环境变量进行配置:

变量描述默认值
CAPTURE_PATH相机设备索引0
IMAGE_WIDTH输出图像宽度1280
IMAGE_HEIGHT输出图像高度720

AV1 编码器 (rav1e)

变量描述默认值
RAV1E_SPEED编码速度预设(0-10,越高越快)10

数据流变体

本示例包含多种数据流配置:

  • dataflow.yml:本地机器版本(单机,推荐)
  • dataflow_distributed.yml:分布式部署版本(需要在 encoderdecoder 机器上运行 dora 守护进程)
  • dataflow_reachy.yml:Reachy 机器人深度相机配置

故障排除

版本不匹配错误

如果出现类似 invalid type: map, expected a YAML tag starting with '!' 的错误:

# 检查版本是否匹配
dora --version
pip show dora-rs

# 如需升级
cargo install dora-cli --version X.Y.Z
pip install dora-rs==X.Y.Z

节点未找到错误

如果节点启动失败并显示 “No such file or directory”:

  1. 确保已构建 Rust 节点:cargo build -p dora-rav1e -p dora-dav1d --release
  2. 检查 dataflow.yml 中的 path 是否指向正确的二进制文件位置

相机无法工作

  • 在 macOS 上检查相机权限:系统偏好设置 > 隐私与安全性 > 相机
  • 尝试不同的 CAPTURE_PATH 值(0、1、2…)

架构

+--------+     +-------------+     +-------------+
| camera | --> | rav1e-local | --> | dav1d-remote|
+--------+     +-------------+     +-------------+
                                          |
                                          v
+------+     +------------+     +--------------+
| plot | <-- | dav1d-local| <-- | rav1e-remote |
+------+     +------------+     +--------------+

源代码