灵派海思SDK的API参考手册

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_45326556/article/details/100576135

本手册镜像地址:https://gitee.com/LinkPi/LinkLib/wikis/pages

1. 概述

LinkSDK 是一个基于海思平台的快速开发工具,致力于降低嵌入式音视频产品的开发门槛,缩短产品研发周期,增强产品扩展性与灵活性,提升产品稳定性。LinkSDK的设计灵感来自于Gstreamer,只要按照业务流程将模块与模块依次连接起来,并配置各个模块的少量参数即可。即使是没有嵌入式开发经验的软件人员,甚至是web前端开发者,都可以使用LinkSDK开发出成熟的音视频产品。LinkSDK包含以下几个部分:

LinkLib 是LinkSDK的核心运行库,基于Qt开发,针对多款海思方案进行了适配,包含了大量常用外围芯片的驱动程序。除了基本的音视频输入输出编码解码等模块外,还包括流媒体传输、多格式录制、多画面导播、图像调优、特效叠加、美颜、音频降噪等。C++程序员可以直接基于此开发产品,LinkLib支持继承扩展,提供了最大的开发灵活性的同时,极大的减少了开发的代码量。以最基本的视频采集编码这个功能为例,使用海思原厂SDK需要3000行以上的代码量,而使用LinkLib的代码如下:

    Link::init();

    LinkObject *vi=Link::create("InputVi");
    QVariantMap dataVi;
    dataVi["interface"]="HDMI-A";
    vi->start(dataVi);

    LinkObject *encv=Link::create("EncodeV");
    encv->start();

    vi->linkV(encv);

开发者在开发过程中并不需要掌握驱动原理以及板卡的资源配置,上例中我们只需要告知视频从第几个接口输入,并与编码模块连接即可。当然,还可以通过对模块进行参数配置来满足实际中不同的需求,可以通过【快速开始】了解,并详细阅读各模块文档。

LinkLib内部包含线程池管理功能,能够按照功能与协作关系自动分配模块的运行线程。

基本接口详解

本节内容

LinkObject


LinkLib的全部模块均以LinkObject为基类,公共接口如下:

    bool setData(QVariantMap data);
    const QVariantMap getData();
    bool start();
    bool start(QVariantMap data);
    bool stop(bool block=false);
    void destroy();
    QString name();
    LinkObject* linkA(LinkObject* dst);
    LinkObject* linkV(LinkObject* dst);
    LinkObject* unLinkA(LinkObject* dst);
    LinkObject* unLinkV(LinkObject* dst);
    QVariant invoke(QString func, QVariant value=QVariant());

各接口功能如下:

bool setData(QVariantMap data)

  • 接口功能:设定模块的参数。
  • data:模块参数,具体详见各模块的说明。
  • 返回值:成功-true;失败-false
  • 注意事项:该接口通常在模块start之前调用。大部分模块支持热更新,因此也可以在start之后随时通过该接口更新模块参数。接口内部会自动比对输入值与当前值,重复无变化的输入参数不会引起模块的更新操作。模块的大部分参数拥有默认值,可以不设定。

const QVariantMap getData()

  • 接口功能:获取模块的参数。
  • 返回值:模块参数。
  • 注意事项:除了用户设定的参数,部分模块的运行状态可以通过该接口查询。该接口同步运行,需要在start之后调用。

bool start()

  • 接口功能:运行模块。
  • 返回值:成功-true;失败-false
  • 注意事项:该接口为异步接口,返回true并不代表模块内部工作正常,模块内部的状态可以通过invokegetData查询。

bool start(QVariantMap data)

  • 接口功能:运行模块并设定模块参数。
  • 返回值:成功-true;失败-false
  • 注意事项:内部的顺序为先setData,后start

bool stop(bool block=false)

  • 接口功能:停止模块。
  • block:是否阻塞运行。
  • 返回值:成功-true;失败-false
  • 注意事项:非阻塞运行时,该模块为异步运行。

void destroy()

  • 接口功能:销毁模块。
  • 注意事项:调用该接口后,模块会在线程消息循环结束后自动释放全部资源,不应该也没有必要使用delete来释放LinkObject对象。

QString name()

  • 接口功能:获取实例名。
  • 返回值:实例名,该名称在调用Link::create方法时由系统分配或由用户指定。

LinkObject* linkA(LinkObject* dst)

  • 接口功能:连接音频数据流。
  • dst:连接目标,数据由this流向dst。
  • 返回值:dst,用于串联。
  • 注意事项linkAlinkV接口与start接口并无先后要求,习惯上start在先,但是例如Mux模块,当用于录制文件时,start通常在link之后被调用。

LinkObject* linkV(LinkObject* dst)

  • 接口功能:连接视频数据流。
  • dst:连接目标,数据由this流向dst。
  • 返回值:dst,用于串联。
  • 注意事项:同LinkA

LinkObject* linkE(LinkObject* dst)

  • 接口功能:连接事件信息流,常见于SVP相关模块。
  • dst:连接目标,数据由this流向dst。
  • 返回值:dst,用于串联。
  • 注意事项:同LinkA

LinkObject* unLinkA(LinkObject* dst)

  • 接口功能:断开音频数据流。
  • dst:连接目标,数据由this流向dst。
  • 返回值:dst,用于串联。

LinkObject* unLinkV(LinkObject* dst)

  • 接口功能:断开视频数据流。
  • dst:连接目标,数据由this流向dst。
  • 返回值:dst,用于串联。

LinkObject* unLinkV(LinkObject* dst)

  • 接口功能:断开事件信息流。
  • dst:连接目标,数据由this流向dst。
  • 返回值:dst,用于串联。

QVariant invoke(QString func, QVariant value=QVariant())

  • 接口功能:调用模块内部方法。
  • func:方法名,详见各模块说明。
  • value: 入参,可以不填。
  • 返回值:模块方法返回值。
  • 注意事项:该接口同步运行,需要在start之后调用。

Link


Link类是一个静态方法类,包含了LinkLib需要的一些重要函数和辅助函数。

    static bool init(bool sys=true);
    static LinkObject* create(QString className, QString name="");
    static LinkObject* find(QString name);
    static bool setConfig(QString path);
    static QVariantMap getConfig();
    static QVariant o2v(LinkObject *obj);
    static LinkObject* v2o(QVariant var);

各函数功能如下:

bool init(bool sys=true)

  • 接口功能:LinkLib初始化。
  • sys:是否初始化海思mpp系统。
  • 返回值:成功-true;失败-false
  • 注意事项:改函数必须在程序的最开始被调用,如果有两个进程同时使用LinkLib,后启动的那个需要将sys设为false,否则mpp系统会重置,导致先启动的进程异常。

LinkObject* create(QString className, QString name="")

  • 接口功能:创建LinkLib模块。
  • className:模块名称。
  • name:实例名称。
  • 返回值:模块实例指针,当模块不存在时返回NULL
  • 注意事项:当name为空时,系统会自动以"模块名_序号"的形式命名实例。为保证实例名不冲突,为两个实例指定相同的name时,后创建的实例将以"name_序号"的形式命名。所有的模块名均以Link开头,因此当调用该方法时,可以省略Link前缀,例如LinkEncodeV模块,创建时仅需Link::create("EncodeV")即可。

