Skip to content

AidStream C++ 接口文档 与 插件

插件简介

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 后端。

tips
💡 说明
在当前版本中,不支持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解码能力;

tips
💡 提示:在当前版本中,读写属性仅支持`capture-io-mode`和`output-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的解码流程,便于与其他插件协同工作。
tips
💡 提示:在当前版本中,读写属性仅支持`capture-io-mode`和`output-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使用)
公共函数(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

结构体Image

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

成员变量名类型默认值描述
dataconst 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使用)

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:输出流目标地址。
: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:输出流目标地址。
注: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:输出流目标地址。
注: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

回调函数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 / empty。输入不支持的类型一律设置为空,即输出流到fakesink。
outputAddrstring输出流的地址。
decodeTypestring硬解码格式。支持的类型有: H264 / H265
encodeTypestring硬编码格式。支持的类型有: H264 / H265
tips

<视频输入源>     (例如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"
            }
    },
    {
    "streamsId": "2",
    "properties": {
            "inputType": "file",
            "inputAddr": "./test_kobe.mp4",
            "outputType": "rtsp",
            "outputAddr": "<视频输出推流>/aidstream-gst-rtsp-test-2",
            "decodeType": "H264",
            "encodeType": "H264"
            }
    },
    {
    "streamsId": "3",
    "properties": {
            "inputType": "rtmp",
            "inputAddr": "<视频输入源>/live/stream",
            "outputType": "rtsp",
            "outputAddr": "<视频输出推流>/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": "<视频输入源>/h264/ch1/main/av_stream",
            "outputType": "rtsp",
            "outputAddr": "<视频输出推流>/aidstream-gst-rtsp-test-5",
            "decodeType": "H265",
            "encodeType": "H265"
            }                   
    }
]
}