Skip to content

AidStream接口与插件文档

插件简介

qtivcomposer 插件

qtivcomposer 插件借助 GPU 硬件,将多路输入视频流合并 / 混合为一路输出流。 Pad 属性决定了(每路流的)输入缓冲区在输出缓冲区中的合成方式。

属性名用途说明
Position(位置)设置每路输入帧在输出画面中的 X 轴与 Y 轴摆放位置
Crops(裁剪)对源画面进行可选的裁剪处理
Dimensions(尺寸)对帧画面进行放大 / 缩小(分辨率调整)
Rotate(旋转)将帧画面按直角角度进行旋转
• Flip-horizontal(水平翻转)
• Flip-vertical(垂直翻转)
设置每路输入画面在输出画面中的合成方式
Alpha(透明度)为帧画面添加 Alpha 混合(透明度叠加)数值
Z order(层级顺序)调整各帧画面的叠加层级。默认情况下,帧的层级顺序与接收端 Pad(sink pad)的创建顺序一致,例如 sink_0、sink_1 的顺序
属性名描述说明
name(名称)对象的名称。
• 标识:可读、可写
• 类型:字符串。默认值:"video_composer0"
parent(父对象)对象的父对象。
• 标识:可读、可写
• 类型:"GstObject" 类型的对象
engine(引擎)用于转换操作的后端引擎。
• 标识:可读、可写
• 枚举类型:"GstVideoConverterBackend"。默认值:1,"gles"
◦ (1): gles - 使用基于 OpenGLES 的视频转换器
◦ (2): fcv - 使用基于 FastCV 的视频转换器
💡 说明:高通计算机视觉 SDK(fcv)引擎目前暂不支持
latency(延迟)直播模式下的额外延迟,允许上游为当前位置生成缓冲区的时间更长(单位:纳秒)。
• 标识:可读、可写
• 类型:无符号 64 位整数
• 范围:0 - 18446744073709551615
• 默认值:0
start-time-selection(启动时间选择)决定输出的启动时间。
• 标识:可读、可写
• 枚举类型:"GstAggregatorStartTimeSelection"。默认值:0,"zero"
◦ (0): zero - 从运行时间 0 开始(默认)
◦ (1): first - 从首次观测到的输入运行时间开始
◦ (2): set - 使用 start-time 属性设置启动时间
start-time(启动时间)当 start-time-selection 设为 set 时使用的启动时间。
• 标识:可读、可写
• 类型:无符号 64 位整数。范围:0 - 18446744073709551615
• 默认值:18446744073709551615
background(背景)背景颜色。
• 标识:可读、可写,且在 NULL、READY、PAUSED、PLAYING 状态下可修改
• 类型:无符号整数。范围:0 - 4294967295
• 默认值:4286611584

Waylandsink 插件

waylandsink 插件基于 GStreamer 的 GstVideoSink 类实现,它依托 Wayland Weston 合成器工作 —— 会自行创建窗口,并将输入的视频帧渲染到该窗口中。 该插件会将 Weston 客户端的 API 与状态,映射为对应的 GStreamer API 与状态。高通对 waylandsink 的实现进行了扩展,新增了窗口定位功能的支持,同时添加了基于 GBM 的专属缓冲区后端(用于实现零拷贝),以及 XDG shell 后端。

tip

💡 说明 在当前版本中,不支持x、y、width和height属性。

属性名描述说明
name(名称)对象的名称。
• 标识:可读、可写
• 类型:字符串。默认值:"waylandsink0"
parent(父对象)对象的父对象。
• 标识:可读、可写
• 类型:"GstObject" 类型的对象
sync(时钟同步)基于时钟进行同步。
• 标识:可读、可写
• 类型:布尔值。默认值:true
max-lateness(最大延迟)缓冲区被丢弃前允许的最大延迟时间(单位:纳秒,-1 表示无限制)。
• 标识:可读、可写
• 类型:64位整数。范围:-1 至 9223372036854775807,默认值:20000000
qos(服务质量)向上游生成服务质量事件。
• 标识:可读、可写
• 类型:布尔值。默认值:true
async(异步)异步切换至PAUSED状态。
• 标识:可读、可写
• 类型:布尔值。默认值:true
ts-offset(时间戳偏移)时间戳偏移量(单位:纳秒)。
• 标识:可读、可写
• 类型:64位整数。范围:-9223372036854775808 至 9223372036854775807,默认值:0
enable-last-sample(启用最后一帧)启用last-sample属性。
• 标识:可读、可写
• 类型:布尔值。默认值:true
last-sample(最后一帧)接收端接收到的最后一帧数据。
• 标识:可读
• 类型:"GstSample" 类型的装箱指针
blocksize(块大小)每次拉取缓冲区的字节大小(0 表示默认)。
• 标识:可读、可写
• 类型:无符号整数。范围:0 - 4294967295,默认值:4096
render-delay(渲染延迟)接收端的额外渲染延迟(单位:纳秒)。
• 标识:可读、可写
• 类型:无符号64位整数。范围:0 - 18446744073709551615,默认值:0
throttle-time(节流时间)渲染缓冲区之间的间隔时间(0 表示禁用)。
• 标识:可读、可写
• 类型:无符号64位整数。范围:0 - 18446744073709551615,默认值:0
max-bitrate(最大比特率)渲染的最大每秒比特数(0 表示禁用)。
• 标识:可读、可写
• 类型:无符号64位整数。范围:0 - 18446744073709551615,默认值:0
show-preroll-frame(显示预滚帧)预滚阶段是否渲染视频帧。
• 标识:可读、可写
• 类型:布尔值。默认值:true
display(显示名称)用于建立连接的Wayland显示名称(若未通过GstContext提供)。
• 标识:可读、可写
• 类型:字符串。默认值:null
xdg-shell(XDG外壳)为显示使用XDG外壳协议。
• 标识:可读、可写
• 类型:布尔值。默认值:true
fullscreen(全屏)决定界面是否全屏显示。
• 标识:可读、可写,且在NULL、READY、PAUSED、PLAYING状态下可修改
• 类型:布尔值。默认值:false

qtivsplit 插件

qtivsplit插件借助GPU硬件,将一路输入视频流拆分为多路输出流。流的数量是用户自定义的变量,且与源Pad的数量相等。 每个源Pad的“mode”属性,决定了对输入流的拆分方式。