LinkObject* find(QString name)

  • 接口功能:寻找指定名称的实例。
  • name:实例名称。
  • 返回值:返回实例指针或NULL

bool setConfig(QString path)

  • 接口功能:设置板卡配置。
  • path:配置文件路径。
  • 返回值:成功-true;失败-false
  • 注意事项:通常不需要调用该函数,在调用init函数时,系统会读取默认板卡配置文件,保存在相应的文件系统中。

QVariantMap getConfig()

  • 接口功能:获取板卡配置。
  • 返回值:板卡配置。

Json


Json类是一个静态方法类,将qt5提供的json函数进行封装,更易于配合LinkLib使用,包含的函数如下:

    static QString encode(QVariant data);
    static QVariant decode(const QString &jsonStr);
    static QVariant loadFile(QString path);
    static bool saveFile(QVariant data, QString path);

各函数功能如下:

QString encode(QVariant data)

  • 接口功能:将Qvariant编码成json格式的字符串。
  • data:json数据。
  • 返回值:json字符串。

QVariant decode(const QString &jsonStr)

  • 接口功能:将json字符串解码成Qvariant对象。
  • jsonStr:json字符串。
  • 返回值:json数据。

QVariant loadFile(QString path)

  • 接口功能:读取json文件并解码为Qvariant对象。
  • path:json文件路径。
  • 返回值:json数据。

bool saveFile(QVariant data, QString path)

  • 接口功能:将json数据保存在指定的文件中。
  • data:json数据。
  • path:json文件路径。
  • 返回值:成功-true;失败-false

快速开始

创建工程


首先建议您使用LinkPi官方提供的虚拟机环境进行开发,参考虚拟机使用说明

新建一个Qt工程,选择相应版本的Kit,以3531A为例,交叉工具链为v300,因此选择Qt Kit H3。

在这里插入图片描述
在.pro文件中增加以下代码

chip = HI3531A
include(/home/zc/LinkLib/Link.pri)

其中chip为您的开发平台核心板上的型号

编写代码


【概述】的示例代码中,我们实现了基本的视频编码,在这里我们将功能升级为音视频同时采集并编码,最终推流,达到一个直播的效果,代码如下:

#include <QCoreApplication>
#include "Link.h"
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    Link::init();

    LinkObject *vi=Link::create("InputVi");
    QVariantMap dataVi;
    dataVi["interface"]="HDMI-A";
    vi->start(dataVi);

    LinkObject *ai=Link::create("InputAi");
    QVariantMap dataAi;
    dataAi["interface"]="HDMI-A";
    ai->start(dataAi);

    LinkObject *encv=Link::create("EncodeV");
    QVariantMap dataEncV;
    dataEncV["codec"]="h264";
    dataEncV["bitrate"]=2000;
    dataEncV["width"]=1280;
    dataEncV["height"]=720;
    encv->start(dataEncV);

    LinkObject *enca=Link::create("EncodeA");
    QVariantMap dataEncA;
    dataEncA["codec"]="aac";
    dataEncA["bitrate"]=128000;
    dataEncA["samplerate"]=48000;;
    enca->start(dataEncA);

    LinkObject *mux=Link::create("Mux");
    QVariantMap dataMux;
    dataMux["path"]="rtmp://127.0.0.1/live/test";
    mux->start(dataMux);

    vi->linkV(encv)->linkV(mux);
    ai->linkA(enca)->linkA(mux);

    return a.exec();
}

该示例主要分以下几个步骤:

  1. 初始化
    Link::init();
  1. 创建实例,如
    LinkObject *vi=Link::create("InputVi");
  1. 设定参数并运行实例,如
    QVariantMap dataVi;
    dataVi["interface"]="HDMI-A";
    vi->start(dataVi);

当然也可以拆分成两步来写,例

    QVariantMap dataVi;
    dataVi["interface"]="HDMI-A";
    vi->setData(dataVi);
    vi->start();
  1. 连接数据流,如
    vi->linkV(encv)->linkV(mux);

进阶


LinkLib 除了内部包含的模块外,您还可以通过继承派生的方式创建属于你自己的模块,参考Demo:DIY

LinkSDK 解决是底层业务问题,上层业务逻辑依然是一个产品最重要的部分,因此,除了详细阅读本文档以外,为了发挥LinkLib的最大能力需要您更深入的学习Qt开发,借助Qt强大的开发能力,一定可以轻松快速的搭建出成熟的产品。

模块文档说明

  • 数据接口表说明

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✖️ - -
Audio Out ✖️ - -
Video Out ✔️ VPSS ✔️

上表中"Audio In"表示该模块可以接收其他模块的音频数据,即可以作为A->LinkA(B)中的B
以此类推,"Video Out"表示该模块可以输出视频数据给其他模块,即可以作为A->LinkV(B)中的A

多重连接表示该模块是否支持同时接收多个其他模块的数据,或者同时输出多份数据给多个其他模块。
例如上表引用自LinkInputVi模块,其中"Video Out"接口可多重连接,则该模块可以支持如下操作。

    LinkObject *vi=Link::create("InputVi");
    LinkObject *enc1=Link::create("EncodeV");
    LinkObject *enc2=Link::create("EncodeV");
    vi->linkV(enc1);
    vi->linkV(enc2);
  • 模块公共参数

参数 类型 默认值 说明 热更新
memSize Int 0 缓冲区大小,单位byte ✖️
bufLenA Int 20 音频缓冲队列长度 ✔️
bufLenV Int 20 视频缓冲队列长度 ✔️
  • 模块方法

模块方法通过LinkObject::invoke方法调用

  • 模块事件

模块事件通过连接信号LinkObject::newEvent(QString type, QVariant msg)实现,其中type为事件类型,msg为携带消息。

关于board.json

当您浏览到后面InputXX模块时,会发现模块参数interface,通过指定一个简单的接口名称,即可完成复杂的接口设置。

而这些设置就定义在/link/config/board.json中,例如:

{
	"interfaceV":{
		"HDMI-A":{"chip":"Link","name":"hdmi2","protocols":["HDMI"],"did": 2,"cid": 8,"mode": "bt1120s","dstFramerate":60},
		"HDMI-B":{"chip":"Link","name":"hdmi1","protocols":["HDMI"],"did": 4,"cid": 16,"mode": "bt1120s","dstFramerate":60}
	},
	"interfaceA":{
		"HDMI-A":{"chip":"Link","name":"hdmi2","samplerate":48000,"did": 0,"cid": 0,"chnCnt": 2, "channels": 2},
		"HDMI-B":{"chip":"Link","name":"hdmi1","samplerate":48000,"did": 1,"cid": 0,"chnCnt": 2, "channels": 2},
		"HDMI-OUT":{"samplerate":48000,"did": 2,"cid": 0,"channels":2, "chnCnt": 2,"mode":"i2sm"},
		"Mini-In":{"chip":"tlv32","samplerate":48000,"channels":2,"did": 2,"cid": 0,"mode":"i2sm","clkSel":true, "chnCnt": 2},
		"Mini-Out":{"samplerate":48000,"channels":2,"did": 0,"cid": 0,"mode":"i2sm","clkSel":true, "chnCnt": 2}
	},
	"videoBuffer":{
		"sys":[
			{"size":12441600,"cnt":16},
			{"size":3110400,"cnt":40},
			{"size":1382400,"cnt":20},
			{"size":345600,"cnt":30}
		],
		"dec":[
			{"size":16711680,"cnt":4},
			{"size":4177920,"cnt":20}
		]
	},
	"register":{
		"0x120400A0":"0xbbbbb",
		"0x1204009C":"0xbbbbb"
	}
}

