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 后端。
💡 说明
在当前版本中,不支持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解码能力;
💡 提示:在当前版本中,读写属性仅支持`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的解码流程,便于与其他插件协同工作。
💡 提示:在当前版本中,读写属性仅支持`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) |
|---|---|---|---|
| Image | data | const char * | 指向存放数据的缓冲区的指针 |
| data_mask | const char * | 指向存放mask数据的缓冲区的指针(预留) | |
| stream_id | string | 标识stream流的唯一ID(必填,方便在多线程条件下定位) | |
| width | int | 目标图片宽度 | |
| height | int | 目标图片高度 | |
| width_padding | int | 目标图片宽度填充位(仅6490 ql使用) | |
| height_padding | int | 目标图片高度填充位(仅6490 ql使用) | |
| size | uint64_t | 图片数据所占内存长度 | |
| fps | double | 帧率 | |
| idx | uint64_t | 帧计数 | |
| frame_time | string | 帧时间戳(仅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) |
|---|---|---|---|
| GSTLogLevel | SINFO | uint8_t | 日志级别SINFO |
| SWARNING | uint8_t | 日志级别SWARNING | |
| SERROR | uint8_t | 日志级别SERROR | |
| SDEBUG | uint8_t | 日志级别SDEBUG | |
| SOFF | uint8_t | 日志级别SOFF | |
| StreamType | EMPTY | uint8_t | 流协议类型为空 |
| WAYLANDSINK | uint8_t | 流协议类型为WayLand | |
| RTSPSINK | uint8_t | 流协议类型为RTSP | |
| RTMPSINK | uint8_t | 流协议类型为RTMP |
结构体Image
定义图片数据相关信息,包括图片配置信息及指针变量。
成员变量名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| data | const char * | 指向存放数据的缓冲区的指针 | |
| data_mask | const char * | 指向存放mask数据的缓冲区的指针(预留) | |
| stream_id | string | 标识stream流的唯一ID(必填,方便在多线程条件下定位) | |
| width | int | 图片宽度 | |
| height | int | 图片高度 | |
| width_padding | int | 目标图片宽度填充位(仅6490 ql使用) | |
| height_padding | int | 目标图片高度填充位(仅6490 ql使用) | |
| size | uint64_t | 图片数据所占内存长度 | |
| fps | double | 帧率 | |
| idx | uint64_t | 帧计数 | |
| frame_time | string | 帧时间戳(仅6490 ql使用) |
warning
如非特殊说明,所有的定义都属于名字空间Aidlux::AidStream。可通过以下命令在代码中引入:
using namespace Aidlux::AidStream;
根据stream id 启动流
API | int 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: 失败 |
举例如下:
// 启动流,标识为stream1
int res = start_stream("stream1", my_cb);启动文件流
API | int 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:失败 |
举例如下:
// 启动文件流
int res = start_stream_input_file("./test.mp4", my_cb, StreamType::WAYLANDSINK, "<视频输出推流>/aidstream-gst-test-6");启动 RTSP 流
API | int 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: 失败 |
举例如下:
// 启动rtsp流
int res = start_stream_input_rtsp("<视频输入源>/h264/ch1/main/av_stream", my_cb, StreamType::RTSPSINK, "<视频输出推流>/aidstream-gst-test-3");启动 RTMP 流
API | int 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: 失败 |
举例如下:
// 启动rtmp流
int res = start_stream_input_rtmp("<视频输入源>/h264/ch1/main/av_stream", my_cb, StreamType::EMPTY, "<视频输出推流>/aidstream-gst-test-2");创建日志,设置文件名及路径(函数clogger)
API | void clogger(const char* path_and_prefix) |
|---|---|
| 描述 | 创建日志,设置文件名及路径 |
| 参数 | path_and_prefix:带路径的日志文件名。 例如: "./aidclog_aidstream_"。 |
| 返回值 | 无 |
举例如下:
// 创建日志,设置文件名及路径
const char* log_path = "./aidclog_aidstream_";
Aidlux::AidStream::clogger(log_path);设置日志级别(函数set_log_level)
API | void set_log_level(GSTLogLevel log_level) |
|---|---|
| 描述 | 设置日志级别。 |
| 参数 | log_level为GSTLogLevel类型的枚举。 关于GSTLogLevel请参考枚举GSTLogLevel |
| 返回值 | 无 |
举例如下:
//设置日志级别
Aidlux::AidStream::set_log_level(GSTLogLevel::SINFO);日志级别(枚举GSTLogLevel)
成员变量名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| SINFO | uint8_t | 0 | 日志级别SINFO |
| SWARNING | uint8_t | 日志级别SWARNING | |
| SERROR | uint8_t | 日志级别SERROR | |
| SDEBUG | uint8_t | 日志级别SDEBUG | |
| SOFF | uint8_t | 日志级别SOFF |
流类型(枚举StreamType流协议类型)
成员变量名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| EMPTY | uint8_t | 0 | 流协议类型为空 |
| WAYLANDSINK | uint8_t | 流协议类型为Wayland | |
| RTSPSINK | uint8_t | 流协议类型为rtsp | |
| RTMPSINK | uint8_t | 流协议类型为rtmp |
回调函数GetImageCB
API | typedef std::function<int8_t(const Image & )> GetImageCB |
|---|---|
| 描述 | 启流函数的入参,用于获取图片资源。此函数由使用者自定义。接口仅提供类型定义来规范回调函数的定义。 |
| 参数 | 参数一是结构体Image 的实例化对象,数据由此传入。 Image对象包括的参数有指向数据缓冲区的指针、数据宽高、帧率等。 具体请参考Image |
| 返回值 | 自定义 |
举例如下:
//回调函数定义
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格式。
- 标注为必选参数,则必须配置。
- 参数大小写敏感。
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 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 |
<视频输入源> (例如rtsp://admin:aidlux123@192.168.110.234:554)
<视频输出推流> (例如rtsp://192.168.111.115:8554)
**💡💡注意💡💡**
请根据自己的ip地址进行配置配置文件参考内容:
{
"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"
}
}
]
}