Skip to content

AidStream SDK 使用指南

简介

AidStream SDK 是一个流媒体数据处理工具包,适用于构建基于 AI 的视频分析应用和服务,并能充分利用硬件加速技术 (如:GPU, VPU, NPU) 实现端到端应用加速。其目标是为开发者提供针对具体预定义流数据处理 (streaming-processing) 的简单接口封装,消除底层技术 (如:硬件加速技术) 的复杂性。

AidStream 基于管道 (pipeline) 的概念,开发者可通过创建预定义的流数据处理 pipeline,将自定义处理任务 (如:AI 模型推理) 及其它内建的任务 (如:视频编解码,视频推拉流,视频流存储,等) 进行组合,实现完整的数据处理链。

在一条完整的 pipeline 中,数据从 输入流 进入,开发者可以通过 AidStream 的 API 获取对应的 RGB 数据,并在处理后输入到 输出流 中。例如,可以在输入端和输出端之间通过插入自定义回调函数获取 RGB 数据及其它数据,在回调函数中完成数据预处理、AI 分析及后处理后,再返回至 pipeline,继续 pipeline 的后续输出过程。

AidStream 工作流如下图所示:

支持情况

输入流输出流 可支持的数据类型不同,当 输入流输出流 的组合在 AidStream 的支持范围内时,才可成功构建 pipeline。目前支持的 输入流输出流 的组合如下表所示:

输入 / 输出RTSP (H.264)RTSP (H.265)FileScreen
RTSP (H.264)
RTSP (H.265)
File
MIPI Camera
USB Camera
  • RTSP (H.264): H.264编码编码的 RTSP 流
  • RTSP (H.265): H.265编码编码的 RTSP 流
  • File:本地的视频文件
  • MIPI Camera:MIPI 相机
  • USB Camera: USB 相机
  • Screen:设备的显示器

支持平台

平台运行方式
IQ9075Ubuntu 24.04

准备工作

  1. IQ9075 硬件

  2. Ubuntu 24.04 系统

系统依赖配置

配置 AidLux 依赖源

bash
# 下载正确的公钥
sudo wget -O- https://archive.aidlux.com/ubuntu24/public.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/private-aidlux.gpg > /dev/null

# 编辑源文件
sudo vim /etc/apt/sources.list.d/private-aidlux.list

#在源文件中填入AidLux 提供的私钥
deb [arch=arm64 signed-by=/etc/apt/trusted.gpg.d/private-aidlux.gpg] https://archive.aidlux.com/ubuntu24 noble main

#  更新缓存
sudo apt update

更新完成后,可以通过如下命令获取到AidLux 官方的SDK 依赖

bash
sudo apt list | grep aid | grep unknown
bash
# 安装软件
# 必须先安装的,系统不自带
sudo apt install python3 python3-pip libopencv-dev python3-opencv  net-tools
# 安装 aidlite 之前必须安装的
sudo apt install aidlux-aistack-base aidrtcm

# 安装 aidlite 及依赖 
sudo apt install aid-lms aidlms-sdk aidlite-sdk cmake
sudo apt-get install libfmt-dev nlohmann-json3-dev
sudo apt install aidlite-*

# 支持DSP
sudo apt-get install qcom-fastrpc1
sudo apt-get install qcom-fastrpc-dev

# 安装 aidgen-sdk
sudo apt install aidgen-sdk

# 安装 mms 服务
sudo apt install aid-mms

# 支持 GPU
sudo apt-add-repository -s ppa:ubuntu-qcom-iot/qcom-ppa
sudo apt install qcom-adreno-cl1
sudo ln -s /usr/lib/aarch64-linux-gnu/libOpenCL.so.1 /usr/lib/aarch64-linux-gnu/libOpenCL.so

安装完成后检查系统 /usr/local/share 新增 aidliteaidgen 目录

设备授权

获取设备 SN 码

bash
cat  /sys/devices/soc0/serial_number

获取授权文件

提供SN号给阿加犀技术人员,生成设备指定 License 文件,放入路径 /etc/opt/aidlux/license/AidLuxLics

激活授权

bash
sudo /opt/aidlux/cpf/aid-lms/manager.sh restart

开发示例

第一步:部署 aidstream-gst

bash
sudo apt-add-repository -s ppa:ubuntu-qcom-iot/qcom-ppa
sudo apt update
sudo apt install weston-autostart