其中InterfaceV中定义了视频接口,interfaceA中定义了音频接口。

videoBuffer用于管理海思的mpp的vb内存分配,根据不同的应用需求来配置不同的内存块大小、数量。

register用于设置海思的寄存器,当然您也可以在启动脚本中进行寄存器设置。

输入输出

LinkInputAi

LinkInputAi模块包含了音频采集、重采样、噪声抑制、回声消除等功能。

海思平台的音频采集使用mpp系统的AI接口,该模块因此得名。

通常作为音频数据流的源端。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✖️ - -
Audio Out ✔️ Raw ✔️
Video Out ✖️ - -
  • 模块参数

参数 类型 默认值 说明 热更新
interface String - 接口名称 ✖️
samplerate Int 48000 采样率 ✔️
resamplerate Int -1 重采样频率 ✔️
mode String “i2ss” 采集模式 ✔️
channels Int 1 采集声道数 ✔️
chnCnt Int 2 接口声道数 ✔️
clkSel Bool true 时钟分离 ✔️
buf Int 5 系统缓冲深度 ✔️
delay Int 0 音频延迟,单位ms ✔️
delay2 Int 0 应用层同步缓冲数 ✔️
time Int 0 单次采样时间,单位ms ✔️
anr Int 0 噪声抑制强度,0/1/2 ✔️
did Int 0 AI设备号 ✔️
cid Int 0 AI通道号 ✔️
cid2 Int 0 AI通道号2 ✔️
aecdid Int 0 回声消除设备号 ✔️
aeccid Int 0 回声消除通道号 ✔️

各实例的interface不可重复,同一个音频端口的InputAi实例只能创建一次,该模块支持多重连接输出,因此,如果多处需要该音频数据,多次调用该实例的linkA方法即可。

当定义了interface参数时,samplerate、chnCnt、did、cid等参数无需设置,通常仅需要根据应用需求调整resamplerate和channels即可。详情访问【关于board.json】

海思的anr、agc、aec都仅支持16k单声道,LinkInputAi内部会按照两路16k单声道处理,并混合为立体声,即当开启anr/agc/aec的时候,模块的输出恒定为16K立体声,可根据需要在下游连接LinkResample模块。

  • 模块方法

暂无

LinkOutputAo

音频输出模块。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ Raw ✖️
Video In ✖️ - -
Audio Out ✔️ - -
Video Out ✖️ - -
  • 模块参数

参数 类型 默认值 说明 热更新
interface String - 接口名称 ✖️
samplerate Int 48000 采样率 ✔️
resamplerate Int -1 重采样频率 ✔️
mode String “i2ss” 采集模式 ✔️
channels Int 1 采集声道数 ✔️
chnCnt Int 2 接口声道数 ✔️
clkSel Bool true 时钟分离 ✔️
buf Int 5 系统缓冲深度 ✔️
time Int 0 单次采样时间,单位ms ✔️
did Int 0 AI设备号 ✔️
cid Int 0 AI通道号 ✔️
  • 模块方法

暂无

LinkInputVi

LinkInputVi模块包含了图像采集、帧率控制、驱动通信等功能。

海思平台的图像采集使用mpp系统的VI接口,该模块因此得名。

通常作为视频数据流的源端。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✖️ - -
Audio Out ✖️ - -
Video Out ✔️ VPSS ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
interface String - 接口名称 ✖️
pic String “/link/config/nosignal.yuv” NoSignal插图地址 ✖️
avalible Bool false 输入源有效 ✔️
width Int 1920 图像宽度 ✔️
height Int 1080 图像高度 ✔️
rotate Int 0 旋转角度,支持0,90,180,270 ✔️
double Bool false 双沿采样 ✔️
mode String “bt1120s” 采集模式 ✔️
interlace Bool false 隔行图像 ✔️
srcFramerate Int 30 输入源帧率 ✔️
dstFramerate Int 30 输出帧率 ✔️
did Int 0 VI设备号 ✖️
cid Int 0 VI通道号 ✖️

各实例的interface不可重复,同一个视频端口的InputVi实例只能创建一次,该模块支持多重连接输出,因此,如果多处需要该图像数据,多次调用该实例的linkV方法即可。

当定义了interface参数时,width、height等参数则无需设定,模块内部完成驱动通信,自动设定这些参数。mode、vid、cid等参数则从board.json中提取,详情访问【关于board.json】

pic指定的NoSignal图像必须为YUV420sp格式的原始图像,1920x1080。

  • 模块方法

QVariant getReport()

  • 方法功能:返回驱动状态。
  • 返回值:Map类型,包含avalible:bool、width:int、height:int、framerate:int、interlace:bool。
  • 注意事项:仅当interface参数被定义时有效。

LinkOuputVo

LinkInputVo负责输出图像以及初始化LinuxFb系统

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✔️ VPSS ✖️
Audio Out ✖️ - -
Video Out ✖️ - -
  • 模块参数

参数 类型 默认值 说明 热更新
type String “hdmi” 接口类型,可选值hdmi,vga,cvbs,多选用竖线"|"隔开 ✔️
mode Int -1 图像同步模式,[0,32],对应枚举类型VO_INTF_SYNC_E,不建议使用 ✔️
output String “1080P60” 图像同步模式,对应枚举类型VO_INTF_SYNC_E中VO_OUTPUT_后面的内容,区分大小写 ✔️
ui Bool false 是否启用LinuxFb ✔️
flip Bool false 是否翻转图像 ✖️

参数output对应海思文档中的VO_INTF_SYNC_E,每个芯片的枚举内容略有不同,3531D如下:

typedef enum hiVO_INTF_SYNC_E
{
    VO_OUTPUT_PAL = 0,
    VO_OUTPUT_NTSC,
    VO_OUTPUT_960H_PAL,              /* ITU-R BT.1302 960 x 576 at 50 Hz (interlaced)*/
    VO_OUTPUT_960H_NTSC,             /* ITU-R BT.1302 960 x 480 at 60 Hz (interlaced)*/
    
    VO_OUTPUT_1080P24,
    VO_OUTPUT_1080P25,
    VO_OUTPUT_1080P30,
    
    VO_OUTPUT_720P50, 
    VO_OUTPUT_720P60,   
    VO_OUTPUT_1080I50,
    VO_OUTPUT_1080I60,    
    VO_OUTPUT_1080P50,
    VO_OUTPUT_1080P60,            

    VO_OUTPUT_576P50,
    VO_OUTPUT_480P60,

    VO_OUTPUT_640x480_60,            /* VESA 640 x 480 at 60 Hz (non-interlaced) CVT */
    VO_OUTPUT_800x600_60,            /* VESA 800 x 600 at 60 Hz (non-interlaced) */
    VO_OUTPUT_1024x768_60,           /* VESA 1024 x 768 at 60 Hz (non-interlaced) */
    VO_OUTPUT_1280x1024_60,          /* VESA 1280 x 1024 at 60 Hz (non-interlaced) */
    VO_OUTPUT_1366x768_60,           /* VESA 1366 x 768 at 60 Hz (non-interlaced) */
    VO_OUTPUT_1440x900_60,           /* VESA 1440 x 900 at 60 Hz (non-interlaced) CVT Compliant */
    VO_OUTPUT_1280x800_60,           /* 1280*800@60Hz VGA@60Hz*/    
    VO_OUTPUT_1680x1050_60,          /* VESA 1680 x 1050 at 60 Hz (non-interlaced) */
    VO_OUTPUT_1920x2160_30,          /* 1920x2160_30 */
    VO_OUTPUT_1600x1200_60,          /* VESA 1600 x 1200 at 60 Hz (non-interlaced) */
    VO_OUTPUT_1920x1200_60,          /* VESA 1920 x 1600 at 60 Hz (non-interlaced) CVT (Reduced Blanking)*/ 
    VO_OUTPUT_2560x1440_30,          /* 2560x1440_30 */
    VO_OUTPUT_2560x1440_60,          /* 2560x1440_60 */
    VO_OUTPUT_2560x1600_60,          /* 2560x1600_60 */
    VO_OUTPUT_3840x2160_25,          /* 3840x2160_25 */
    VO_OUTPUT_3840x2160_30,          /* 3840x2160_30 */
    VO_OUTPUT_3840x2160_50,          /* 3840x2160_50 */
    VO_OUTPUT_3840x2160_60,          /* 3840x2160_60 */
    VO_OUTPUT_USER,
    VO_OUTPUT_BUTT

} VO_INTF_SYNC_E;
  • 模块方法

QVariant getReport()

  • 方法功能:返回驱动状态。
  • 返回值:Map类型,包含avalible:bool、width:int、height:int、framerate:int、interlace:bool。
  • 注意事项:仅当interface参数被定义时有效。

LinkInputNet

LinkInputNet模块可以接收大多数流媒体输入源的数据,并分理处音视频数据供后端模块使用。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✖️ - -
Audio Out ✔️ PCMA/PCMU/G722/AAC/MP2 ✔️
Video Out ✔️ H264/H265 ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
path String - 网络流地址 ✔️
protocol String “tcp” 当path为rtsp流时,用于指定使用udp或tcp接收rtp数据 ✖️
timeout int 5 超时时间,单位秒 ✔️
timestampMode String “auto” 时间戳修正模式:auto-自动校准;local-本地时间;source-源端时间; ✔️
state String - 只读,获取模块状态 ✔️
buffer Bool true 是否启用缓冲来抵消网络抖动 ✔️
sync Bool false 是否同步时间戳,保持码流数据匀速输出 ✔️

目前测试了http、rtsp、rtmp、udp协议。

  • 模块方法

暂无

LinkInputRtsp

LinkInputRtsp模块用于接收,rtsp协议的数据流,相比InputNet,占用系统性能更少。
如果遇到兼容性问题,建议使用InputNet。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✖️ - -
Audio Out ✔️ PCMA/PCMU/G722/AAC/MP2 ✔️
Video Out ✔️ H264/H265 ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
path String - 网络流地址 ✔️
protocol String “tcp” 用于指定使用udp或tcp接收rtp数据 ✖️
timeout int 10 超时时间,单位秒 ✔️
  • 模块方法

暂无

LinkInputFile

LinkInputFile可以将本地文件进行流式输出,兼容主流媒体格式。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✖️ - -
Audio Out ✔️ PCMA/PCMU/G722/AAC/MP2 ✔️
Video Out ✔️ H264/H265 ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
path String - 文件路径 ✔️
sync Bool true 是否按时间戳同步播放 ✔️
  • 模块方法

QVariant seek(QVariant time);

  • 方法功能:跳转到指定时间。
  • time值:Int类型,时间,单位ms。
  • 返回值:Bool类型。

QVariant getDuration(QVariant path);

  • 方法功能:获取文件的总时长。
  • path值:String类型,文件路径。
  • 返回值:Int类型,单位ms。

QVariant getPosition();

  • 方法功能:获取当前播放进度。
  • 返回值:Int类型,单位ms。

模块事件

EOF

  • 触发条件:文件播放完毕。
  • 携带消息:无。

LinkInputImage

LinkInputImage可以将图片作为一路输入使用,目前只支持不大于1080P分辨率的jpg格式

内部会以每秒1帧的速度输出,通常可配合MixV模块作为背景、片头片尾等功能场景使用。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✖️ - -
Audio Out ✖️ - -
Video Out ✔️ VPSS ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
path String - 文件路径 ✔️
width Int 1920 最大解码宽度 ✔️
height Int 1080 最大解码高度 ✔️
framerate Int 1 输出图像帧率 ✔️
  • 模块方法

LinkInputV4l2

webcam采集模块,使用v4l2驱动。

不同型号的摄像头mjpeg格式略有不同,海思的硬件解码模块不能完全支持。

稍后会进行兼容性测试,给出可用型号列表供大家参考。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✖️ - -
Audio Out ✖️ - -
Video Out ✔️ MJPEG ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
path String “/dev/video0” 设备地址 ✖️
format String “mjpeg” 采集格式,目前支持mjpeg、yuv、h264 ✖️
framerate Int 30 采集帧率 ✖️
width Int 1920 图像宽度 ✖️
height Int 1080 图像高度 ✖️
v4l2BufLen Int 4 缓冲长度 ✖️

framerate仅为设定帧率,实际上由于摄像头性能问题,往往无法达到。

  • 模块方法

暂无

LinkDevice

该模块用于和单片机交互,可以获取温度、电源控制等。

  • 数据接口

  • 模块参数

  • 模块方法

QVariant getTemperature()

  • 方法功能:返回核心温度。
  • 返回值:Int类型,摄氏度。
  • 注意事项:该模块虽然没有数据接口,但是依然需要在start后才能调用invoke。

QVariant poweroff()

  • 方法功能:关闭电源。
  • 返回值:Bool类型。

QVariant setBootMode(QVariant mode)

  • 方法功能:设置上电启动方式。
  • mode:String类型,上电启动方式,boot:上电直接启动,standby:上电待机。
  • 返回值:Bool类型。

模块事件

keyPress

  • 触发条件:按键长按。
  • 携带消息:按键名称,目前只有power键。

LinkGPIO

LinkGPIO用于管理GPIO的事件,读取、设定GPIO的状态。

  • 数据接口

  • 模块参数

参数 类型 默认值 说明 热更新
config String “/link/config/gpio.json” 配置文件路径 ✔️
  • 模块方法

QVariant registEvent(QVariant info);

  • 方法功能:注册GPIO事件。
  • info值:String类型,GPIO名。
  • 返回值:Bool类型。

QVariant setGPIO(QVariant info);

  • 方法功能:设置GPIO端口状态。
  • info值:List类型,[QSring:GPIO名, Bool:设定值(true:拉高, false:拉低)]。
  • 返回值:Bool类型。

QVariant getGPIO(QVariant info);

  • 方法功能:获取GPIO端口状态。
  • info值:String类型,GPIO名。
  • 返回值:Bool类型,true:拉高, false:拉低。

  • 模块事件

up

  • 触发条件:GPIO按键弹起。
  • 携带消息:无。