运行模式描述说明
none• 接收端Pad上的输入视频帧,会被复制到每个源Pad上。
• 会基于该Pad协商后的GstCaps,执行更多颜色转换与放大/缩小操作。
single-roi-meta• 会检查输入视频缓冲区中是否存在GstVideoRegionOfInterestMeta(感兴趣区域元数据)。
• 需确保源Pad创建时的数量,与单个GstBuffer中预期的GstVideoRegionOfInterestMeta最大数量相等。
• 若源Pad数量不足,没有对应Pad的ROI元数据会被忽略。
batch-roi-meta对附加在缓冲区上的GstVideoRegionOfInterestMeta条目进行操作;与single-roi-meta不同的是,该模式下会将所有元数据条目以独立缓冲区的形式发送到Pad上。
属性名描述说明
name(名称)对象的名称。
• 标识:可读、可写
• 类型:字符串。默认值:"videosplit0"
parent(父对象)对象的父对象。
• 标识:可读、可写
• 类型:"GstObject" 类型的对象
engine(引擎)用于转换操作的后端引擎。
• 标识:可读、可写
• 枚举类型:"GstVideoConverterBackend"。默认值:1,"gles"
◦ (1): gles - 使用基于 OpenGLES 的视频转换器
◦ (2): fcv - 使用基于高通计算机视觉 SDK 的视频转换器
💡 说明:高通计算机视觉 SDK(fcv)引擎目前暂不支持

qtivtransform 插件

qtivtransform插件借助GPU硬件,根据元素属性对输入的YUV或RGB视频帧执行放大/缩小、翻转、旋转、裁剪及颜色转换操作。

属性名用途说明
Destination(目标位置)设置每路输入帧在输出画面中的X轴、Y轴摆放位置,同时指定放大/缩小的尺寸。
Crop(裁剪)对源画面进行可选的裁剪处理。
Rotate(旋转)将帧画面按直角角度旋转。
• Flip-horizontal(水平翻转)
• Flip-vertical(垂直翻转)
分别对帧画面进行水平翻转和垂直翻转处理。

若未指定GstCaps源Pad的变换属性,插件会协商出与输入一致的能力。这种情况下,插件会以直通模式运行,直到参数发生变更。

该插件使用高通Adreno™ GPU提供的Qualcomm IB2C库来执行所有变换操作。该库被封装在自定义的GstC2dVideoConverter抽象层中,通过API来创建、配置并处理输入和输出缓冲区。

自定义缓冲区池类GstImageBufferPool可分配GBM或ION输出缓冲区,具体取决于GstImageBufferPool与下游插件之间协商的能力:

  • GBM分配通过高通libgbm库完成。
  • ION分配通过向内核发送IOCTL命令完成。
属性名描述说明
name(名称)对象的名称。
• 标识:可读、可写
• 类型:字符串。默认值:"videotransform0"
parent(父对象)对象的父对象。
• 标识:可读、可写
• 类型:"GstObject" 类型的对象
engine(引擎)用于转换操作的后端引擎。
• 标识:可读、可写
• 枚举类型:"GstVideoConverterBackend"。默认值:1,"gles"
◦ (1): gles - 使用基于 OpenGLES 的视频转换器
◦ (2): fcv - 使用基于高通计算机视觉 SDK 的视频转换器
💡 说明:高通计算机视觉 SDK(fcv)引擎目前暂不支持
flip-horizontal(水平翻转)水平翻转视频画面。
• 标识:可读、可写,且在NULL、READY、PAUSED、PLAYING状态下可修改
• 类型:布尔值。默认值:false
flip-vertical(垂直翻转)垂直翻转视频画面。
• 标识:可读、可写,且在NULL、READY、PAUSED、PLAYING状态下可修改
• 类型:布尔值。默认值:false
rotate(旋转)旋转视频画面。
• 标识:可读、可写,且在NULL、READY、PAUSED、PLAYING状态下可修改
• 枚举类型:"GstVideoTransformRotate"。默认值:0,"none"
◦ (0): none - 不旋转
◦ (1): 90CW - 顺时针旋转90度
◦ (2): 90CCW - 逆时针旋转90度
◦ (3): 180 - 旋转180度
crop(裁剪)输入画面内的裁剪矩形(格式:<X, Y, WIDTH, HEIGHT>)。
💡 说明:该属性不支持时间同步。
• 标识:可读、可写,且在NULL、READY、PAUSED、PLAYING状态下可修改
• 类型:gint类型的GstValue数组
destination(目标区域)输出画面内的目标矩形(格式:<X, Y, WIDTH, HEIGHT>)。
• 标识:可读、可写,且在NULL、READY、PAUSED、PLAYING状态下可修改
• 类型:gint类型的GstValue数组
background(背景)背景颜色。
• 标识:可读、可写,且在NULL、READY、PAUSED、PLAYING状态下可修改
• 类型:无符号整数。范围:0 - 4294967295
• 默认值:4286611584

qtisocketsink 插件

qtisocketsink插件通过UNIX套接字,将基于文件描述符(FD)的GstBuffer传输到其他进程,而qtisocketsrc是对应的接收入口。 qtisocketsink插件需要一个UNIX域套接字文件(需以.sock为后缀),并将其作为socket属性传入,以此实现FD的传输。 从其他进程传递到该插件的缓冲区会通过引用计数器进行跟踪:当缓冲区通过套接字发送或返回时,引用计数器会相应地递增或递减。 以下是可通过qtisocketsink进行的部分配置:

