国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Qt編寫監(jiān)控實時顯示和取流回放工具(回放支持切換進度)

這篇具有很好參考價值的文章主要介紹了Qt編寫監(jiān)控實時顯示和取流回放工具(回放支持切換進度)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、前言

現(xiàn)在各個監(jiān)控大廠做的設(shè)備,基本上都會支持通過rtsp直接取流顯示,而且做的比較好的還支持通過rtsp回放取流,基本上都會約定一個字符串的規(guī)則,每個廠家都是不一樣的規(guī)則,比如回放對應的rtsp地址還要帶上時間范圍,回放肯定要指定一個開始時間和結(jié)束時間。這里需要特別提示的是,按道理rtsp是實時視頻流,一般是沒有時長的,而回放的rtsp視頻流是帶了時長的,所以可以通過seek來定位播放位置,這個就很方便用戶在軟件上任意拖動和切換播放位置,以前我一直以為rtsp實時視頻流不可能有時長,原來是自己孤陋寡聞了,在通過一個老萬音視頻大佬的指點下才得知這個特性,這個特性當然需要設(shè)備廠家在后端實現(xiàn)支持。

有了回放可以切換播放進度位置這個特性,意味著回放這塊不需要用GB28181國標去解析,直接構(gòu)建對應的回放視頻流字符串就可以,目前測試下來,正常播放和切換進度播放一點問題沒有,唯獨倍速播放有問題,目前看下來還是不支持倍速播放的,不知道是不是還有其他的機關(guān)要素控制比如參數(shù)啥的。其實取流回放的核心就是根據(jù)不同廠家拿到對應設(shè)備的rtsp字符串即可,解碼那邊要拿到時長,并當做文件處理,因為文件類型的可以切換播放進度。

二、效果圖

Qt編寫監(jiān)控實時顯示和取流回放工具(回放支持切換進度)文章來源地址http://www.zghlxwxcb.cn/news/detail-494837.html

三、體驗地址

  1. 國內(nèi)站點:https://gitee.com/feiyangqingyun
  2. 國際站點:https://github.com/feiyangqingyun
  3. 個人作品:https://blog.csdn.net/feiyangqingyun/article/details/97565652
  4. 體驗地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取碼:01jf 文件名:bin_video_demo。

