本手册镜像地址:https://gitee.com/LinkPi/LinkLib/wikis/pages
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内部包含线程池管理功能,能够按照功能与协作关系自动分配模块的运行线程。
本节内容
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)
true
;失败-false
。start
之前调用。大部分模块支持热更新,因此也可以在start
之后随时通过该接口更新模块参数。接口内部会自动比对输入值与当前值,重复无变化的输入参数不会引起模块的更新操作。模块的大部分参数拥有默认值,可以不设定。const QVariantMap getData()
start
之后调用。bool start()
true
;失败-false
。true
并不代表模块内部工作正常,模块内部的状态可以通过invoke
或getData
查询。bool start(QVariantMap data)
true
;失败-false
。setData
,后start
。bool stop(bool block=false)
true
;失败-false
。void destroy()
delete
来释放LinkObject
对象。QString name()
Link::create
方法时由系统分配或由用户指定。LinkObject* linkA(LinkObject* dst)
this
流向dst。linkA
、linkV
接口与start
接口并无先后要求,习惯上start
在先,但是例如Mux模块,当用于录制文件时,start
通常在link
之后被调用。LinkObject* linkV(LinkObject* dst)
this
流向dst。LinkA
。LinkObject* linkE(LinkObject* dst)
this
流向dst。LinkA
。LinkObject* unLinkA(LinkObject* dst)
this
流向dst。LinkObject* unLinkV(LinkObject* dst)
this
流向dst。LinkObject* unLinkV(LinkObject* dst)
this
流向dst。QVariant invoke(QString func, QVariant value=QVariant())
start
之后调用。
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)
true
;失败-false
。false
,否则mpp系统会重置,导致先启动的进程异常。LinkObject* create(QString className, QString name="")
NULL
。Link::create("EncodeV")
即可。LinkObject* find(QString name)
NULL
。bool setConfig(QString path)
true
;失败-false
。init
函数时,系统会读取默认板卡配置文件,保存在相应的文件系统中。QVariantMap getConfig()
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格式的字符串。QVariant decode(const QString &jsonStr)
Qvariant
对象。QVariant loadFile(QString path)
Qvariant
对象。bool saveFile(QVariant data, QString path)
true
;失败-false
。
首先建议您使用LinkPi官方提供的虚拟机环境进行开发,参考虚拟机使用说明。
新建一个Qt工程,选择相应版本的Kit,以3531A为例,交叉工具链为v300,因此选择Qt Kit H3。
chip = HI3531A
include(/home/zc/LinkLib/Link.pri)
其中chip
为您的开发平台核心板上的型号
在【概述】的示例代码中,我们实现了基本的视频编码,在这里我们将功能升级为音视频同时采集并编码,最终推流,达到一个直播的效果,代码如下:
#include
#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();
}
该示例主要分以下几个步骤:
Link::init();
LinkObject *vi=Link::create("InputVi");
QVariantMap dataVi;
dataVi["interface"]="HDMI-A";
vi->start(dataVi);
当然也可以拆分成两步来写,例
QVariantMap dataVi;
dataVi["interface"]="HDMI-A";
vi->setData(dataVi);
vi->start();
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
为携带消息。
当您浏览到后面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模块包含了音频采集、重采样、噪声抑制、回声消除等功能。
海思平台的音频采集使用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模块。
暂无
音频输出模块。
接口 | 有效 | 类型 | 多重连接 |
---|---|---|---|
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模块包含了图像采集、帧率控制、驱动通信等功能。
海思平台的图像采集使用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()
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()
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模块用于接收,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可以将本地文件进行流式输出,兼容主流媒体格式。
接口 | 有效 | 类型 | 多重连接 |
---|---|---|---|
Audio In | ✖️ | - | - |
Video In | ✖️ | - | - |
Audio Out | ✔️ | PCMA/PCMU/G722/AAC/MP2 | ✔️ |
Video Out | ✔️ | H264/H265 | ✔️ |
参数 | 类型 | 默认值 | 说明 | 热更新 |
---|---|---|---|---|
path | String | - | 文件路径 | ✔️ |
sync | Bool | true | 是否按时间戳同步播放 | ✔️ |
QVariant seek(QVariant time);
QVariant getDuration(QVariant path);
QVariant getPosition();
模块事件
EOF
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 | 输出图像帧率 | ✔️ |
无
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仅为设定帧率,实际上由于摄像头性能问题,往往无法达到。
暂无
该模块用于和单片机交互,可以获取温度、电源控制等。
无
无
QVariant getTemperature()
QVariant poweroff()
QVariant setBootMode(QVariant mode)
模块事件
keyPress
LinkGPIO用于管理GPIO的事件,读取、设定GPIO的状态。
无
参数 | 类型 | 默认值 | 说明 | 热更新 |
---|---|---|---|---|
config | String | “/link/config/gpio.json” | 配置文件路径 | ✔️ |
QVariant registEvent(QVariant info);
QVariant setGPIO(QVariant info);
QVariant getGPIO(QVariant info);
up
down
click
LinkInputAlsa模块实现了支持alsa接口的音频设备采集功能。
通常作为音频数据流的源端。
接口 | 有效 | 类型 | 多重连接 |
---|---|---|---|
Audio In | ✖️ | - | - |
Video In | ✖️ | - | - |
Audio Out | ✔️ | Raw | ✔️ |
Video Out | ✖️ | - | - |
参数 | 类型 | 默认值 | 说明 | 热更新 |
---|---|---|---|---|
path | String | - | 设备地址,如"hw:0,0" | ✖️ |
samplerate | Int | 48000 | 采样率 | ✔️ |
channels | Int | 1 | 采集声道数 | ✔️ |
暂无
LinkInputIsp用于获取sensor图像,测试中
接口 | 有效 | 类型 | 多重连接 |
---|---|---|---|
Audio In | ✖️ | - | - |
Video In | ✖️ | - | - |
Audio Out | ✖️ | - | - |
Video Out | ✔️ | VPSS | ✔️ |
参数 | 类型 | 默认值 | 说明 | 热更新 |
---|---|---|---|---|
width | Int | 1920 | 图像宽度 | ✔️ |
height | Int | 1080 | 图像高度 | ✔️ |
QVariant sharpen(QVariant enable)
QVariant ircut(QVariant open)
音频解码模块,支持aac、mpeg2、pcma、pcmu、g722解码。
接口 | 有效 | 类型 | 多重连接 |
---|---|---|---|
Audio In | ✔️ | PCMA/PCMU/G722/AAC/MP2 | ✖️ |
Video In | ✖️ | - | - |
Audio Out | ✔️ | Raw | ✔️ |
Video Out | ✖️ | - | - |
无,模块根据上游数据自动判断工作参数。
暂无
音频编码模块,支持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 | ✔️ |
暂无
视频编码模块,根据芯片的不同,可支持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 | 感兴趣编码区域设置,数据结构在下文描述 | ✔️ |
当 snap为
true
时,需调用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)
QVariant snap(QVariant path)
QVariant reset()
QVariant idr()
QVariant fullRange(QVariant full)
video_full_range_flag
参数。视频解码模块,运行在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帧解码 | ✖️ |
暂无
码流封装模块,理论上可支持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,否则模块会一直等待音频数据,不做任何输出。
segmentDuration与segmentSize只需要设定其中一个即可,segmentDuration最好为编码Gop的整数倍。使用分段功能时,path可已设置为如"/root/video%d.mp4"的形式。
QVariant pause()
QVariant resume()
QVariantMap getSpeed()
QVariant segment(QVariant path)
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 | 模块工作端口 | ✖️ |
暂无
Http mpegts server 模块,仅支持ts格式。
模块仅接受Mux组件在path=“mem://xxx”时的数据,其中xxx即为新建频道的名称。
模块提供快速缓冲功能。
接口 | 有效 | 类型 | 多重连接 |
---|---|---|---|
Audio In | ✖️ | - | - |
Video In | ✔️ | MPEGTS | ✔️ |
Audio Out | ✖️ | - | - |
Video Out | ✖️ | - | - |
参数 | 类型 | 默认值 | 说明 | 热更新 |
---|---|---|---|---|
port | Int | 8090 | 模块工作端口 | ✖️ |
TSBuffer | Int | 1000 | 快速缓冲包数 | ✖️ |
暂无
将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 | ✔️ |
暂无
图像调节模块,使用硬件算法,不占用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] | ✔️ |
暂无
回声消除模块,利用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()
获得。
暂无
回声消除的延迟检测模块,用于判断输出到输入之间的链路延时,用于设定LinkAEC模块的delay参数
将该模块至于ai与ao中间,调用detect方法即可获取延时,测量多次取平均值会更加准确。
接口 | 有效 | 类型 | 多重连接 |
---|---|---|---|
Audio In | ✔️ | Raw | ✔️ |
Video In | ✖️ | - | - |
Audio Out | ✔️ | Raw | ✔️ |
Video Out | ✖️ | - | - |
无
模块方法
QVariant detect()
视频拼接模块,针对海思3559/3519等方案定制,暂时仅实现水平或垂直拼接,融合拼接会在后续更新。
接口 | 有效 | 类型 | 多重连接 |
---|---|---|---|
Audio In | ✖️ | - | - |
Video In | ✔️ | VPSS | ✔️ |
Audio Out | ✖️ | - | - |
Video Out | ✔️ | VPSS | ✔️ |
参数 | 类型 | 默认值 | 说明 | 热更新 |
---|---|---|---|---|
mode | String | “LR” | 拼接模式:“LR”-左右拼接;“UP”-上下拼接。 | ✔️ |
width | Int | 3840 | 输出图像宽度 | ✔️ |
height | Int | 2160 | 输出图像高度 | ✔️ |
暂无
美颜模块,使用硬件算法,不占用cpu。
由于不同芯片的能力不同,效果也略有不同。
该模块目前仅在HI3531A、HI3531D芯片上有效
接口 | 有效 | 类型 | 多重连接 |
---|---|---|---|
Audio In | ✖️ | - | - |
Video In | ✔️ | VPSS | ✖️ |
Audio Out | ✖️ | - | - |
Video Out | ✔️ | VPSS | ✔️ |
参数 | 类型 | 默认值 | 说明 | 热更新 |
---|---|---|---|---|
level | Int | 3 | 美颜级别[0,4] | ✔️ |
暂无
视频透明叠加模块
接口 | 有效 | 类型 | 多重连接 |
---|---|---|---|
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] | ✔️ |
暂无
抠像模块,效果基本可用,不断优化中。
接口 | 有效 | 类型 | 多重连接 |
---|---|---|---|
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] | ✔️ |
暂无
视频裁剪模块。
接口 | 有效 | 类型 | 多重连接 |
---|---|---|---|
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] | ✔️ |
暂无
全帧率去隔行模块,海思内置的去隔行功能只能做到半帧率,如1080i60输入,去隔行之后变为1080P30。
而该模块可以做到1080i60输入,1080p60输出,不损失任何动态信息,但是会消耗一定性能。
接口 | 有效 | 类型 | 多重连接 |
---|---|---|---|
Audio In | ✖️ | - | - |
Video In | ✔️ | VPSS | ✔️ |
Audio Out | ✖️ | - | - |
Video Out | ✔️ | VPSS | ✔️ |
参数 | 类型 | 默认值 | 说明 | 热更新 |
---|
暂无
音频增益调节模块,可以放大或减小音量,数字变换,可能导致爆音或失真。
接口 | 有效 | 类型 | 多重连接 |
---|---|---|---|
Audio In | ✔️ | Raw | ✖️ |
Video In | ✖️ | - | - |
Audio Out | ✔️ | Raw | ✔️ |
Video Out | ✖️ | - | - |
参数 | 类型 | 默认值 | 说明 | 热更新 |
---|---|---|---|---|
gain | Int | 0 | 增益,单位dB,6的整数倍有效,可正可负 | ✔️ |
暂无
混音模块,支持任意路混音。
模块内部不支持重采样,请确保输入的音频采样率和采样长度一致,不然可能会出现异常。
接口 | 有效 | 类型 | 多重连接 |
---|---|---|---|
Audio In | ✔️ | Raw | ✔️ |
Video In | ✖️ | - | - |
Audio Out | ✔️ | Raw | ✔️ |
Video Out | ✖️ | - | - |
参数 | 类型 | 默认值 | 说明 | 热更新 |
---|---|---|---|---|
main | String | - | 主音频实例名 | ✔️ |
bufLen | Int | 3 | 音频缓冲长度 | ✔️ |
实例名通过
LinkObject::name()
获得。
暂无
该模块提供视频混合功能。
它提供灵活的数据输入和方法,动态更新画面布局。
接口 | 有效 | 类型 | 多重连接 |
---|---|---|---|
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)
该模块提供视频叠加特效功能,可实现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 //同上
}
]
暂无
音频重采样模块。
该模块通过cpu运算实现,因此尽可能使用Ai模块的硬件重采样,减少本模块的使用。
接口 | 有效 | 类型 | 多重连接 |
---|---|---|---|
Audio In | ✔️ | Raw | ✖️ |
Video In | ✖️ | - | - |
Audio Out | ✖️ | Raw | ✔️ |
Video Out | ✖️ | - | - |
参数 | 类型 | 默认值 | 说明 | 热更新 |
---|---|---|---|---|
samplerate | Int | 48000 | 重采样频率 | ✖️ |
channels | Int | 2 | 重采样声道数 | ✖️ |
暂无
视频拼接模块,调用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 | 输出图像高度 | ✔️ |
暂无
语音检测模块,当参考音量大于设定值,输出的音量将被抑制。
接口 | 有效 | 类型 | 多重连接 |
---|---|---|---|
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
暂无
音量统计模块。
该模块仅用于计算音量,并不对音量进行改变。
音量结果通过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。
当mute为
true
时,模块不进行统计计算,avg和max均返回0。
QVariantMap getVolume()
利用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
利用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)
模块事件
face
该模块是大多数机器视觉算法模块的基础,提供了头文件(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 | 延迟帧数 | ✔️ |
暂无
该模块封装了部分海思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);
利用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