属性名配置说明
async设为false时,套接字会异步切换至PAUSED状态。
max-lateness调整缓冲区被丢弃前允许的最大延迟时间(单位:纳秒)。
max-bitrate设置渲染的最大每秒比特数。
属性名描述说明
name(名称)对象的名称。
• 标识:可读、可写
• 类型:字符串。默认值:"fdsocketsink0"
parent(父对象)对象的父对象。
• 标识:可读、可写
• 类型:"GstObject" 类型的对象
sync(时钟同步)基于时钟进行同步。
• 标识:可读、可写
• 类型:布尔值。默认值:true
max-lateness(最大延迟)缓冲区被丢弃前允许的最大延迟时间(单位:纳秒,-1 表示无限制)。
• 标识:可读、可写
• 类型:64位整数。范围:-1 至 9223372036854775807,默认值:-1
qos(服务质量)向上游生成服务质量事件。
• 标识:可读、可写
• 类型:布尔值。默认值:false
async(异步)异步切换至PAUSED状态。
• 标识:可读、可写
• 类型:布尔值。默认值:true
ts-offset(时间戳偏移)时间戳偏移量(单位:纳秒)。
• 标识:可读、可写
enable-last-sample(启用最后一帧)启用last-sample属性。
• 标识:可读、可写
• 类型:布尔值。默认值:true
last-sample(最后一帧)接收端接收到的最后一帧数据。
• 标识:可读
• 类型:"GstSample" 类型的装箱指针
blocksize(块大小)每次拉取缓冲区的字节大小(0 表示默认)。
• 标识:可读、可写
• 类型:无符号整数。范围:0 - 4294967295,默认值:4096
render-delay(渲染延迟)接收端的额外渲染延迟(单位:纳秒)。
• 标识:可读、可写
• 类型:无符号64位整数。范围:0 - 18446744073709551615,默认值:0
throttle-time(节流时间)渲染缓冲区之间的间隔时间(0 表示禁用)。
• 标识:可读、可写
• 类型:无符号64位整数。范围:0 - 18446744073709551615,默认值:0
max-bitrate(最大比特率)渲染的最大每秒比特数(0 表示禁用)。
• 标识:可读、可写
• 类型:无符号64位整数。范围:0 - 18446744073709551615,默认值:0
socket(套接字)UNIX域套接字的路径。
• 标识:可读、可写,仅在NULL或READY状态下可修改
• 类型:字符串。默认值:null

qtisocketsrc 插件

qtisocketsrc插件通过UNIX套接字,接收来自以qtisocketsink为出口的其他进程所传输的、基于文件描述符(FD)的GstBuffer。 qtisocketsrc插件需要一个套接字文件(需以.sock为后缀),并将其作为socket属性传入,以此接收文件描述符。 在连接到套接字后,插件会轮询或等待接收GstBuffer,并用该缓冲区创建数据块,以容纳接收到的帧数据。 可对缓冲区进行如下自定义配置:

  • 块大小(Block size):读取缓冲区的字节大小。
  • 缓冲区数量(num-buffers):在发送EOF信号前,发送到输出端的缓冲区数量。
属性名描述说明
name(名称)对象的名称。
• 标识:可读、可写
• 类型:字符串。默认值:"fdsocketsrc0"
parent(父对象)对象的父对象。
• 标识:可读、可写
• 类型:"GstObject" 类型的对象
blocksize(块大小)每次读取缓冲区的字节大小(-1 表示默认)。
• 标识:可读、可写
• 类型:无符号整数。范围:0 - 4294967295,默认值:4096
num-buffers(缓冲区数量)发送EOS信号前输出的缓冲区数量(-1 表示无限制)。
• 标识:可读、可写
• 类型:整数。范围:-1 - 2147483647,默认值:-1
typefind(类型检测)协商前执行类型检测(已弃用,无功能)。
• 标识:可读、可写、已弃用
• 类型:布尔值。默认值:false
do-timestamp(添加时间戳)将当前流时间应用到缓冲区。
• 标识:可读、可写
• 类型:布尔值。默认值:false
socket(套接字)UNIX域套接字的路径。
• 标识:可读、可写,仅在NULL或READY状态下可修改
• 类型:字符串。默认值:null
timeout(超时时间)套接字连接超时时间。
• 标识:可读、可写,仅在NULL或READY状态下可修改
• 类型:无符号64位整数。范围:0 - 18446744073709551615,默认值:0

v4l2h264dec 插件

v4l2h264dec 插件使用 V4L2 API 对视频流进行解码,核心特点包括: 在支持的平台上,该插件借助 H.264 视频解码器,提供硬件加速的 H.264解码能力;

tip

💡 提示:在当前版本中,读写属性仅支持capture-io-modeoutput-io-mode,且这两个属性仅能与(5)drmabuf-import - GST_V4L2_IO_DMABUF_IMPORT属性配合使用。

属性名描述说明
automatic-request-sync-point-flags(自动请求同步点标志)自动请求同步点时使用的标志。
• 标识:可读、可写
• 标志类型:"GstVideoDecoderRequestSyncPointFlags"。默认值:0x00000003,"corrupt-output+discard-input"
◦ (0x00000001): discard-input - GST_VIDEO_DECODER_REQUEST_SYNC_POINT_DISCARD_INPUT
◦ (0x00000002): corrupt-output - GST_VIDEO_DECODER_REQUEST_SYNC_POINT_CORRUPT_OUTPUT
automatic-request-sync-points(自动请求同步点)按需自动请求同步点。
• 标识:可读、可写
• 类型:布尔值。默认值:false
capture-io-mode(捕获I/O模式)捕获端I/O模式(与源Pad匹配)。
• 标识:可读、可写
• 枚举类型:"GstV4l2IOMode"。默认值:0,"auto"
◦ (0): auto - GST_V4L2_IO_AUTO
◦ (1): rw - GST_V4L2_IO_RW
◦ (2): mmap - GST_V4L2_IO_MMAP
◦ (3): userptr - GST_V4L2_IO_USERPTR
◦ (4): dmabuf - GST_V4L2_IO_DMABUF
◦ (5): dmabuf-import - GST_V4L2_IO_DMABUF_IMPORT
device(设备路径)设备的路径。
• 标识:可读
• 类型:字符串。默认值:"/dev/video0"
device-fd(设备文件描述符)设备的文件描述符。
• 标识:可读
• 类型:整数。范围:-1 至 2147483647,默认值:-1
device-name(设备名称)设备的名称。
• 标识:可读
• 类型:字符串。默认值:null
discard-corrupted-frames(丢弃损坏帧)丢弃标记为损坏的帧,而非将其作为输出处理。
• 标识:可读、可写
• 类型:布尔值。默认值:false
extra-controls(额外控制)设备的额外v4l2控制(CID)。
• 标识:可读、可写
• 类型:"GstStructure"类型的装箱指针
max-errors(最大错误数)返回流错误前允许的连续解码器错误最大数量。
• 标识:可读、可写
• 类型:整数。范围:-1 至 2147483647,默认值:10
min-force-key-unit-interval(强制关键单元最小间隔)强制关键单元请求之间的最小间隔(单位:纳秒)。
• 标识:可读、可写
• 类型:无符号64位整数。范围:0 - 18446744073709551615,默认值:0
name(名称)对象的名称。
• 标识:可读、可写,0x2000
• 类型:字符串。默认值:"v4l2h264dec0"
output-io-mode(输出I/O模式)输出端I/O模式(与接收Pad匹配)。
• 标识:可读、可写
• 枚举类型:"GstV4l2IOMode"。默认值:0,"auto"
◦ (0): auto - GST_V4L2_IO_AUTO
◦ (1): rw - GST_V4L2_IO_RW
◦ (2): mmap - GST_V4L2_IO_MMAP
◦ (3): userptr - GST_V4L2_IO_USERPTR
◦ (4): dmabuf - GST_V4L2_IO_DMABUF
◦ (5): dmabuf-import - GST_V4L2_IO_DMABUF_IMPORT
parent(父对象)对象的父对象。
• 标识:可读、可写,0x2000
• 类型:"GstObject"类型的对象
qos(服务质量)处理来自下游的服务质量事件。
• 标识:可读、可写
• 类型:布尔值。默认值:true