down

  • 触发条件:GPIO按键按下。
  • 携带消息:无。

click

  • 触发条件:GPIO按键单击。
  • 携带消息:无。

LinkInputAlsa

LinkInputAlsa模块实现了支持alsa接口的音频设备采集功能。

通常作为音频数据流的源端。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✖️ - -
Audio Out ✔️ Raw ✔️
Video Out ✖️ - -
  • 模块参数

参数 类型 默认值 说明 热更新
path String - 设备地址,如"hw:0,0" ✖️
samplerate Int 48000 采样率 ✔️
channels Int 1 采集声道数 ✔️
  • 模块方法

暂无

LinkInputIsp

LinkInputIsp用于获取sensor图像,测试中

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✖️ - -
Audio Out ✖️ - -
Video Out ✔️ VPSS ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
width Int 1920 图像宽度 ✔️
height Int 1080 图像高度 ✔️
  • 模块方法

QVariant sharpen(QVariant enable)

  • 方法功能:返回驱动状态。
  • enable:Bool类型,是否开启锐化,默认开启
  • 返回值:Bool类型,true,false

QVariant ircut(QVariant open)

  • 方法功能:返回驱动状态。
  • open:Bool类型,是否开启红外模式
  • 返回值:Bool类型,true,false

编解码

LinkDecodeA

音频解码模块,支持aac、mpeg2、pcma、pcmu、g722解码。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✔️ PCMA/PCMU/G722/AAC/MP2 ✖️
Video In ✖️ - -
Audio Out ✔️ Raw ✔️
Video Out ✖️ - -
  • 模块参数

无,模块根据上游数据自动判断工作参数。

  • 模块方法

暂无

LinkEncodeA

音频编码模块,支持aac、mpeg2、pcma、pcmu、g722编码。

模块内部会处理音频重采样,但是消耗性能,建议在LinkInputAi模块先做好resample。

音频编码算法工作在cpu上,LinkSDK的AAC编码经过特殊优化,cpu占用很低。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✔️ Raw ✖️
Video In ✖️ - -
Audio Out ✔️ PCMA/PCMU/G722/AAC/MP2 ✔️
Video Out ✖️ - -
  • 模块参数

参数 类型 默认值 说明 热更新
codec String “aac” 编码格式,pcma/pcmu/g722/aac/mp2 ✖️
samplerate Int 48000 编码采样率 ✔️
channels Int 2 编码声道 ✔️
bitrate Int 128000 码率,单位bps ✔️
  • 模块方法

暂无

LinkEncodeV

视频编码模块,根据芯片的不同,可支持h264、h265、jpeg编码。

模块内部会处理图像缩放。

编码算法工作在芯片中的VEDU单元,不占用cpu资源,但是不同芯片所支持的最大编码能力不同,请参考海思官方产品手册。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✔️ VPSS ✖️
Audio Out ✖️ - -
Video Out ✔️ H264/H265/JPEG ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
codec String “h264” 编码格式,h264/h265/jpeg ✖️
profile String “high” 编码profile ✔️
width Int -1 图像宽度 ✔️
height Int -1 图像高度 ✔️
bitrate Int 1024 码率,单位kbps ✔️
framerate Int 30 帧率 ✔️
gop Double 2.0 关键帧间隔,单位秒 ✔️
gopmode Int 0 多参考帧模式:0-关闭;1-智能参考帧;2-双参考帧。 ✔️
rcmode String “cbr” 码率控制算法,cbr/vbr/avbr/fixqp ✔️
snap Bool true jpeg截图编码模式 ✖️
minqp Int 22 编码质量,仅vbr有效 ✔️
maxqp Int 36 编码质量,仅vbr有效 ✔️
Iqp Int 0 I帧编码质量,仅fixqp有效 ✔️
Pqp Int 0 P帧编码质量,仅fixqp有效 ✔️
Bqp Int 0 B帧编码质量,仅fixqp有效 ✔️
roi List 0 感兴趣编码区域设置,数据结构在下文描述 ✔️

snaptrue时,需调用snap方法获取单针jpeg数据,若为false,则连续编码输出。

roi的数据结构如下:
ps:为了便于阅读,在json中加入了注释,实际开发中不要尝试在json中加入注释,很多解析器并不支持。

"roi": [
        {
          "enable": false, //启动或关闭该区域
          "abs": false, //使用qp绝对值设定模式
          "qp": -15, //当abs=true时,取值范围[-51,51];当abs=false时,取值范围[0,51];
          "framerate": -1,//背景帧率,可以设定一个低于当前帧率的数值,用于降低非roi区域的刷新率,-1表示不修改。
          "x": 0.3,
          "y": 0.3,
          "w": 0.3,
          "h": 0.3
        }
      ]
  • 模块方法

QVariant snapSync(QVariant path)

  • 方法功能:截图,保存jpeg文件到path,阻塞一段时间来确保获取到截图,适用于单次调用,要求必须立刻返回结果的场景。
  • path:String类型,保存路径。
  • 返回值:Bool类型。
  • 注意事项:仅当codec等于"jpeg"且snap等于true时有效。

QVariant snap(QVariant path)

  • 方法功能:截图,保存jpeg文件到path,非阻塞操作,可能会返回false,等待一段时间再次调用既可以返回true,适用于频繁调用又不追求实时性的场景。
  • path:String类型,保存路径。
  • 返回值:Bool类型。
  • 注意事项:仅当codec等于"jpeg"且snap等于true时有效。

QVariant reset()

  • 方法功能:重置编码器。
  • 返回值:Bool类型。

QVariant idr()

  • 方法功能:临时请求关键帧。
  • 返回值:Bool类型。

QVariant fullRange(QVariant full)

  • 方法功能:设定vui信息中的video_full_range_flag参数。
  • full:Bool类型。
  • 返回值:Bool类型。

LinkDecodeV

视频解码模块,运行在VDH模块,不占用cpu。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✔️ H264/H265/JPEG ✖️
Audio Out ✖️ - -
Video Out ✔️ VPSS ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
width Int 1920 解码最大分辨率 ✖️
height Int 1080 解码最大分辨率 ✖️
block Bool false 是否开启阻塞模式,快速文件转码时有用,可用于阻塞上游InputFile模块 ✖️
lowLatency Bool false 开启后会减少一点解码延迟,但是会影响B帧解码 ✖️
  • 模块方法

暂无

流处理

LinkMux

码流封装模块,理论上可支持ffmpeg能支持的全部格式。

对于网络输出,当连接意外中断时,模块会自动重连。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✔️ PCMA/PCMU/G722/AAC/MP2 ✖️
Video In ✔️ H264/H265 ✖️
Audio Out ✔️ RTSP ✔️
Video Out ✔️ MPEGTS/RTSP ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
path String - 码流输出地址 ✔️
format String - 封装格式 ✔️
mute Bool false 是否静音,即不接收音频数据 ✔️
noVideo Bool false 是否不包含视频,即不接收视频数据 ✔️
state String - 只读,获取模块状态 ✔️
hevc_id int 12 用于设定rtmp输出时,h265数据使用的id号 ✖️
tsSize int 1316 ts分包大小,不建议修改 ✔️
hls_time int 5 HLS分片长度,单位秒 ✔️
hls_list_size int 5 HLS列表长度,单位片 ✔️
hls_base_url String “/hls/” HLS路径前缀 ✔️
hls_filename String “-%06d.ts” HLS文件名格式 ✔️
hls_flags String “delete_segments” 同ffmpeg ✔️
segmentDuration Int 0 文件分段时长,单位ms ✔️
segmentSize Int 0 文件分段大小,单位byte ✔️

