本篇內(nèi)容介紹了“Qt怎么實現(xiàn)通用視頻控件”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
網(wǎng)站建設哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、微信小程序開發(fā)、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了洛江免費建站歡迎大家使用!
自從視頻監(jiān)控系統(tǒng)的內(nèi)核不斷增加,從最初的vlc到ffmpeg然后到mpv,后面還陸續(xù)增加了??祍dk等,每次增加一個內(nèi)核,整個視頻監(jiān)控系統(tǒng)就有三五個代碼文件需要修改,而且大部分是重復的代碼,通過define來區(qū)分不同的內(nèi)核,所以重新整理了一個視頻類,里面就define處理好了,提供了個公共接口,在需要的地方直接實例化一個類就行,而不需要在不同的地方實例化不同的類,大大減輕了后期的工作量,也復用了很多代碼。
通用視頻控件基本功能:
調(diào)用setUrl函數(shù)設置要播放的視頻文件或者流地址。
調(diào)用open方法打開視頻、close方法關(guān)閉視頻。
調(diào)用pause方法暫停播放、next方法繼續(xù)播放。
調(diào)用getVolume函數(shù)獲取音量、setVolume函數(shù)設置音量。
調(diào)用getMute函數(shù)獲取靜音狀態(tài)、setMute函數(shù)設置靜音。
調(diào)用getLength函數(shù)獲取文件長度。
調(diào)用getPosition函數(shù)獲取當前播放位置、setPosition設置播放位置。
播放成功發(fā)出receivePlayStart信號。
播放失敗發(fā)出receivePlayError信號。
播放結(jié)束發(fā)出receivePlayFinsh信號。
執(zhí)行截圖動作后,觸發(fā)snapImage信號。
解析出一張圖片后,觸發(fā)receiveImage信號。
播放文件發(fā)出fileLengthReceive總時長信號。
音量調(diào)節(jié)或者靜音狀態(tài)變動后發(fā)出fileVolumeReceive信號。
播放位置變動后發(fā)出filePositionReceive信號。
接收到拖曳文件發(fā)出fileDrag信號。
懸浮條工具欄點擊按鈕后發(fā)出btnClicked信號。
設置是否保存文件、保存間隔、保存文件夾。
設置是否拉伸填充圖片、是否深拷貝圖片。
設置是否斷線重連、超時時間。
設置懸浮條可見、背景顏色、按下顏色等。
設置邊框粗細和顏色、背景文字和圖片。
設置兩路OSD的字號、文本、顏色、位置、格式等。
設置是否采用回調(diào)、硬解碼名稱、流通信協(xié)議等。
支持多畫面切換,全屏切換等,包括1+4+6+8+9+13+16+25+36+64畫面切換。
支持alt+enter全屏,esc退出全屏。
自定義信息框+錯誤框+詢問框+右下角提示框(包含多種格式)。
17套皮膚樣式隨意更換,所有樣式全部統(tǒng)一,包括菜單等。
云臺儀表盤鼠標移上去高亮,八個方位精準識別。
底部畫面工具欄(畫面分割切換+截圖聲音等設置)移上去高亮。
可在配置文件更改左上角logo+中文軟件名稱+英文軟件名稱。
封裝了百度地圖,視圖切換,運動軌跡,設備點位,鼠標按下獲取經(jīng)緯度等。
支持圖片地圖,設備按鈕可以在圖片地圖上自由拖動自動保存位置信息。
在百度地圖和圖片地圖上,雙擊視頻可以預覽攝像頭實時視頻。
堆棧窗體,每個窗體都是個單獨的qwidget,方便編寫自己的代碼。
頂部鼠標右鍵菜單,可動態(tài)控制時間CPU+左上角面板+左下角面板+右上角面板+右下角面板的顯示和隱藏,支持恢復默認布局。
工具欄可以放置多個小圖標和關(guān)閉圖標。
左側(cè)右側(cè)可拖動拉伸,并自動記憶寬高位置,重啟后恢復。
雙擊攝像機節(jié)點自動播放視頻,雙擊節(jié)點自動依次添加視頻,會自動跳到下一個,雙擊父節(jié)點自動添加該節(jié)點下的所有視頻。
攝像機節(jié)點拖曳到對應窗體播放視頻,同時支持拖曳本地文件直接播放。
視頻畫面窗體支持拖曳交換,瞬間響應。
雙擊節(jié)點+拖曳節(jié)點+拖曳窗體交換位置,均自動更新url.txt。
支持從url.txt中加載通道視頻播放,自動記憶最后通道對應的視頻,軟件啟動后自動打開播放。
右下角音量條控件,失去焦點自動隱藏,音量條帶靜音圖標。
集成百度在線地圖和離線地圖,可以添加設備對應位置,自動生成地圖,支持縮放和添加覆蓋物等。
視頻拖動到通道窗體外自動刪除視頻。
鼠標右鍵可刪除當前+所有視頻,截圖當前+所有視頻。
錄像機管理、攝像機管理,可添加刪除修改導入導出打印信息,立即應用新的設備信息生成樹狀列表,不需重啟。
在pro文件中可以自由開啟是否加載地圖。
視頻播放可選2種內(nèi)核自由切換,vlc+ffmpeg,均可在pro中設置。
可設置1+4+9+16畫面輪詢,可設置輪詢間隔以及輪詢碼流類型等,直接在主界面底部工具欄右側(cè)單擊啟動輪詢按鈕即可,再次單擊停止輪詢。
默認超過10秒鐘未操作自動隱藏鼠標指針。
支持onvif搜素設備,支持任意onvif攝像機,包括但不限于??荡笕A宇視天地偉業(yè)華為等。
支持onvif云臺控制,可上下左右移動云臺攝像機,包括復位和焦距調(diào)整等。
同時支持sqlite、MySQL、postsql等數(shù)據(jù)庫。
可保存視頻,可選定時存儲或者單文件存儲,可選存儲間隔時間。
可設置視頻流通信方式tcp+udp,可設置視頻解碼是速度優(yōu)先、質(zhì)量優(yōu)先、均衡等。
可設置硬解碼類型,支持qsv、dxva2、d3d11va等。
默認采用opengl繪制視頻,超低的CPU資源占用,支持yuyv和nv12兩種格式繪制,很牛逼。
高度可定制化,用戶可以很方便的在此基礎(chǔ)上衍生自己的功能,支持linux和mac系統(tǒng)。
#ifndef COMMONVIDEOWIDGET_H #define COMMONVIDEOWIDGET_H #ifdef videovlc #include "vlcwidget.h" #elif videoffmpeg #include "ffmpegwidget.h" #elif videompv #include "mpvwidget.h" #elif haikang #include "haikangwidget.h" #else #include "videowidget.h" #endif class CommonVideoWidget : public QWidget { Q_OBJECT public: //標簽格式 enum OSDFormat { OSDFormat_Text = 0, //文本 OSDFormat_Date = 1, //日期 OSDFormat_Time = 2, //時間 OSDFormat_DateTime = 3, //日期時間 OSDFormat_Image = 4 //圖片 }; //標簽位置 enum OSDPosition { OSDPosition_Left_Top = 0, //左上角 OSDPosition_Left_Bottom = 1, //左下角 OSDPosition_Right_Top = 2, //右上角 OSDPosition_Right_Bottom = 3 //右下角 }; explicit CommonVideoWidget(QWidget *parent = 0); ~CommonVideoWidget(); private: #ifdef videovlc VlcWidget *widget; #elif videoffmpeg FFmpegWidget *widget; #elif videompv MpvWidget *widget; #elif haikang HaiKangWidget *widget; #else VideoWidget *widget; #endif public: QImage getImage() const; QPixmap getPixmap() const; QString getUrl() const; QDateTime getLastTime() const; bool getCallback() const; bool getIsPlaying() const; bool getIsRtsp() const; bool getIsUsbCamera() const; bool getCopyImage() const; bool getCheckLive() const; bool getDrawImage() const; bool getFillImage() const; bool getFlowEnable() const; QColor getFlowBgColor() const; QColor getFlowPressColor() const; int getTimeout() const; int getBorderWidth() const; QColor getBorderColor() const; QColor getFocusColor() const; QString getBgText() const; QImage getBgImage() const; bool getOSD1Visible() const; int getOSD1FontSize() const; QString getOSD1Text() const; QColor getOSD1Color() const; QImage getOSD1Image() const; OSDFormat getOSD1Format() const; OSDPosition getOSD1Position() const; bool getOSD2Visible() const; int getOSD2FontSize() const; QString getOSD2Text() const; QColor getOSD2Color() const; QImage getOSD2Image() const; OSDFormat getOSD2Format() const; OSDPosition getOSD2Position() const; int getFaceBorder() const; QColor getFaceColor() const; QList<QRect> getFaceRects() const; signals: //播放成功 void receivePlayStart(); //播放失敗 void receivePlayError(); //播放結(jié)束 void receivePlayFinsh(); //截圖信號 void snapImage(const QImage &image); //收到圖片信號 void receiveImage(const QImage &image); //總時長 void fileLengthReceive(qint64 length); //當前播放時長 void filePositionReceive(qint64 position); //音量大小 void fileVolumeReceive(int volume, bool muted); //接收到拖曳文件 void fileDrag(const QString &url); //工具欄單擊 void btnClicked(const QString &btnName); public slots: //設置焦點 void setFocus2(); //設置視頻寬度 void setVideoWidth(int videoWidth); //設置視頻高度 void setVideoHeight(int videoHeight); //設置緩存圖片寬度 void setBufferWidth(int bufferWidth); //設置緩存圖片高度 void setBufferHeight(int bufferHeight); //獲取長度 qint64 getLength(); //獲取當前播放位置 qint64 getPosition(); //設置播放位置 void setPosition(qint64 position); //獲取靜音狀態(tài) bool getMuted(); //設置靜音 void setMuted(bool muted); //獲取音量 int getVolume(); //設置音量 void setVolume(int volume); //設置顯示間隔 void setInterval(int interval); //設置幀數(shù),用于播放自身存儲的視頻流文件,控制播放速度 void setVideoFps(int videoFps); //設置休眠時間 void setSleepTime(int sleepTime); //設置檢測連接超時 void setCheckTime(int checkTime); //設置是否檢測連接 void setCheckConn(bool checkConn); //設置是否播放音頻 void setPlayAudio(bool playAudio); //設置視頻流地址 void setUrl(const QString &url); //設置是否采用回調(diào) void setCallback(bool callback); //設置硬件解碼器名稱 void setHardware(const QString &hardware); //設置通信協(xié)議 void setTransport(const QString &transport); //設置緩存時間 void setCaching(int caching); //設置圖片質(zhì)量類型 void setImageFlag(int imageFlag); #ifdef videoffmpeg //設置參數(shù) void setOption(const char *key, const char *value); #elif videovlc //設置參數(shù) void setOption(const QString &option); #elif videompv //通用屬性接口 QVariant getValue(const QString &name); void setValue(const QString &name, const QVariant &value); void setOption(const QString &name, const QVariant &value); void command(const QVariant &args); #endif //設置是否保存文件 void setSaveFile(bool saveFile); //設置保存間隔 void setSaveInterval(int saveInterval); //設置保存文件夾 void setSavePath(const QString &savePath); //設置定時保存文件唯一標識符 void setFileFlag(const QString &fileFlag); //設置保存文件名稱 void setFileName(const QString &fileName); //設置只存儲單個文件的保存時間 void setSaveTime(const QDateTime &saveTime); //設置是否拷貝圖片 void setCopyImage(bool copyImage); //設置是否檢測活著 void setCheckLive(bool checkLive); //設置是否實時繪制圖片 void setDrawImage(bool drawImage); //設置是否拉伸填充 void setFillImage(bool fillImage); //設置是否啟用懸浮條 void setFlowEnable(bool flowEnable); //設置懸浮條背景顏色 void setFlowBgColor(const QColor &flowBgColor); //設置懸浮條按下顏色 void setFlowPressColor(const QColor &flowPressColor); //設置超時時間 void setTimeout(int timeout); //設置邊框?qū)挾? void setBorderWidth(int borderWidth); //設置邊框顏色 void setBorderColor(const QColor &borderColor); //設置有焦點邊框顏色 void setFocusColor(const QColor &focusColor); //設置無圖像文字 void setBgText(const QString &bgText); //設置無圖像背景圖 void setBgImage(const QImage &bgImage); //設置標簽1是否可見 void setOSD1Visible(bool osdVisible); //設置標簽1文字字號 void setOSD1FontSize(int osdFontSize); //設置標簽1文本 void setOSD1Text(const QString &osdText); //設置標簽1文字顏色 void setOSD1Color(const QColor &osdColor); //設置標簽1圖片 void setOSD1Image(const QImage &osdImage); //設置標簽1格式 void setOSD1Format(const OSDFormat &osdFormat); //設置標簽1位置 void setOSD1Position(const OSDPosition &osdPosition); //設置標簽2是否可見 void setOSD2Visible(bool osdVisible); //設置標簽2文字字號 void setOSD2FontSize(int osdFontSize); //設置標簽2文本 void setOSD2Text(const QString &osdText); //設置標簽2文字顏色 void setOSD2Color(const QColor &osdColor); //設置標簽2圖片 void setOSD2Image(const QImage &osdImage); //設置標簽2格式 void setOSD2Format(const OSDFormat &osdFormat); //設置標簽2位置 void setOSD2Position(const OSDPosition &osdPosition); //設置人臉框粗細 void setFaceBorder(int faceBorder); //設置人臉框顏色 void setFaceColor(const QColor &faceColor); //設置人臉框區(qū)域集合 void setFaceRects(const QList<QRect> &faceRects); //打開設備 void open(); //暫停 void pause(); //繼續(xù) void next(); //關(guān)閉設備 void close(); //重新加載 void restart(int delayOpen = 20); //清空 void clear(); //快照 void snap(const QString &fileName); }; #endif // COMMONVIDEOWIDGET_H
“Qt怎么實現(xiàn)通用視頻控件”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
網(wǎng)站標題:Qt怎么實現(xiàn)通用視頻控件
文章起源:http://bm7419.com/article28/pssdjp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供標簽優(yōu)化、品牌網(wǎng)站建設、營銷型網(wǎng)站建設、用戶體驗、建站公司、云服務器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)