sudo apt install gstreamer1.0-qcom-sample-apps
sudo reboot

sudo apt-get install libgstreamer1.0-dev gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-alsa gstreamer1.0-gtk3

sudo apt-get install -y libjsoncpp-dev

sudo ln -s /usr/lib/aarch64-linux-gnu/libjsoncpp.so /usr/lib/aarch64-linux-gnu/libjsoncpp.so.1

sudo apt install gstreamer1.0-rtsp

sudo apt install aidstream-gst

示例程序位于 /usr/local/share/aidstream-gst/example/cxx/

第二步:编辑流配置文件

流配置文件 aidstream-gst.conf 位于 /usr/local/share/aidstream-gst/conf/ 下。关于配置文件说明可以参考 流配置文件说明

第三步:编译示例代码

  • 编译
bash
cmake -DV4L2=2404-9075 ..
make

第四步:运行 Demo

编译链接成功后会得到4个可执行程序: demo qnn_rtsp rtsp start

bash
# 快速启动流
start {stream id}

# 快速启动自带算法的流
# 模型位于:/usr/local/share/aidstream-gst/example/datas/
qnn_rtsp {stream id}

# 快速启动多线程的推拉流(当前示例设置为2个线程)
rtsp

流配置文件

当使用接口 int start_stream(string stream_id, GetImageCB &cb) 的时候,可根据配置文件 /usr/local/share/aidstream-gst/conf/aidstream-gst.conf 来配置输入输出流。 具体要求如下:

  • 配置文件为json格式。
  • 标注为必选参数,则必须配置。
  • 参数大小写敏感。
参数名类型必填说明
streamsIdstringstream id,唯一标识一组流配置
inputTypestring输入流的协议类型。支持的类型有:rtsp / rtmp / file, 输入不支持的类型及无效地址则返回失败。
inputAddrstring输入流的地址。
outputTypestring输出流的协议类型。支持的类型有:rtsp / wayland / empty。输入不支持的类型一律设置为空,即输出流到fakesink。
outputAddrstring输出流的地址。
decodeTypestring硬解码格式。支持的类型有: H264 / H265
encodeTypestring硬编码格式。支持的类型有: H264 / H265

配置文件参考内容:

💡注意

输入流 & 输出流地址根据开发者需求自定义,参考内容中仅做示例

json
{
"streams": [
    {
    "streamsId": "1",
    "properties": {
            "inputType": "rtsp",
            "inputAddr": "rtsp://admin:aidlux123@192.168.110.234:554/h264/ch1/main/av_stream",
            "outputType": "rtsp",
            "outputAddr": "rtsp://192.168.111.115:8554/aidstream-gst-rtsp-test-1",
            "decodeType": "H264",
            "encodeType": "H264"
            }
    },
    {
    "streamsId": "2",
    "properties": {
            "inputType": "file",
            "inputAddr": "./test_kobe.mp4",
            "outputType": "rtsp",
            "outputAddr": "rtsp://192.168.111.115:8554/aidstream-gst-rtsp-test-2",
            "decodeType": "H264",
            "encodeType": "H264"
            }
    },
    {
    "streamsId": "3",
    "properties": {
            "inputType": "rtmp",
            "inputAddr": "rtmp://192.168.111.115:1935/live/stream",
            "outputType": "rtsp",
            "outputAddr": "rtsp://192.168.111.115:8554/aidstream-gst-rtmp-test-3",
            "decodeType": "H264",
            "encodeType": "H264"
            }
    },
    {
    "streamsId": "4",
    "properties": {
            "inputType": "file",
            "inputAddr": "./test_kobe.mp4",
            "outputType": "wayland",
            "outputAddr": "",
            "decodeType": "H264",
            "encodeType": "H264"
            }
    },
    {                                                                                         
    "streamsId": "5",                                                                           
    "properties": {                                                                           
            "inputType": "rtsp",                                                              
            "inputAddr": "rtsp://admin:aidlux123@192.168.110.234:554/h264/ch1/main/av_stream",
            "outputType": "rtsp",
            "outputAddr": "rtsp://192.168.111.115:8554/aidstream-gst-rtsp-test-5",
            "decodeType": "H265",
            "encodeType": "H265"
            }                   
    }
]
}