format 通常情况下无需设置,模块会根据 path 自动选择合适的封装格式,个别无法推测的 path,比如"http://"、"mem://"等,才需要手动设定该参数。

path 可取值"mem://xxx"并linkV到LinkTSHttp或LinkRtsp模块,会在后者创建名为"xxx"的频道,同时format需要设定为mpegts。

path为本地文件路径时,请确保模块完成stop操作之后再访问文件。

若无需封装音频数据,一定要将mute设置为true,否则模块会一直等待音频数据,不做任何输出。

segmentDurationsegmentSize只需要设定其中一个即可,segmentDuration最好为编码Gop的整数倍。使用分段功能时,path可已设置为如"/root/video%d.mp4"的形式。

  • 模块方法

QVariant pause()

  • 方法功能:暂停。
  • 返回值:Bool类型。

QVariant resume()

  • 方法功能:恢复。
  • 返回值:Bool类型。

QVariantMap getSpeed()

  • 方法功能:获取距离上一次调用该接口这段时间内的传输速率。
  • 返回值:{speed:总速率,speedA:音频流速率,speedV:视频流速率}

QVariant segment(QVariant path)

  • 方法功能:开始一个新的文件分段。
  • path:文件路径。
  • 返回值:Bool类型。

LinkRtsp

RTSP server 模块,支持udp、rtp over tcp。

模块仅接受Mux组件在path=“mem://xxx”时的数据,其中xxx即为新建频道的名称。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✔️ RTSP ✔️
Video In ✔️ MPEGTS/RTSP ✔️
Audio Out ✖️ - -
Video Out ✖️ - -
  • 模块参数

参数 类型 默认值 说明 热更新
port Int 554 模块工作端口 ✖️
  • 模块方法

暂无

LinkTSHttp

Http mpegts server 模块,仅支持ts格式。

模块仅接受Mux组件在path=“mem://xxx”时的数据,其中xxx即为新建频道的名称。

模块提供快速缓冲功能。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✔️ MPEGTS ✔️
Audio Out ✖️ - -
Video Out ✖️ - -
  • 模块参数

参数 类型 默认值 说明 热更新
port Int 8090 模块工作端口 ✖️
TSBuffer Int 1000 快速缓冲包数 ✖️
  • 模块方法

暂无

LinkTSUdp

将mpegts格式的数据通过udp发送到指定的ip和端口,可用于ts流单播、组播、广播。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✔️ MPEGTS ✖️
Audio Out ✖️ - -
Video Out ✖️ - -
  • 模块参数

参数 类型 默认值 说明 热更新
localPort Int 0 udp本地端口 ✖️
ip String 0 目标IP ✔️
port Int 1234 目标端口 ✔️
ttl Int 5 ttl ✔️
flowCtrl bool false 是否启用流控,可以让码流发送更均匀,防止丢包,但是消耗一些性能 ✔️
bandwidth Int 100 流控最大带宽,单位Mb ✔️
  • 模块方法

暂无

音视频处理

LinkAdjustV

图像调节模块,使用硬件算法,不占用cpu。

该模块目前仅在HI3516X、HI3519芯片上有效

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✔️ VPSS ✖️
Audio Out ✖️ - -
Video Out ✔️ VPSS ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
enable Bool false 调节总开关 ✔️
sbs Int 170 亮区降噪[0,255] ✔️
sds Int 100 暗区降噪[0,255] ✔️
sp Int 128 锐化[0,255] ✔️
luma Int 50 亮度[0,100] ✔️
contr Int 50 对比度[0,100] ✔️
satu Int 50 饱和度[0,100] ✔️
hue Int 50 色温[0,100] ✔️
  • 模块方法

暂无

LinkAEC

回声消除模块,利用cpu运算,3531D上占用13%的cpu性能。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✔️ Raw ✔️
Video In ✖️ - -
Audio Out ✖️ Raw ✔️
Video Out ✖️ - -
  • 模块参数

参数 类型 默认值 说明 热更新
far String - 远端音频实例名(发送给扬声器的音频数据) ✔️
near String - 近端音频实例名(麦克风收到的音频数据) ✔️
level Int 1 消除力度[1,3] ✔️
delay Int 100 远近端延迟初始值,单位ms ✔️
outSamplerate Int 48000 模块输出的采样率 ✔️
outChannels Int 2 模块输出的声道数 ✔️
outNum Int 2048 模块输出的采样长度 ✔️

实例名通过LinkObject::name()获得。

  • 模块方法

暂无

LinkAecDelay

回声消除的延迟检测模块,用于判断输出到输入之间的链路延时,用于设定LinkAEC模块的delay参数

将该模块至于ai与ao中间,调用detect方法即可获取延时,测量多次取平均值会更加准确。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✔️ Raw ✔️
Video In ✖️ - -
Audio Out ✔️ Raw ✔️
Video Out ✖️ - -
  • 模块参数


模块方法

QVariant detect()

  • 方法功能:发出一段蜂鸣声,并检测声音回到音频输入口的延迟,需要保障音频输出设备有效,且音量调节到足够大。
  • 返回值:Int类型,延时,单位ms

LinkAVS

视频拼接模块,针对海思3559/3519等方案定制,暂时仅实现水平或垂直拼接,融合拼接会在后续更新。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✔️ VPSS ✔️
Audio Out ✖️ - -
Video Out ✔️ VPSS ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
mode String “LR” 拼接模式:“LR”-左右拼接;“UP”-上下拼接。 ✔️
width Int 3840 输出图像宽度 ✔️
height Int 2160 输出图像高度 ✔️
  • 模块方法

暂无

LinkBeautify

美颜模块,使用硬件算法,不占用cpu。

由于不同芯片的能力不同,效果也略有不同。

该模块目前仅在HI3531A、HI3531D芯片上有效

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✔️ VPSS ✖️
Audio Out ✖️ - -
Video Out ✔️ VPSS ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
level Int 3 美颜级别[0,4] ✔️
  • 模块方法

暂无

LinkBlend

视频透明叠加模块

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✔️ VPSS ✔️
Audio Out ✖️ - -
Video Out ✔️ VPSS ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
src List - LinkObject实例名列表,用于输入源排序 ✔️
alpha double 0 前景叠加透明度 ✔️
srcX double 0 前景图裁剪X坐标[0,1] ✔️
srcY double 0 前景图裁剪Y坐标[0,1] ✔️
srcW double 1 前景图裁剪宽度[0,1] ✔️
srcH double 1 前景图裁剪高度[0,1] ✔️
dstX double 0 背景叠加X坐标[0,1] ✔️
dstY double 0 背景叠加X坐标[0,1] ✔️
  • 模块方法

暂无

LinkColorKey

抠像模块,效果基本可用,不断优化中。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✔️ VPSS ✔️
Audio Out ✖️ - -
Video Out ✔️ VPSS ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
keyPosX double 0.5 关键色位置X坐标[0,1] ✔️
keyPosY double 0.1 关键色位置Y坐标[0,1] ✔️
alpha double 1 前景透明度[0,1] ✔️
  • 模块方法

