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) | File | Screen |
---|---|---|---|---|
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:设备的显示器
快速开始
安装
# 阿加犀提供的 AidLux OS 开发板:AidStream SDK 已预装在 Linux 系统环境中
# 阿加犀提供的 Linux Container 开发板:AidStream SDK 已预装于容器镜像中
- 第三方开发板:请联系阿加犀获取相关软件及安装指导
接口文档
开发示例
示例程序位于 /usr/local/share/aidstream-gst/example/cxx/
第一步:编辑流配置文件
流配置文件 aidstream-gst.conf
位于 /usr/local/share/aidstream-gst/conf/
下。关于配置文件说明可以参考 流配置文件说明
第二步:编译示例代码
- 引入头文件及链接库
# 引入头文件
#include "aidstream.h"
# 链接指定 AidStream so 库
$g++ example.cpp -o demo -L/usr/local/lib/ -laidstream-gst -lopencv_core -I/usr/local/include/aidlux/aidstream-gst/ -I/usr/local/lib/aidlux_opencv/include/opencv4/
AidStream SDK 头文件地址: /usr/local/include/aidlux/aidstream-gst/aidstream.h
AidStream SDK 库文件地址: /usr/local/lib/libaidstream-gst.so
- 编译
cmake ..
make
cmake -DV4L2=ON ..
make
第三步:运行 Demo
编译链接成功后会得到4个可执行程序: demo
qnn_rtsp
rtsp
start
# 快速启动流
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格式。
- 标注为必选参数,则必须配置。
- 参数大小写敏感。
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
streamsId | string | 是 | stream id,唯一标识一组流配置 |
inputType | string | 是 | 输入流的协议类型。支持的类型有:rtsp / rtmp / file, 输入不支持的类型及无效地址则返回失败。 |
inputAddr | string | 是 | 输入流的地址。 |
outputType | string | 是 | 输出流的协议类型。支持的类型有:rtsp / wayland / empty。输入不支持的类型一律设置为空,即输出流到fakesink。 |
outputAddr | string | 是 | 输出流的地址。 |
decodeType | string | 否 | 硬解码格式。支持的类型有: H264 / H265 |
encodeType | string | 否 | 硬编码格式。支持的类型有: H264 / H265 |
配置文件参考内容:
💡注意
输入流 & 输出流地址根据开发者需求自定义,参考内容中仅做示例
{
"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"
}
}
]
}