四、功能特點

  1. 支持各種音視頻文件、本地攝像頭設(shè)備,各種視頻流網(wǎng)絡流。
  2. 支持開始播放、暫停播放、繼續(xù)播放、停止播放、設(shè)置播放進度、倍速播放。
  3. 可設(shè)置音量、靜音切換、抓拍圖片、錄像存儲。
  4. 自動提取專輯信息比如標題、藝術(shù)家、專輯、專輯封面,自動顯示專輯封面。
  5. 完美支持音視頻同步和倍速播放。
  6. 解碼策略支持速度優(yōu)先、質(zhì)量優(yōu)先、均衡處理、最快速度。
  7. 支持手機視頻旋轉(zhuǎn)角度顯示,比如一般手機拍攝的視頻是旋轉(zhuǎn)了90度的,解碼顯示的時候需要重新旋轉(zhuǎn)90度才是正的。
  8. 自動轉(zhuǎn)換yuv420格式,比如本地攝像頭是yuyv422格式,有些視頻文件是xx格式,統(tǒng)一將非yuv420格式轉(zhuǎn)換,然后再進行處理。
  9. 支持硬解碼dxva2、d3d11va等,性能極高尤其是大分辨率比如4K視頻。
  10. 視頻響應極低延遲0.2s左右,極速響應打開視頻流0.5s左右,專門做了優(yōu)化處理。
  11. 硬解碼和GPU繪制組合,極低CPU占用,比??荡笕A等客戶端更優(yōu)。
  12. 支持視頻流中的各種音頻格式,AAC、PCM、G.726、G.711A、G.711Mu、G.711ulaw、G.711alaw、MP2L2等都支持,推薦選擇AAC兼容性跨平臺性最好。
  13. 視頻存儲支持yuv、h264、mp4多種格式,音頻存儲支持pcm、wav、aac多種格式。默認視頻mp4格式、音頻aac格式。
  14. 支持分開存儲音頻視頻文件,也支持合并到一個mp4文件,默認策略是無論何種音視頻文件格式存儲,最終都轉(zhuǎn)成mp4及aac格式,然后合并成音視頻一起的mp4文件。
  15. 支持本地攝像頭實時視頻顯示帶音頻輸入輸出,音視頻錄制合并到一個mp4文件。
  16. 支持H264/H265編碼(現(xiàn)在越來越多的監(jiān)控攝像頭是H265視頻流格式)生成視頻文件,內(nèi)部自動識別切換編碼格式。
  17. 自動識別視頻流動態(tài)分辨率改動,重新打開視頻流。
  18. 支持用戶信息中包含特殊字符(比如用戶信息中包含+#@等字符)的視頻流播放,內(nèi)置解析轉(zhuǎn)義處理。
  19. 純qt+ffmpeg解碼,非sdl等第三方繪制播放依賴,gpu繪制采用qopenglwidget,音頻播放采用qaudiooutput。
  20. 同時支持ffmpeg2、ffmpeg3、ffmpeg4、ffmpeg5、ffmpeg6以及后續(xù)版本,全部做了兼容處理。如果需要支持xp需要選用ffmpeg3或ffmpeg2。
  21. 支持濾鏡,源頭帶各種水印及圖形效果,可以將OSD標簽信息和各種圖形信息寫入到MP4文件。

五、相關(guān)代碼

//地址參數(shù)結(jié)構(gòu)體
struct UrlPara {
    QString deviceIP;           //通信地址
    int devicePort;             //通信端口
    QString userName;           //用戶名稱
    QString userPwd;            //用戶密碼

    int channel;                //通道編號
    int streamType;             //碼流類型
    QString companyName;        //廠家標識
    CompanyType companyType;    //廠家類型

    int videoType;              //視頻類型(0-實時/1-回放)
    QDateTime dateTimeStart;    //開始時間(回放專用)
    QDateTime dateTimeEnd;      //結(jié)束時間(回放專用)

    UrlPara() {
        devicePort = 0;
        channel = 0;
        streamType = 0;
    }

    //重載打印輸出格式
    friend QDebug operator << (QDebug debug, const UrlPara &urlPara) {
        QStringList list;
        list << QString("通信地址: %1").arg(urlPara.deviceIP);
        list << QString("通信端口: %1").arg(urlPara.devicePort);
        list << QString("用戶名稱: %1").arg(urlPara.userName);
        list << QString("用戶密碼: %1").arg(urlPara.userPwd);

        list << QString("通道編號: %1").arg(urlPara.channel);
        list << QString("碼流類型: %1").arg(urlPara.streamType);
        list << QString("廠家標識: %1").arg(urlPara.companyName);
        list << QString("廠家類型: %1").arg(urlPara.companyType);

#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
        debug.noquote() << list.join("\n");
#else
        debug << list.join("\n");
#endif
        return debug;
    }
};

QString UrlHelper::getRtspUrl(const UrlPara &urlPara)
{
    QString url;
    //頭部地址格式完全一致
    QString head = QString("rtsp://%1:%2@%3:554").arg(urlPara.userName).arg(urlPara.userPwd).arg(urlPara.deviceIP);
    if (urlPara.companyType == CompanyType_HaiKang) {
        //實時預覽格式 rtsp://admin:12345@192.168.1.128:554/Streaming/Channels/101?transportmode=unicast
        //視頻回放格式 rtsp://admin:12345@192.168.1.128:554/Streaming/tracks/101?starttime=20120802t063812z&endtime=20120802t064816z
        //流媒體視頻流 rtsp://172.6.24.15:554/Devicehc8://172.6.22.106:8000:0:0?username=admin&password=12345
        //日期時間格式 ISO 8601 表示Zulu(GMT) 時間 YYYYMMDD”T”HHmmSS.fraction”Z”,
        //unicast表示單播,multicast表示多播,默認單播可以省略
        //101解析: 1是通道號 01是通道的碼流編號 也可以是02 03
        QString startTimeISO = urlPara.dateTimeStart.toString(Qt::ISODate);
        startTimeISO.replace("-", "");
        startTimeISO.replace(":", "");
        startTimeISO.toLower();

        QString endTimeISO = urlPara.dateTimeEnd.toString(Qt::ISODate);
        endTimeISO.replace("-", "");
        endTimeISO.replace(":", "");
        endTimeISO.toLower();

        //通道號和碼流編號
        QString info = QString("%1%2%3").arg(urlPara.channel).arg(0).arg(urlPara.streamType + 1);
        //回放時間范圍
        QString time = QString("starttime=%1z&endtime=%2z").arg(startTimeISO).arg(endTimeISO);
        //實時和回放地址格式不同
        if (urlPara.videoType == 0) {
            url = QString("%1/Streaming/Channels/%2").arg(head).arg(info);
        } else if (urlPara.videoType == 1) {
            url = QString("%1/Streaming/tracks/%2?%3").arg(head).arg(info).arg(time);
        }
    } else if (urlPara.companyType == CompanyType_DaHua) {
        //實時預覽格式 rtsp://192.168.1.128:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif
        //視頻回放格式 rtsp://admin:12345@192.168.1.128:554/cam/playback?channel=1&subtype=0&starttime=2021_03_18_11_36_01&endtime=2021_03_18_12_05_01
        QString startTimeStr = urlPara.dateTimeStart.toString("yyyy_MM_dd_HH_mm_ss");
        QString endTimeStr = urlPara.dateTimeEnd.toString("yyyy_MM_dd_HH_mm_ss");
        //通道號和碼流編號
        QString info = QString("channel=%1&subtype=%2").arg(urlPara.channel).arg(urlPara.streamType);
        //回放時間范圍
        QString time = QString("starttime=%1&endtime=%2").arg(startTimeStr).arg(endTimeStr);
        //實時和回放地址格式不同
        if (urlPara.videoType == 0) {
            url = QString("%1/cam/realmonitor?%2&unicast=true&proto=Onvif").arg(head).arg(info);
        } else if (urlPara.videoType == 1) {
            url = QString("%1/cam/playback?%2&%3").arg(head).arg(info).arg(time);
        }
    } else {
        //實時預覽格式 rtsp://admin:12345@192.168.1.128:554/live?channel=1&stream=1
        //視頻回放格式 rtsp://admin:12345@192.168.1.128:554/file?channel=1&start=1494485280&stop=1494485480
        //先轉(zhuǎn)換時間戳,1970年到該時間經(jīng)過的秒數(shù)
        qint64 startTimeSec = urlPara.dateTimeStart.toMSecsSinceEpoch() / 1000;
        qint64 stopTimeSec = urlPara.dateTimeEnd.toMSecsSinceEpoch() / 1000;
        //回放時間范圍
        QString time = QString("start=%1&stop=%2").arg(startTimeSec).arg(stopTimeSec);
        //實時和回放地址格式不同
        if (urlPara.videoType == 0) {
            url = QString("%1/live?channel=%2&stream=%3").arg(head).arg(urlPara.channel).arg(urlPara.streamType);
        } else if (urlPara.videoType == 1) {
            url = QString("%1/file?channel=%2&%3").arg(head).arg(urlPara.channel).arg(time);
        }
    }

    //還有一種通用格式 rtsp://admin:12345@192.168.1.128:554/0  0-主碼流 1-子碼流
    return url;
}

到了這里,關(guān)于Qt編寫監(jiān)控實時顯示和取流回放工具(回放支持切換進度)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • vue3實現(xiàn)海康威視根據(jù)??挡寮M行監(jiān)控實時預覽和回放功能

    因為我的文章已經(jīng)寫過基于vue實現(xiàn)??祑eb插件進行視頻播放開箱即用文章,這個文章是利用 vite+vue3+js 進行編寫的,大致內(nèi)容跟vue2一樣,拿過去能直接用。 至于我為什么要用js而不用ts,因為??堤峁┑娜齻€腳本為js語言的,ts嘗試過一次,我道行太淺,沒搞明白。 這些代碼是

    2024年02月05日
    瀏覽(127)
  • (二)Qt下多線程實現(xiàn)多個海康工業(yè)相機內(nèi)觸發(fā)采集回調(diào)取流顯示

    (二)Qt下多線程實現(xiàn)多個??倒I(yè)相機內(nèi)觸發(fā)采集回調(diào)取流顯示

    提示:這里是該系列文章的所有文章的目錄 第一章:(一)Qt下實現(xiàn)多個??倒I(yè)相機內(nèi)觸發(fā)采集回調(diào)取流顯示 第二章:(二)Qt下多線程實現(xiàn)多個??倒I(yè)相機內(nèi)觸發(fā)采集回調(diào)取流顯示 在本系列的上一篇文章中,我們講述了實現(xiàn)??倒I(yè)相機的連接,采用內(nèi)觸發(fā)采集模式,

    2024年02月16日
    瀏覽(115)
  • Qt編寫視頻監(jiān)控系統(tǒng)74-懸浮工具欄(半透明/上下左右位置/自定義按鈕)

    Qt編寫視頻監(jiān)控系統(tǒng)74-懸浮工具欄(半透明/上下左右位置/自定義按鈕)

    在監(jiān)控系統(tǒng)中一般在視頻實時預覽的時候,希望提供一個懸浮工具條,可以顯示一些提示信息比如分辨率、碼率、幀率,提供一堆快捷操作按鈕,可以錄像、抓拍、云臺控制、關(guān)閉等操作,參考了國內(nèi)很多監(jiān)控廠商客戶端軟件,總結(jié)下來基本就是懸浮條可以半透明懸浮在通道

    2024年02月06日
    瀏覽(22)
  • vue2實現(xiàn)海康威視根據(jù)??挡寮M行監(jiān)控實時預覽和回放功能,全套代碼,開箱即用。

    vue2實現(xiàn)??低暩鶕?jù)??挡寮M行監(jiān)控實時預覽和回放功能,全套代碼,開箱即用。

    ?這是一套拿到手就能直接用的根據(jù)海康提供的攝像機節(jié)點實時預覽和回放的全步驟代碼,開箱即用。 ?我的是基于vue2寫的,vue3可以看我下一篇文章。 很多人在開發(fā)vue項目的時候,不知道怎么去開發(fā)視頻實時預覽和回放功能,然后一直查文檔,再去看別人寫的項目,就是無

    2023年04月15日
    瀏覽(23)
  • Qt/C++音視頻開發(fā)69-保存監(jiān)控pcm音頻數(shù)據(jù)到mp4文件/監(jiān)控錄像/錄像存儲和回放/264/265/aac/pcm等

    用ffmpeg做音視頻保存到mp4文件,都會遇到一個問題,尤其是在視頻監(jiān)控行業(yè),就是監(jiān)控攝像頭設(shè)置的音頻是PCM/G711A/G711U,解碼后對應的格式是pcm_s16be/pcm_alaw/pcm_mulaw,將這個原始的音頻流保存到mp4文件是會報錯的,在調(diào)用avformat_write_header寫文件頭的時候提示(-22) Invalid argument,

    2024年04月11日
    瀏覽(37)
  • python調(diào)用海康網(wǎng)絡攝像頭,實時顯示監(jiān)控內(nèi)容

    python調(diào)用??稻W(wǎng)絡攝像頭,實時顯示監(jiān)控內(nèi)容

    用網(wǎng)線將海康威視攝像頭與電腦連接在一起;(或者用交換機,在一個交換機下面) ??禂z像頭的默認ip是192.168.1.64 效果:和通過??禂z像頭網(wǎng)址效果一樣 rtsp://用戶名:密碼@ip地址/Streaming/Channels/2

    2024年02月16日
    瀏覽(31)
  • Qt編寫視頻監(jiān)控系統(tǒng)79-四種界面導航欄的設(shè)計

    Qt編寫視頻監(jiān)控系統(tǒng)79-四種界面導航欄的設(shè)計

    最初視頻監(jiān)控系統(tǒng)按照二級菜單的設(shè)計思路,頂部標題欄一級菜單,左側(cè)對應二級菜單,最初采用圖片在上面,文字在下面的按鈕方式展示,隨著功能的增加,二級菜單越來越多,如果都是這個圖文上下排列的按鈕,那左側(cè)高度空間不夠,比如在筆記本1366x768的分辨率上,左

    2024年02月09日
    瀏覽(19)
  • Qt編寫視頻監(jiān)控系統(tǒng)72-通過onvif增刪改查OSD

    Qt編寫視頻監(jiān)控系統(tǒng)72-通過onvif增刪改查OSD

    之前監(jiān)控系統(tǒng)中原創(chuàng)的onvif協(xié)議解析機制,已經(jīng)能夠滿足絕大部分用戶的需要,比如搜索設(shè)備、獲取視頻流地址并播放、云臺控制、預置位管理、圖片亮度色彩飽和度等參數(shù)設(shè)置等,近期又多了一個需求,那就是通過onvif國際標準協(xié)議來對攝像頭的OSD進行增刪改查,可以通過協(xié)

    2024年02月08日
    瀏覽(21)
  • docker 部署 sentinel ,包含實時監(jiān)控不顯示的解決方案

    docker 部署 sentinel ,包含實時監(jiān)控不顯示的解決方案

    對于實時監(jiān)控不顯示的解決方案可以直接看 4. 總結(jié) sentinel-dashboard就是一個SpringBoot項目,直接使用命令啟動即可,所以可以自定義配置docker啟動。 如果沒有特殊需要可以直接下載jar,需要修改源碼則下載源碼包即可,下載地址:https://github.com/alibaba/Sentinel/releases,下載相應版

    2024年02月09日
    瀏覽(35)
  • 練習 Qt 實時顯示鼠標坐標位置

    Qt 入門實戰(zhàn)教程(目錄) 本文是文章 Qt鼠標點擊事件處理:顯示鼠標點擊位置(完整示例) 的一個作業(yè)(下文稱之為“前驅(qū)課程”)。 前驅(qū)課程中,我們完整的展示了如何在QtCreator中添加成員函數(shù),并使用重構(gòu)工具添加函數(shù)定義。 只需要模仿前驅(qū)課程,即可完成本文的作業(yè)

    2024年02月10日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包