暂无

LinkCrop

视频裁剪模块。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✔️ VPSS ✖️
Audio Out ✖️ - -
Video Out ✔️ VPSS ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
x double 0 裁剪起始X坐标[0,1] ✔️
y double 0 裁剪起始Y坐标[0,1] ✔️
width double 1 裁剪宽度[0,1] ✔️
height double 1 裁剪高度[0,1] ✔️
  • 模块方法

暂无

LinkDeinterlace

全帧率去隔行模块,海思内置的去隔行功能只能做到半帧率,如1080i60输入,去隔行之后变为1080P30。
而该模块可以做到1080i60输入,1080p60输出,不损失任何动态信息,但是会消耗一定性能。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✔️ VPSS ✔️
Audio Out ✖️ - -
Video Out ✔️ VPSS ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
  • 模块方法

暂无

LinkGain

音频增益调节模块,可以放大或减小音量,数字变换,可能导致爆音或失真。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✔️ Raw ✖️
Video In ✖️ - -
Audio Out ✔️ Raw ✔️
Video Out ✖️ - -
  • 模块参数

参数 类型 默认值 说明 热更新
gain Int 0 增益,单位dB,6的整数倍有效,可正可负 ✔️
  • 模块方法

暂无

LinkMixA

混音模块,支持任意路混音。

模块内部不支持重采样,请确保输入的音频采样率和采样长度一致,不然可能会出现异常。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✔️ Raw ✔️
Video In ✖️ - -
Audio Out ✔️ Raw ✔️
Video Out ✖️ - -
  • 模块参数

参数 类型 默认值 说明 热更新
main String - 主音频实例名 ✔️
bufLen Int 3 音频缓冲长度 ✔️

实例名通过LinkObject::name()获得。

  • 模块方法

暂无

LinkMixV

该模块提供视频混合功能。

它提供灵活的数据输入和方法,动态更新画面布局。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✔️ VPSS ✔️
Audio Out ✖️ - -
Video Out ✔️ VPSS ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
width Int 1920 图像宽度 ✖️
height Int 1080 图像高度 ✖️
color UInt 0 背景色,RGB24 ✖️
src List - LinkObject实例名列表,用于输入源排序 ✔️
layout List - 布局定义数据,详见下方示例 ✔️

src中的实例名通过LinkObject::name()方法获取。

src中可以包含无效的实例名,用于跳过该顺序的布局位置。

整体的数据结构如下,以json形式举例,可以用Json::decode方法转换。
ps:为了便于阅读,在json中加入了注释,实际开发中不要尝试在json中加入注释,很多解析器并不支持。

{
    "width":1920, //图像宽度
    "height":1080,//图像高度
    "src": [
      "InputVi_1",//输入源实例名
      "InputVi_2"
    ],
    "layout": [
      {
        "x": 0,    //水平坐标[0,1]
        "y": 0,    //垂直坐标[0,1]
        "w": 0.5,  //图像宽度[0,1]
        "h": 0.5,  //图像高度[0,1]
        "a": 1,    //透明度,由于目前海思没有提供高效的透明叠加方法,该值只能取0/1,当取0时,在该次序上的输入源将不会被显示。
        "index": 0 //叠放次序,数值大的在上层,将覆盖下层重合的部分。
      },
      {
        "x": 0.5,  //同上
        "y": 0.5,
        "w": 0.5,
        "h": 0.5,
        "a": 1,
        "index": 1
      }
    ]
}

下面举例说明

在这里插入图片描述

图例A中,src数量超过layout数量,因此InputVi_3没有被显示;
图例B中,第二个layout的a为0,因此InputVi_2没有被显示,而src少于layout数量,所以第三个layout没有内容可以显示。

  • 模块方法

QVariant swap(QVariant list)

  • 方法功能:交换两个实例在布局中的位置。
  • list:List类型,包含两个需要交换位置的实例名称。
  • 返回值:Bool类型。

LinkOverlay

该模块提供视频叠加特效功能,可实现OSD、滚动字幕、水印、马赛克叠加。

支持png32格式带alpha通道的水印格式。

可以任意指定字体文件。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✔️ VPSS ✖️
Audio Out ✖️ - -
Video Out ✔️ VPSS ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
width Int 1920 图像宽度 ✔️
height Int 1080 图像高度 ✔️
lays List - 叠加层数据,详见下方示例 ✔️
pass Bool true 是否直通 ✖️

通常不需要指定分辨率,模块会根据上游数据自动设置。

不同的芯片支持的叠加层数不同,通常不超过8层。

直通模式下,link上游或overlay模块,得到的都是叠加过特效的图像。非直通模式下,link上游将得到原始图像,但是内部多了一次拷贝,占用更多性能。

lays数据结构如下,以json形式举例,可以用Json::decode方法转换。
ps:为了便于阅读,在json中加入了注释,实际开发中不要尝试在json中加入注释,很多解析器并不支持。

[
      {
        "type": "text", //叠加类型为文本
        "enable": true, //显示该叠加层
        "font": "/link/res/font.ttf", //字体文件路径
        "content": "哈哈呵呵哈哈~~~~呵呵哈哈呵呵~~~~哈哈呵呵", //文字内容,最多支持250个字
        "x": 0.1, //叠加层坐标[0,1],相对于整个图像
        "y": 0.136, //同上
        "scale": 2.2, //文字相对大小,不同的字体表现不同,[0.1,4]
        "color": "#669900", //文字颜色,RGB
        "bgColor": "", //文字颜色,RGBA,留空表示透明
        "alpha": 1, //叠加层透明度
        "move": -1, //负数向左滚动,正数向右滚动,数值越大速度越快
        "w": 0.515 //叠加层宽度,主要用于限制滚动范围。
      },
      {
        "type": "time", //叠加类型为时间戳
        "enable": true, //显示该叠加层
        "font": "/link/res/font.ttf", //字体文件路径
        "content": "yyyy年MM月dd日 hh:mm:ss", //时间格式
        "x": 0.1, //叠加层坐标[0,1],相对于整个图像
        "y": 0.136, //同上
        "scale": 2.2, //文字相对大小,不同的字体表现不同,[0.1,4]
        "color": "#669900", //文字颜色,RGB
        "bgColor": "", //文字颜色,RGBA,留空表示透明
        "alpha": 1 //叠加层透明度
      },
      {
        "type": "pic", //叠加类型为图像
        "enable": true, //显示该叠加层
        "content": "/link/res/logo.png", //图片路径
        "x": 0.1, //叠加层坐标[0,1],相对于整个图像
        "y": 0.1, //同上
        "scale": 1, //图片等比缩放倍数,[0.1,4]
        "alpha": 1 //叠加层透明度
        //图片也可以增加w、h属性,会导致图片强制拉伸,可能产生比例变化
      },
      {
        "type": "mask", //叠加类型为马赛克
        "enable": true, //显示该叠加层
        "content": "16", //马赛克粒度,8/16/32/64
        "x": 0.4, //叠加层坐标[0,1],相对于整个图像
        "y": 0.4, //同上
        "w": 0.2, //同上
        "h": 0.2 //同上
      }
    ]
  • 模块方法

暂无

LinkResample

音频重采样模块。