v4l2h265dec 插件

v4l2h265dec插件通过V4L2 API对视频流进行解码,核心特点如下: 在支持的平台上,该插件借助H.265视频解码器,提供硬件加速的H.265解码能力;

  • V4L2:Linux系统中视频设备的标准接口,负责视频数据的捕获、编解码等操作;
  • H.265:相比H.264压缩效率更高的视频编码格式,硬件加速解码可降低系统资源占用;
  • GstVideoDecoder:GStreamer框架的视频解码器基类,确保插件兼容GStreamer的解码流程,便于与其他插件协同工作。

tip

💡 提示:在当前版本中,读写属性仅支持capture-io-modeoutput-io-mode,且这两个属性仅能与(5)dmabuf-import - GST_V4L2_IO_DMABUF_IMPORT属性配合使用。

属性名描述说明
automatic-request-sync-point-flags(自动请求同步点标志)自动请求同步点时使用的标志。
• 标识:可读、可写
• 标志类型:"GstVideoDecoderRequestSyncPointFlags"。默认值:0x00000003,"corrupt-output+discard-input"
◦ (0x00000001): discard-input - GST_VIDEO_DECODER_REQUEST_SYNC_POINT_DISCARD_INPUT
◦ (0x00000002): corrupt-output - GST_VIDEO_DECODER_REQUEST_SYNC_POINT_CORRUPT_OUTPUT
automatic-request-sync-points(自动请求同步点)按需自动请求同步点。
• 标识:可读、可写
• 类型:布尔值。默认值:false
capture-io-mode(捕获I/O模式)捕获端I/O模式(与源Pad匹配)。
• 标识:可读、可写
• 枚举类型:"GstV4l2IOMode"。默认值:0,"auto"
◦ (0): auto - GST_V4L2_IO_AUTO
◦ (1): rw - GST_V4L2_IO_RW
◦ (2): mmap - GST_V4L2_IO_MMAP
◦ (3): userptr - GST_V4L2_IO_USERPTR
◦ (4): dmabuf - GST_V4L2_IO_DMABUF
◦ (5): dmabuf-import - GST_V4L2_IO_DMABUF_IMPORT
device(设备路径)设备的路径。
• 标识:可读
• 类型:字符串。默认值:"/dev/video0"
device-fd(设备文件描述符)设备的文件描述符。
• 标识:可读
• 类型:整数。范围:-1 至 2147483647,默认值:-1
device-name(设备名称)设备的名称。
• 标识:可读
• 类型:字符串。默认值:null
discard-corrupted-frames(丢弃损坏帧)丢弃标记为损坏的帧,而非将其作为输出处理。
• 标识:可读、可写
• 类型:布尔值。默认值:false
extra-controls(额外控制)设备的额外v4l2控制(CID)。
• 标识:可读、可写
• 类型:"GstStructure"类型的装箱指针
max-errors(最大错误数)返回流错误前允许的连续解码器错误最大数量。
• 标识:可读、可写
• 类型:整数。范围:-1 至 2147483647,默认值:10
min-force-key-unit-interval(强制关键单元最小间隔)强制关键单元请求之间的最小间隔(单位:纳秒)。
• 标识:可读、可写
• 类型:无符号64位整数。范围:0 - 18446744073709551615,默认值:0
name(名称)对象的名称。
• 标识:可读、可写,0x2000
• 类型:字符串。默认值:"v4l2h265dec0"
output-io-mode(输出I/O模式)输出端I/O模式(与接收Pad匹配)。
• 标识:可读、可写
• 枚举类型:"GstV4l2IOMode"。默认值:0,"auto"
◦ (0): auto - GST_V4L2_IO_AUTO
◦ (1): rw - GST_V4L2_IO_RW
◦ (2): mmap - GST_V4L2_IO_MMAP
◦ (3): userptr - GST_V4L2_IO_USERPTR
◦ (4): dmabuf - GST_V4L2_IO_DMABUF
◦ (5): dmabuf-import - GST_V4L2_IO_DMABUF_IMPORT
parent(父对象)对象的父对象。
• 标识:可读、可写,0x2000
• 类型:"GstObject"类型的对象
qos(服务质量)处理来自下游的服务质量事件。
• 标识:可读、可写
• 类型:布尔值。默认值:true

v4l2h264enc 插件

v4l2h264enc插件通过V4L2 API对视频流进行编码,核心特点如下:

在支持的平台上,该插件借助H.264视频编码器,提供硬件加速的H.264编码能力。

  • V4L2:Linux系统中视频设备的标准接口,负责视频数据的编码、捕获等操作;
  • H.264硬件加速编码:相比软件编码,可利用硬件(如GPU)专用模块提升编码效率,同时降低CPU资源占用;
  • GstVideoEncoder:GStreamer框架的视频编码器基类,确保插件兼容GStreamer的编码流程,便于与其他插件(如采集、封装插件)协同工作。
