Skip to main content
qrb_ros_video 示例应用是一个 ROS 包,可在 Qualcomm 机器人平台上提供硬件加速的视频处理。它使用 Qualcomm 视频处理单元 (VPU) 将原始 YUV 帧编码为 H.264 或 H.265 流,并将这些流解码回原始帧。缓冲区通过 qrb_ros_transport 作为 DMA 缓冲区传递,因此帧传递无需拷贝,并且编码器可直接从 qrb_ros_camera 接受输入。
注意有关更多信息,请参见 qrb_ros_video GitHub 仓库。

qrb_ros_video 的流水线流程

encoder_launch.py 和 decoder_launch.py 启动文件启动两个独立的可组合节点容器,每个容器在各自的命名空间中运行。编码器容器使用 ImageReader 读取原始帧,对其进行编码,并使用 CompressedWriter 将压缩流写入文件。解码器容器使用 CompressedReader 读取压缩流,对其进行解码,并使用 ImageWriter 写入帧。如果你重映射编码器的输入,编码器也可以直接从 qrb_ros_camera 接受帧。

图:qrb_ros_video 流水线

qrb_ros_video 流水线中使用的 ROS 节点

qrb_ros_video 流水线中使用的 ROS topic

注意每个节点将其端点声明为相对名称 input 和 output。启动文件将它们重映射为上述名称,并将每个节点放置在 recording_ns 或 playback_ns 命名空间中,因此 /input 和 /output 在运行时不存在。运行 ros2 topic list 查看有效名称。

qrb_ros_video 的 ROS 参数

表:编码器参数 表:解码器参数

前提条件

开箱即用运行 qrb_ros_video

1

设置运行环境

在设备上启动命令行终端并运行以下命令。
SSH Session
注意ROS_DOMAIN_ID 的取值范围:[0, 232]
2

编码本地 YUV 文件

  1. 将原始 YUV 示例文件拷贝到设备上的 /data/ 目录。
  2. 运行编码器。
    SSH Session
    reader_node 读取 /data/1920_1080_nv12.yuv,writer_node 将编码后的流写入 /data/1920_1080_nv12.mp4。可通过相应节点的 url 参数覆盖任一路径。
3

解码本地视频文件

  1. 将视频示例文件拷贝到设备上的 /data/ 目录。
  2. 运行解码器。
    SSH Session
    reader_node 读取 /data/1920_1080.mp4。writer_node 默认将解码后的帧写入 /dev/null,因此不会生成输出文件;设置其 url 参数以保留解码后的 YUV。
4

验证 ROS topic

在第二个 SSH 终端中,列出 topic 并检查编码器或解码器发布的流。
SSH Session

构建并运行 qrb_ros_video

1

在主机上克隆 qrb_ros_video

2

在主机上构建 qrb_ros_video

3

将 qrb_ros_video 推送到设备

SSH Session
4

在设备上运行 qrb_ros_video

按照 开箱即用运行 qrb_ros_video 在设备上运行 qrb_ros_video。

限制

  • 硬件加速的编码和解码需要 Qualcomm VPU,因此设备上必须启用视频叠加层。
  • 支持的编解码器格式为 H.264 和 H.265。支持的输入像素格式为 NV12 和 P010。