靈派海思SDK的API參考手冊

本手冊鏡像地址: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]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章