属性名描述说明
capture-io-mode(捕获I/O模式)捕获端I/O模式(与源Pad匹配)。
• 标识:可读、可写
• 枚举类型:"GstV4l2IOMode"。默认值:0,"auto"
◦ (0): auto - GST_V4L2_IO_AUTO
◦ (1): rw - GST_V4L2_IO_RW
◦ (2): mmap - GST_V4L2_IO_MMAP
◦ (3): userptr - GST_V4L2_IO_USERPTR
◦ (4): dmabuf - GST_V4L2_IO_DMABUF
◦ (5): dmabuf-import - GST_V4L2_IO_DMABUF_IMPORT
device(设备路径)设备的路径。
• 标识:可读
• 类型:字符串。默认值:"/dev/video1"
device-fd(设备文件描述符)设备的文件描述符。
• 标识:可读
• 类型:整数。范围:-1 至 2147483647,默认值:-1
device-name(设备名称)设备的名称。
• 标识:可读
• 类型:字符串。默认值:null
extra-controls(额外控制)设备的额外v4l2控制ID(CID)。
• 标识:可读、可写
• 类型:"GstStructure"类型的装箱指针
min-force-key-unit-interval(强制关键单元最小间隔)强制关键单元请求之间的最小间隔(单位:纳秒)。
• 标识:可读、可写
• 类型:无符号64位整数
• 范围:0 - 18446744073709551615,默认值:0
name(名称)对象的名称。
• 标识:可读、可写,0x2000
• 类型:字符串。默认值:"v4l2h264enc0"
output-io-mode(输出I/O模式)输出端I/O模式(与接收Pad匹配)。
• 标识:可读、可写
• 枚举类型:"GstV4l2IOMode"。默认值:0,"auto"
◦ (0): auto - GST_V4L2_IO_AUTO
◦ (1): rw - GST_V4L2_IO_RW
◦ (2): mmap - GST_V4L2_IO_MMAP
◦ (3): userptr - GST_V4L2_IO_USERPTR
◦ (4): dmabuf - GST_V4L2_IO_DMABUF
◦ (5): dmabuf-import - GST_V4L2_IO_DMABUF_IMPORT
parent(父对象)对象的父对象。
• 标识:可读、可写,0x2000
• 类型:"GstObject"类型的对象
qos(服务质量)处理来自下游的服务质量事件。
• 标识:可读、可写
• 类型:布尔值。默认值:true
控制名称控制类型参数说明
horizontal_flip(水平翻转)布尔型• value=0:默认值
• flags=execute-on-write(写入时执行)
vertical_flip(垂直翻转)布尔型• value=0:默认值
• flags=execute-on-write(写入时执行)
rotate(旋转)整型• min=0(最小值)
• max=270(最大值)
• step=90(步长)
• value=0:默认值
• flags=execute-on-write and modify-layout(写入时执行且修改布局)

v4l2h265enc 插件

v4l2h265enc插件通过V4L2 API对视频流进行编码,核心特点如下: 在支持的平台上,该插件借助H.265视频编码器,提供硬件加速的H.265(MPEG-H第2部分)编码能力;

  • V4L2:Linux系统中视频设备的标准接口,负责视频数据的编码、捕获等操作;
  • H.265硬件加速编码:相比H.264,H.265压缩效率更高,硬件加速编码可利用专用硬件模块降低CPU占用,同时提升编码速度;
  • GstVideoEncoder:GStreamer框架的视频编码器基类,确保插件兼容GStreamer的编码流程,便于与采集、封装等插件协同工作。
属性名描述说明
capture-io-mode(捕获I/O模式)捕获端I/O模式(与源Pad匹配)。
• 标识:可读、可写
• 枚举类型:"GstV4l2IOMode"。默认值:0,"auto"
◦ (0): auto - GST_V4L2_IO_AUTO
◦ (1): rw - GST_V4L2_IO_RW
◦ (2): mmap - GST_V4L2_IO_MMAP
◦ (3): userptr - GST_V4L2_IO_USERPTR
◦ (4): dmabuf - GST_V4L2_IO_DMABUF
◦ (5): dmabuf-import - GST_V4L2_IO_DMABUF_IMPORT
device(设备路径)设备的路径。
• 标识:可读
• 类型:字符串。默认值:"/dev/video1"
device-fd(设备文件描述符)设备的文件描述符。
• 标识:可读
• 类型:整数。范围:-1 至 2147483647,默认值:-1
device-name(设备名称)设备的名称。
• 标识:可读
• 类型:字符串。默认值:null
extra-controls(额外控制)设备的额外v4l2控制(CID)。
• 标识:可读、可写
• 类型:"GstStructure"类型的装箱指针
min-force-key-unit-interval(强制关键单元最小间隔)强制关键单元请求之间的最小间隔(单位:纳秒)。
• 标识:可读、可写
• 类型:无符号64位整数。范围:0 - 18446744073709551615,默认值:0
name(名称)对象的名称。
• 标识:可读、可写,0x2000
• 类型:字符串。默认值:"v4l2h265enc0"
output-io-mode(输出I/O模式)输出端I/O模式(与接收Pad匹配)。
• 标识:可读、可写
• 枚举类型:"GstV4l2IOMode"。默认值:0,"auto"
◦ (0): auto - GST_V4L2_IO_AUTO
◦ (1): rw - GST_V4L2_IO_RW
◦ (2): mmap - GST_V4L2_IO_MMAP
◦ (3): userptr - GST_V4L2_IO_USERPTR
◦ (4): dmabuf - GST_V4L2_IO_DMABUF
◦ (5): dmabuf-import - GST_V4L2_IO_DMABUF_IMPORT
parent(父对象)对象的父对象。
• 标识:可读、可写,0x2000
• 类型:"GstObject"类型的对象
qos(服务质量)处理来自下游的服务质量事件。
• 标识:可读、可写
• 类型:布尔值。默认值:true

C++ 接口

