溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Qt??祍dk解碼方法是什么

發(fā)布時間:2021-12-15 10:30:23 來源:億速云 閱讀:195 作者:iii 欄目:互聯(lián)網(wǎng)科技

這篇文章主要介紹“Qt海康sdk解碼方法是什么”,在日常操作中,相信很多人在Qt??祍dk解碼方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Qt??祍dk解碼方法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

一、前言

在視頻監(jiān)控行業(yè)領(lǐng)域,??诞?dāng)之無愧是老大,穩(wěn)坐第一的寶座很多年了,近期需要將視頻監(jiān)控系統(tǒng)改成采用??祍dk的內(nèi)核,于是特意去查閱了sdk的使用手冊,sdk相關(guān)的文檔和文件可以直接官網(wǎng)下載到,而且是經(jīng)常更新的,目前提供了windows和linux上的,win上的sdk還是更新比較快而且完整的,但是在linux上的就不得不吐槽下了,很舊很舊的版本,不要看打包文件很新,其實里面的內(nèi)容是很老的,不知道為啥官方不也同步更新linux上的sdk,也許現(xiàn)在linux上的需求還不是很多吧,但是隨著國產(chǎn)化的大力推進(jìn),估計不久的將來linux上的也會慢慢的完善起來的,說不定官方早就有了此計劃,還有一種個人的猜測是linux上的開發(fā)包估計官方自己內(nèi)部用的新的,可能打算自己做linux上的各種客戶端吧。

官方的sdk手冊做的還是非常詳細(xì)的,而且還給到了VC/JAVA/C#等語言的demo代碼,這點(diǎn)肯定值的表揚(yáng)的,一個產(chǎn)品持續(xù)賣得很好,肯定有他深層次的原因,除了產(chǎn)品本身質(zhì)量過硬以外,周邊的服務(wù)也是必須要跟上的。由于本人習(xí)慣用Qt來做開發(fā),所以直接編譯了VC的demo,一步到位跑起來了,界面相對來說簡單丑陋了點(diǎn),但是要的大部分的功能還是有的,可能很多按鈕也沒擺擺整齊呢,管他呢,我們要的就是功能,演示如何使用對應(yīng)的方法函數(shù)等,至于界面美化這塊,盡量交給專業(yè)的UI妹子吧,沒有UI妹子那就自己搞點(diǎn)qss樣式表弄上去湊合著用吧,界面的美化核心主要就兩點(diǎn):布局+配色。

官方把他們常用的大類設(shè)備的sdk都封裝到一起了,一個頭文件老大了,光HCNetSDK.h這個頭文件都47451行,我的乖乖,估計是為了方便用戶使用,都放到一個頭文件里面了,其實這些sdk不光只是支持?jǐn)z像機(jī),NVR/CVR等設(shè)備也都是支持的,兼容性比價好,用同一個sdk都可以,官方只是對一個大類的都統(tǒng)一起來了,不同大類的硬件產(chǎn)品之間的sdk還是有點(diǎn)區(qū)別出入,比如現(xiàn)在流行的人臉識別、紅外測溫等,那都是新增加的硬件和功能,但是總體接口和使用流程上都大體一致。

解碼處理流程:

  1. 調(diào)用NET_DVR_Init初始化sdk,一個項目中只需要初始化一次。

  2. 調(diào)用NET_DVR_SetConnectTime、NET_DVR_SetReconnect設(shè)置連接時間與重連時間。

  3. 填充NET_DVR_PREVIEWINFO結(jié)構(gòu)體數(shù)據(jù)用來登錄。

  4. 調(diào)用NET_DVR_Login_V30登錄設(shè)備。

  5. 調(diào)用NET_DVR_RealPlay_V40播放視頻。

  6. 調(diào)用NET_DVR_StopRealPlay停止播放。

  7. 調(diào)用NET_DVR_Logout登出設(shè)備。

二、功能特點(diǎn)

  1. 支持播放視頻流和本地MP4文件。

  2. 支持句柄和回調(diào)兩種模式。

  3. 多線程顯示圖像,不卡主界面。

  4. 自動重連網(wǎng)絡(luò)攝像頭。

  5. 可設(shè)置邊框大小即偏移量和邊框顏色。

  6. 可設(shè)置是否繪制OSD標(biāo)簽即標(biāo)簽文本或圖片和標(biāo)簽位置。

  7. 可設(shè)置兩種OSD位置和風(fēng)格。

  8. 可設(shè)置是否保存到文件以及文件名。

  9. 可直接拖曳文件到haikangwidget控件播放。

  10. 支持h364/h365視頻流。

  11. 可暫停播放和繼續(xù)播放。

  12. 支持存儲單個視頻文件和定時存儲視頻文件。

  13. 自定義頂部懸浮條,發(fā)送單擊信號通知,可設(shè)置是否啟用。

  14. 可設(shè)置畫面拉伸填充或者等比例填充。

  15. 可設(shè)置解碼是速度優(yōu)先、質(zhì)量優(yōu)先、均衡處理。

  16. 可對視頻進(jìn)行截圖(原始圖片)和截屏(視頻窗體)。

  17. 錄像文件存儲為MP4文件。

  18. 支持焦距控制、云臺控制。

  19. 可定制功能。