该模块通过cpu运算实现,因此尽可能使用Ai模块的硬件重采样,减少本模块的使用。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✔️ Raw ✖️
Video In ✖️ - -
Audio Out ✖️ Raw ✔️
Video Out ✖️ - -
  • 模块参数

参数 类型 默认值 说明 热更新
samplerate Int 48000 重采样频率 ✖️
channels Int 2 重采样声道数 ✖️
  • 模块方法

暂无

LinkSAVS

视频拼接模块,调用IVE能力进行拼接运算,
在3559A中可以做水平拼接,用于4K60图像的双路mipi拼接
在3531D中可以做田字格拼接,可用于4x3GSDI的拼接

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✔️ VPSS ✔️
Audio Out ✖️ - -
Video Out ✔️ VPSS ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
mode String “LR” 拼接模式:“LR”-左右拼接;“UP”-上下拼接。 ✔️
width Int 3840 输出图像宽度 ✔️
height Int 2160 输出图像高度 ✔️
  • 模块方法

暂无

LinkVad

语音检测模块,当参考音量大于设定值,输出的音量将被抑制。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✔️ Raw ✖️
Video In ✖️ - -
Audio Out ✔️ Raw ✔️
Video Out ✖️ - -
  • 模块参数

参数 类型 默认值 说明 热更新
volume String - LinkVolume模块实例名 ✖️
th Int 40 检测阈值,单位db ✔️
level Int 4 抑制级别,[0~4] ✔️
duration Int 10 平滑区间,表示采样次数 ✔️
enable Bool false 模块使能 ✔️
active Bool false 检测激活,只读 ✔️

level等于4时,输出完全静音,等于0时,不做处理。
volume的音量大于th时,active等于true

  • 模块方法

暂无

LinkVolume

音量统计模块。

该模块仅用于计算音量,并不对音量进行改变。

音量结果通过getData()方法获取,该模块没有数据输出。

  • 数据接口

接口 有效 类型 多重连接
Audio In ✔️ Raw ✔️
Video In ✖️ - -
Audio Out ✖️ - -
Video Out ✖️ - -
  • 模块参数

参数 类型 默认值 说明 热更新
avg int - 采样平均音量,单位db,只读[0,96] ✖️
max Int - 采样最大音量,单位db,只读[0,96] ✖️
gain Int 0 音量增益,仅用于改变统计结果 ✔️
mute Bool false 静音 ✔️

gain参数仅改变统计结果,不影响实际的音频音量。可以是负数,但是结果最小值为0。

mutetrue时,模块不进行统计计算,avgmax均返回0。

  • 模块方法

QVariantMap getVolume()

  • 方法功能:获取音量统计信息。
  • 返回值:{avg:左声道平均音量,max:左声道最大音量,avg2:右声道平均音量,max2:右声道最大音量}

智能视觉

LinkFaceDetect

利用NNIE性能,使用SSD网络模型,进行人脸检测定位
仅在支持NNIE的芯片上可用,目前支持3519A与3559A

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✔️ VPSS ✔️
Audio Out ✖️ - -
Video Out ✔️ VPSS ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
framerate Int 10 帧率,继承自LinkFrame ✔️
th double 0.8 检测判定阈值 ✔️
model string “/link/model/ssd_inst.wk” 模型路径 ✔️

  • 模块事件

face

  • 触发条件:每一帧计算完成时。
  • 携带消息:List,[{x:double,y:double,w:double,h:double}],坐标范围[0,1]

LinkFaceRecognition

利用NNIE性能,使用SSD网络模型,进行人脸匹配,可接收FaceDetect的事件
仅在支持NNIE的芯片上可用,目前支持3519A与3559A

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✔️ VPSS ✔️
Audio Out ✖️ - -
Video Out ✔️ VPSS ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
framerate Int 10 帧率,继承自LinkFrame ✔️
th double 0.97 检测判定阈值 ✔️
model string “/link/model/lcnn_inst.wk” 模型路径 ✔️
database string “/link/facedb” 人脸库目录 ✔️
  • 模块方法

QVariant addFace(QVariant name)

  • 方法功能:保存当前特征值到人脸库下。
  • name:String类型,保存文件名。
  • 返回值:Bool类型。

模块事件
face

  • 触发条件:每一帧计算完成时。
  • 携带消息:List,[{x:double,y:double,w:double,h:double,name:string}],坐标范围[0,1],name对应人脸库目录下的文件名

LinkFrame

该模块是大多数机器视觉算法模块的基础,提供了头文件(LinkFrame.h),可以搭配LinkIVE作为基类进行二次开发。
具体可参考LinkSVP

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✔️ VPSS ✖️
Audio Out ✖️ - -
Video Out ✔️ VPSS ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
width Int 1920 图像宽度 ✔️
height Int 1080 图像高度 ✔️
framerate Int -1 帧率,-1表示不控制帧率 ✔️
delay Int 0 延迟帧数 ✔️
  • 模块方法

暂无

LinkIVE

该模块封装了部分海思IVE系统中常用方法,可以搭配LinkFrame作为基类进行二次开发。
具体可参考LinkSVP

  • 模块方法

    void wait();
    static VIDEO_FRAME_INFO_S makeFrame(int width, int height);
    bool copy(IVEMem &src, IVEMem &dst,QRect rect=QRect(0,0,0,0));
    bool copySmall(IVEMem &src, IVEMem &dst);
    bool erode(IVEMem &src, IVEMem &dst, int size);
    bool dilate(IVEMem &src, IVEMem &dst, int size);
    bool thresh(IVEMem &src, IVEMem &dst, int low, int high=-1,int val=255);
    bool integ(IVEMem &src, IVEMem &dst);
    quint32 integRect(IVEMem &mem, QRect rect);
    bool sobel(IVEMem &src, IVEMem &dst, char *mask=NULL, int norm=1);
    bool filter(IVEMem &src, IVEMem &dst, char *mask=NULL, int norm=0);
    bool resize(IVEMem &src, IVEMem &dst);
    bool Sub(IVEMem &src1, IVEMem &src2, IVEMem &dst);
    bool And(IVEMem &src1, IVEMem &src2, IVEMem &dst);
    bool Or(IVEMem &src1, IVEMem &src2, IVEMem &dst);
    bool Add(IVEMem &src1, IVEMem &src2, IVEMem &dst, double a, double b);
    QVariantList CCL(IVEMem &src, int area);

LinkPedestrianDetect

利用NNIE性能,使用SSD网络模型,进行行人检测定位
仅在支持NNIE的芯片上可用,目前支持3519A与3559A

  • 数据接口

接口 有效 类型 多重连接
Audio In ✖️ - -
Video In ✔️ VPSS ✔️
Audio Out ✖️ - -
Video Out ✔️ VPSS ✔️
  • 模块参数

参数 类型 默认值 说明 热更新
framerate Int 10 帧率,继承自LinkFrame ✔️
th double 0.4 检测判定阈值 ✔️
model string “/link/model/pedestrian_inst.wk” 模型路径 ✔️

模块事件

pedestrian

  • 触发条件:每一帧计算完成时。
  • 携带消息:List,[{x:double,y:double,w:double,h:double}],坐标范围[0,1]

猜你喜欢

转载自blog.csdn.net/weixin_45326556/article/details/100576135