结构体(struct)成员变量名(public member variable)类型(Type)描述(Description)
Imagedataconst char *指向存放数据的缓冲区的指针
data_maskconst char *指向存放mask数据的缓冲区的指针(预留)
stream_idstring标识stream流的唯一ID(必填,方便在多线程条件下定位)
widthint目标图片宽度
heightint目标图片高度
width_paddingint目标图片宽度填充位(仅6490 ql使用)
height_paddingint目标图片高度填充位(仅6490 ql使用)
sizeuint64_t图片数据所占内存长度
fpsdouble帧率
idxuint64_t帧计数
frame_timestring帧时间戳(仅6490 ql使用)
enable_mask_drawingbool是否启用遮罩绘制
pipe_statusint管道状态
strideint跨距
scanlineint扫描线
ptsint64_t呈现时间戳
formatstring图片格式
公共函数(public function)描述(Description)
void clogger(const char* path_and_prefix)创建日志,设置文件名及路径
void set_log_level(GSTLogLevel log_level)设置日志级别
typedef function<int8_t( const Image & )> GetImageCB启流函数的入参,用于获取图片资源。此函数由使用者自定义。接口仅提供类型定义来规范回调函数的定义。
int start_stream(string stream_id, GetImageCB &cb)根据stream id 启动流(由于stream流配置繁多,建议通过配置文件的方式配置流,此接口为唯一建议使用接口)
int start_stream_input_file(string file_path, GetImageCB cb, StreamType display_type, string target_path, int width, int height, string stream_id)启动文件流
int start_stream_input_rtsp(string rtsp_addr, GetImageCB cb, StreamType display_type, string target_path, int width, int height, string stream_id)启动RTSP流
int start_stream_input_rtmp(string rtmp_addr, GetImageCB cb, StreamType display_type, string target_path, int width, int height, string stream_id)启动RTMP流
枚举(ENUM)成员变量名(public member variable)类型(Type)描述(Description)
GSTLogLevelSINFOuint8_t日志级别SINFO
SWARNINGuint8_t日志级别SWARNING
SERRORuint8_t日志级别SERROR
SDEBUGuint8_t日志级别SDEBUG
SOFFuint8_t日志级别SOFF
StreamTypeEMPTYuint8_t流协议类型为空
WAYLANDSINKuint8_t流协议类型为WayLand
RTSPSINKuint8_t流协议类型为RTSP
RTMPSINKuint8_t流协议类型为RTMP
MP4uint8_t流协议类型为MP4

结构体Image

定义图片数据相关信息,包括图片配置信息及指针变量。

成员变量名类型默认值描述
dataconst char *nullptr指向存放数据的缓冲区的指针
data_maskconst char *nullptr指向存放mask数据的缓冲区的指针(预留)
stream_idstring""标识stream流的唯一ID(必填,方便在多线程条件下定位)
widthint-图片宽度
heightint-图片高度
width_paddingint-目标图片宽度填充位(仅6490 ql使用)
height_paddingint-目标图片高度填充位(仅6490 ql使用)
sizeuint64_t-图片数据所占内存长度
fpsdouble-帧率
idxuint64_t-帧计数
frame_timestring""帧时间戳(仅6490 ql使用)
enable_mask_drawingboolfalse是否启用遮罩绘制
pipe_statusint-管道状态
strideint0跨距
scanlineint0扫描线
ptsint64_t-1呈现时间戳
formatstring""图片格式

warning

如非特殊说明,所有的定义都属于名字空间Aidlux::AidStream。可通过以下命令在代码中引入:

using namespace Aidlux::AidStream;

根据stream id 启动流

APIint start_stream(string stream_id, GetImageCB &cb)
描述启动流。 入参为stream id。
stream id及对应配置定义在文件/usr/local/share/aidstream-gst/conf/aidstream-gst.conf中。
在此配置文件中stream id 要求唯一。
注:此接口为唯一强烈建议使用接口
参数stream_id:标识唯一的流配置。
cb:回调函数。关于回调函数,请参考回调函数
关于如何设置配置文件,请参考Reference
返回值0:成功,
-1: 失败

举例如下:

cpp
// 启动流,标识为stream1
int res = start_stream("stream1", my_cb);

启动文件流

APIint start_stream_input_file(string file_path, GetImageCB cb, StreamType display_type, string target_path, int width, int height, string stream_id)
描述启动文件流。 不依赖配置文件,直接配置相应参数。
参数file_path:源MP4数据文件。
cb:回调函数。
display_type:输出流类型。
target_path:输出流目标地址。
stream_id:标识该流的唯一ID。
:width和height已无效
返回值0:成功,
-1:失败

举例如下:

cpp
// 启动文件流
int res = start_stream_input_file("./test.mp4", my_cb, StreamType::WAYLANDSINK, "<视频输出推流>/aidstream-gst-test-6");

启动 RTSP 流

APIint start_stream_input_rtsp(string rtsp_addr, GetImageCB cb, StreamType display_type, string target_path, int width, int height, string stream_id)
描述启动rtsp流。 不依赖配置文件,直接配置相应参数。
参数rtsp_addr:源rtsp地址。
cb:回调函数。
display_type:输出流类型。
target_path:输出流目标地址。
stream_id:标识该流的唯一ID。
注:width和height已无效
返回值0:成功,
-1: 失败

举例如下:

cpp
// 启动rtsp流
int res = start_stream_input_rtsp("<视频输入源>/h264/ch1/main/av_stream", my_cb, StreamType::RTSPSINK, "<视频输出推流>/aidstream-gst-test-3");

启动 RTMP 流

APIint start_stream_input_rtmp(string rtmp_addr, GetImageCB cb, StreamType display_type, string target_path, int width, int height, string stream_id)
描述启动rtmp流。 不依赖配置文件,直接配置相应参数。
参数rtmp_addr:源rtmp地址。
cb:回调函数。
display_type:输出流类型。
target_path:输出流目标地址。
stream_id:标识该流的唯一ID。
注:width和height已无效
返回值0:成功,
-1: 失败

举例如下:

cpp
// 启动rtmp流
int res = start_stream_input_rtmp("<视频输入源>/h264/ch1/main/av_stream", my_cb, StreamType::EMPTY, "<视频输出推流>/aidstream-gst-test-2");

创建日志,设置文件名及路径(函数clogger)

APIvoid clogger(const char* path_and_prefix)
描述创建日志,设置文件名及路径
参数path_and_prefix:带路径的日志文件名。
例如: "./aidclog_aidstream_"
返回值

举例如下:

cpp
// 创建日志,设置文件名及路径
const char* log_path = "./aidclog_aidstream_";
Aidlux::AidStream::clogger(log_path);

设置日志级别(函数set_log_level)

APIvoid set_log_level(GSTLogLevel log_level)
描述设置日志级别。
参数log_level为GSTLogLevel类型的枚举。
关于GSTLogLevel请参考枚举GSTLogLevel
返回值

举例如下:

cpp
//设置日志级别
Aidlux::AidStream::set_log_level(GSTLogLevel::SINFO);

日志级别-枚举GSTLogLevel

成员变量名类型默认值描述
SINFOuint8_t0日志级别SINFO
SWARNINGuint8_t日志级别SWARNING
SERRORuint8_t日志级别SERROR
SDEBUGuint8_t日志级别SDEBUG
SOFFuint8_t日志级别SOFF

流类型-枚举StreamType流协议类型

成员变量名类型默认值描述
EMPTYuint8_t0流协议类型为空
WAYLANDSINKuint8_t流协议类型为Wayland
RTSPSINKuint8_t流协议类型为rtsp
RTMPSINKuint8_t流协议类型为rtmp
MP4uint8_t流协议类型为mp4

场景类型-枚举ScenarioType

成员变量名类型描述
Pulling_Aint读取视频流 -> (帧数据自定义处理)
PullingEncode_Bint视频流编码 -> 视频流输出
PullingInferenceOutput_Cint读取视频流 -> (视频解码) -> AI 处理 -> 输出结果
PullingInferenceEncode_Dint读取视频流 -> (视频解码) -> AI 处理 -> 视频流输出
PullingMultiCompInference_Eint读取多个视频流合并为一路然后执行推理
PullingMultiComp_Fint读取多个视频流合并为一路
PullingMultiCompInference_Gint读取多个视频流合并并执行推理,同时保存MP4和推送RTSP
PullingMultiCompInference_Hint读取多个视频流合并并执行推理,同时保存MP4和推送RTSP

任务类型-枚举TaskType

成员变量名类型描述
MultiVideoDecodeint多路视频解码
MultiVideoEncodeint多路视频编码
VideoDecodeint视频解码——所有拉流所必须定义的任务类型
InferenceCBint推理回调——在回调函数中调用推理程序
VideoEncodeint视频编码——当视频需要编码时需要定义该任务类型
CustomCBint自定义回调——当需要自定义回调操作时可定义该类任务类型
InferenceQTIint使用高通插件qtimlqnn进行推理

状态码-枚举AidStreamStatusCode

成员变量名类型描述
AS_OKint0操作成功
AS_ERR_INVALID_PARAMint-1无效参数
AS_ERR_STREAM_EXISTSint-2流已存在
AS_ERR_STREAM_NOT_FOUNDint-3未找到指定流
AS_ERR_PIPELINE_CREATEint-4管道创建失败
AS_ERR_NOT_RUNNINGint-5流未在运行状态
AS_ERR_NOT_SYNCEDint-6流未同步
AS_ERR_PUSH_BUFFERint-7推送缓冲区失败
AS_ERR_INTERNALint-8内部错误

结构体HevcAuInfo

定义HEVC访问单元(Access Unit)的解析信息。

成员变量名类型描述
has_vpsbool是否存在VPS(视频参数集)
has_spsbool是否存在SPS(序列参数集)
has_ppsbool是否存在PPS(图像参数集)
is_keyframebool是否为关键帧
has_slicebool是否包含切片数据

回调函数GetImageCB

APItypedef std::function<int8_t(const Image & )> GetImageCB
描述启流函数的入参,用于获取图片资源。此函数由使用者自定义。接口仅提供类型定义来规范回调函数的定义。
参数参数一是结构体Image 的实例化对象,数据由此传入。
Image对象包括的参数有指向数据缓冲区的指针、数据宽高、帧率等。
具体请参考Image
返回值自定义

举例如下:

cpp
//回调函数定义
int8_t my_get_img_cb(const Image & img)
{
    printf("width: %d, height: %d, fps: %f\n", img.width, img.height, img.fps);
    ......
    return 0;
}

Aidstream配置文件参考

当使用接口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 / mp4 / empty。empty类型表示输出到fakesink(不推流也不渲染)。
outputAddrstring输出流的地址。
decodeTypestring硬解码格式。支持的类型有: H264 / H265
encodeTypestring硬编码格式。支持的类型有: H264 / H265
audiobool是否开启音频
saveMp4bool是否保存为MP4文件
outputFilestring保存MP4文件的输出路径
widthint输出视频宽度
heightint输出视频高度
fpsint输出视频帧率
rolling_savebool是否开启滚动录制
rollingFpsint滚动录制时的帧率
manual_rebuildbool是否手动重建管道
network_pushbool是否开启网络推流

tip