三、效果圖

Qt??祍dk解碼方法是什么

四、核心代碼

bool HaiKangThread::playRtsp()
{
    bool ok = false;
    QString ip, userName, userPwd;
    int port, streamType;
    getInfo(ip, port, streamType, userName, userPwd);

    //登錄設(shè)備
    NET_DVR_DEVICEINFO_V30 deviceInfo;
    long userid = NET_DVR_Login_V30(ip.toUtf8().data(), port, userName.toUtf8().data(), userPwd.toUtf8().data(), &deviceInfo);
    if (userid >= 0) {
        qDebug() << TIMEMS << "登錄??翟O(shè)備成功" << userid << deviceInfo.sSerialNumber;
        //這里還需要拿到視頻流的寬高
        //qDebug() << TIMEMS << url << "videoWidth:" << videoWidth << "videoHeight:" << videoHeight;

        //以下參數(shù)具體見對應(yīng)頭文件說明
        NET_DVR_PREVIEWINFO previewInfo;
        previewInfo.lChannel = 1;
        previewInfo.dwStreamType = streamType;
        previewInfo.dwLinkMode = (transport == "tcp" ? 0 : 1);
        previewInfo.bBlocked = 0;
        previewInfo.byProtoType = 1;
        previewInfo.byPreviewMode = 0;
        previewInfo.dwDisplayBufNum = 15;

        //回調(diào)則可以拿到音視頻數(shù)據(jù),否則就直接句柄播放
        if (callback) {
            hand = NET_DVR_RealPlay_V40(userid, &previewInfo, RealDataCallBack, this);
        } else {
            previewInfo.hPlayWnd = (HWND)playWidget->winId();
            hand = NET_DVR_RealPlay_V40(userid, &previewInfo, NULL, NULL);
        }

        if (hand >= 0) {
            ok = true;
            qDebug() << TIMEMS << "打開視頻數(shù)據(jù)成功" << url << "碼流" << streamType;
        } else {
            qDebug() << TIMEMS << "打開視頻數(shù)據(jù)失敗" << url << NET_DVR_GetLastError();
        }
    } else {
        qDebug() << TIMEMS << "登錄海康設(shè)備失敗" << NET_DVR_GetLastError();
    }

    return ok;
}

bool HaiKangThread::playLocal()
{
    //轉(zhuǎn)碼以便支持中文路徑
    QTextCodec *codec = QTextCodec::codecForName("gb2312");
    QByteArray data = codec->fromUnicode(url);

    PlayM4_GetPort(&port);
    bool ok = PlayM4_OpenFile(port, data.data());
    if (ok) {
        //設(shè)置文件播放完畢回調(diào)函數(shù)
        PlayM4_SetFileEndCallback(port, FileEndCallback, this);

        //回調(diào)則可以拿到音視頻數(shù)據(jù),否則就直接句柄播放
        if (callback) {
            PlayM4_SetDecCallBackMend(port, DecCallBack, (quser)this);
            PlayM4_Play(port, NULL);
        } else {
            PlayM4_Play(port, (HWND)playWidget->winId());
        }

        //同時播放聲音
        PlayM4_PlaySound(port);

        //倒放
        //PlayM4_ReversePlay(port);

        //快進(jìn)播放,多次調(diào)用速度更快
        //PlayM4_Fast(port);
        //PlayM4_Fast(port);

        ok = true;
        qDebug() << TIMEMS << "打開視頻文件成功" << url;
    } else {
        qDebug() << TIMEMS << "打開視頻文件失敗" << url << PlayM4_GetLastError(port);
    }

    return ok;
}

bool HaiKangThread::init()
{
    //判斷該攝像機(jī)是否能聯(lián)通
    if (checkConn && isRtsp) {
        if (!checkUrl(url, checkTime)) {
            return false;
        }
    }

    if (playWidget == NULL) {
        return false;
    }

    //視頻流和本地文件分別處理
    bool ok = false;
    if (isRtsp) {
        ok = playRtsp();
    } else {
        ok = playLocal();
    }

    if (!ok) {
        return false;
    }

    //設(shè)置保存文件
    this->initSave();
    return true;
}

void HaiKangThread::free()
{
    if (isRtsp) {
        //停止播放+登出設(shè)備
        NET_DVR_StopRealPlay(hand);
        NET_DVR_Logout(hand);
        hand = -1;
    } else {
        //停止播放+關(guān)閉文件+釋放端口
        PlayM4_Stop(port);
        PlayM4_StopSound();
        PlayM4_CloseFile(port);
        PlayM4_FreePort(port);
        port = -1;
    }
}

到此,關(guān)于“Qt海康sdk解碼方法是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

qt
AI