<视频输入源> (例如rtsp://admin:aidlux123@192.168.110.234:554) <视频输出推流> (例如rtsp://192.168.111.115:8554)

💡💡 请根据自己的ip地址进行配置

配置文件参考内容:

json
{
"streams": [
    {
    "streamsId": "1",
    "properties": {
            "inputType": "rtsp",
            "inputAddr": "<视频输入源>/h264/ch1/main/av_stream",
            "outputType": "rtsp",
            "outputAddr": "<视频输出推流>/aidstream-gst-rtsp-test-1",
            "decodeType": "H264",
            "encodeType": "H264"
        }
    }
]
}

结构体StreamIns

作为start()函数的参数,提供了丰富的流配置项。

成员变量名类型默认值描述
stream_idstring"empty"流的唯一标识
p_stream_idstring"empty_p"父流标识,用于关联父子流关系
inputTypestring""输入流类型(rtsp/rtmp/file/usbcam)
inputAddrstring""输入源地址
outputTypestring""输出流类型(rtsp/wayland/mp4/empty)
outputAddrstring""输出源地址
decodeTypestring"H264"硬件解码格式(H264/H265)
encodeTypestring"H264"硬件编码格式(H264/H265)
audio_switchboolfalse是否开启音频
save_mp4boolfalse是否保存MP4
network_pushboolfalse是否网络推流,当此开关开启会有独立处理
output_filestring"/tmp/saved_output.mp4"MP4输出文件路径
widthint0视频宽度
heightint0视频高度
fpsint0视频帧率
rolling_saveboolfalse是否滚动录像
rollingFpsint-1滚动录像MP4文件的播放帧率
manual_rebuildbooltrue当收到EOS或错误时是否自动重连(true=手动重连,false=自动重连)

AidStreamEngine类

AidStreamEngine 提供基于场景(ScenarioType)和任务(TaskType)驱动的新一代引擎API。

接口方法描述
AidStreamEngine(ScenarioType scenario_type)构造函数,通过场景类型初始化引擎
~AidStreamEngine()析构函数
int add_task(TaskType task_type, std::unordered_map<std::string, std::string>& config)添加处理任务,返回0成功、-1失败
void set_callback(TaskType task_type, GetImageCB &callback)为指定任务类型设置回调函数
int start()启动引擎流处理,返回0成功
static void stop()停止引擎流处理(静态方法)

根据StreamIns启动流(函数start)

APIint start(StreamIns &stream_ins, GetImageCB &cb)
描述以编程方式直接配置所有流参数(无需配置文件)启动流。
参数stream_ins:包含18个字段的流配置结构体。
cb:回调函数。
返回值0:成功,
-1(或其他AidStreamStatusCode错误状态码已说明):失败
参考[状态码-枚举AidStreamStatusCode](#状态码-枚举aidstreamstatuscode)'

停止并释放流(函数gstreamer_pipeline_shutdown)

APIvoid gstreamer_pipeline_shutdown(string stream_id)
描述停止流。支持按 stream_id 停止单个流,或传入 "all_stream" 停止全部流。
参数stream_id:具体流ID或"all_stream"。
返回值

获取滚动录制视频(函数get_rolling_save_video)

APIint get_rolling_save_video(std::string stream_id, std::string output_video, int delay_seconds = 5)
描述获取正在滚动录制的MP4视频文件,从滚动缓冲区中合并并导出指定时长的视频片段。适用于异常侦测后的视频片段持久化。
参数stream_id:流标识。
output_video:输出视频文件路径。
delay_seconds:延迟获取的秒数(默认为5秒)。
返回值0:成功,-1:失败

USB摄像头接口

APIint start_stream_input_usbcam(StreamIns &stream_ins, GetImageCB cb, StreamType display_type, std::string stream_id)
描述启动USB摄像头流处理。
参数stream_ins:USB 摄像头的初始化配置属性。
cb:回调函数。
display_type:输出流类型。
stream_id:流标识的唯一ID。
返回值0:成功,
-1:失败

Splice拼接流API

支持在裸流拼接解码场景中应用,实现多路画面的混合。包含以下核心接口:

  • int start_splice_stream(...):启动拼接流的解码及输出流程。
  • int stop_splice_stream(...):停止拼接流。
  • int decode_put_frame_splice(...):向拼接缓冲区送入视频帧。
  • HevcAuInfo parse_hevc_au_info_splice(...):在拼接前解析 H.265 数据单元。
APIint start_splice_stream(std::string stream_id, GetImageCB &cb)
描述启动拼接流的解码及输出流程。
参数stream_id:流的唯一标识。
cb:回调函数。
返回值0:成功,-1:失败
APIint stop_splice_stream(std::string stream_id)
描述停止拼接流。
参数stream_id:流的唯一标识。
返回值0:成功,-1:失败
APIint decode_put_frame_splice(const uint8_t *data, size_t size, const std::string &stream_id, int64_t pts = -1, bool is_keyframe = false)
描述向拼接缓冲区送入视频帧数据。
参数data:视频帧数据指针。
size:数据大小。
stream_id:流的唯一标识。
pts:呈现时间戳(默认-1)。
is_keyframe:是否为关键帧(默认false)。
返回值0:成功,-1:失败
APIHevcAuInfo parse_hevc_au_info_splice(const uint8_t *data, size_t size)
描述在拼接前解析 H.265(HEVC)访问单元信息。
参数data:HEVC数据指针。
size:数据大小。
返回值HevcAuInfo 结构体,包含VPS/SPS/PPS/关键帧/切片信息

获取流属性(函数get_properties)

APIint get_properties(std::string stream_id, StreamIns &stream_obj)
描述从配置文件中读取指定 stream_id 的流配置属性,并填充到 StreamIns 对象中。
参数stream_id:流的唯一标识。
stream_obj:用于接收配置属性的 StreamIns 引用。
返回值0:成功,-1:失败

获取流状态(函数get_stream_status)

APIint get_stream_status()
描述获取当前流的运行状态。当填充索引等于取回索引且线程状态为1时,返回1表示流正在运行。
参数
返回值1:流正在运行,0:流空闲,-1:未初始化

获取图像数据(函数get_data)

将缓冲区数据转换为 OpenCV cv::Mat 对象。

APIcv::Mat get_data(int height, int width, char* data)
描述将指定高度、宽度的原始图像数据转换为 OpenCV cv::Mat 对象(CV_8UC3 格式)。
参数height:图像高度。
width:图像宽度。
data:指向图像数据的指针。
返回值OpenCV cv::Mat 对象

获取V4L2图像数据(函数v4l2_get_mat / v4l2_get_mat_ori)

将 V4L2 来源的图像数据转换为 OpenCV BGR 格式 Mat 对象。

APIint v4l2_get_mat(cv::Mat &destMat, Image img)
描述将 Image 中的图像数据转换为 BGR 格式的 cv::Mat,并裁剪为实际尺寸(去除填充位)。适用于 6490 QL 平台。
参数destMat:输出的 BGR 格式矩阵。
img:包含图像数据和尺寸的 Image 对象。
返回值0:成功,-1:失败(数据为空时)
APIint v4l2_get_mat_ori(cv::Mat &destMat, Image img)
描述将 Image 中的图像数据转换为 BGR 格式的 cv::Mat(保留填充位,不裁剪)。适用于 6490 QL 平台。
参数destMat:输出的 BGR 格式矩阵。
img:包含图像数据和尺寸的 Image 对象。
返回值0:成功,-1:失败(数据为空时)

启动音频流(函数start_audio_stream)

APIint start_audio_stream(std::string stream_id, GetImageCB &cb)
描述启动音频流处理,配合视频流一起使用。
参数stream_id:流的唯一标识。
cb:回调函数。
返回值0:成功,-1:失败

分叉双输出流(函数start_split_stream)

APIint start_split_stream(std::string stream_id_1, GetImageCB &cb1, std::string stream_id_2, GetImageCB &cb2)
描述启动一个输入流分叉为两路输出流。两个 stream_id 必须具有相同的父流标识(p_stream_id)和相同的输入配置。
参数stream_id_1:第一路输出流的标识。
cb1:第一路流的回调函数。
stream_id_2:第二路输出流的标识。
cb2:第二路流的回调函数。
返回值0:成功,-1:失败