您好,登錄后才能下訂單哦!
這篇文章主要講解了“Qt如何實(shí)現(xiàn)海康sdk本地播放”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Qt如何實(shí)現(xiàn)??祍dk本地播放”吧!
??祍dk中包含了MP4解碼播放庫,對應(yīng)的API函數(shù)都是PlayM4開頭的,顧名思義播放MP4,??档囊曨l默認(rèn)可以保存成MP4文件,可以用通用的播放器來播放,這就是為啥前面好多篇文章講到的各種內(nèi)核錄像存儲都改成MP4來存儲,vlc、mpv、ffmpeg等,最終錄像存儲都轉(zhuǎn)換成MP4文件,看來大公司大廠做的也是保存成MP4文件,肯定是有他的道理,至于有多少道理,跟著他學(xué)者他這樣處理就行,可以先不用問不用管,直接上手?jǐn)]代碼就對了,有些東西需要深究原理,而有些東西就沒有必要太過于細(xì)致詢問下去了,折騰下去陷入死胡同,好比知道1+1=2就行,至于為啥=2,交給專門的研究人員去研究就行。
海康sdk的MP4解碼庫,即支持自身的MP4文件,也支持常規(guī)的MP4文件,而且最新版本還支持AVI文件格式,隨便試了本地的MP4文件,也都是支持的,如果需要拿到音視頻數(shù)據(jù),只需要調(diào)用PlayM4_SetDecCallBackMend設(shè)置下解碼回調(diào)函數(shù)即可,比視頻流的回調(diào)流程簡單很多,少了設(shè)置回調(diào)處理函數(shù)一大堆處理,只需要解碼轉(zhuǎn)換成QImage即可。本地文件還需要增加一個(gè)文件結(jié)束回調(diào),這樣能知道什么時(shí)候文件播放完成了,發(fā)出對應(yīng)的信號進(jìn)行處理,可以調(diào)用PlayM4_SetFileEndCallback設(shè)置文件播放完畢回調(diào)函數(shù),在FileEndCallback回調(diào)函數(shù)中,通過異步執(zhí)行QMetaObject::invokeMethod停止函數(shù)來通知界面。
關(guān)于本地文件請注意以下幾點(diǎn):
文件方式播放下,不能調(diào)用PlayM4_CloseStream。
流播放下,不能調(diào)用PlayM4_CloseFile接口。
流開關(guān)接口和文件開關(guān)接口不能交叉使用。
支持播放視頻流和本地MP4文件。
支持句柄和回調(diào)兩種模式。
多線程顯示圖像,不卡主界面。
自動(dòng)重連網(wǎng)絡(luò)攝像頭。
可設(shè)置邊框大小即偏移量和邊框顏色。
可設(shè)置是否繪制OSD標(biāo)簽即標(biāo)簽文本或圖片和標(biāo)簽位置。
可設(shè)置兩種OSD位置和風(fēng)格。
可設(shè)置是否保存到文件以及文件名。
可直接拖曳文件到haikangwidget控件播放。
支持h364/h365視頻流。
可暫停播放和繼續(xù)播放。
支持存儲單個(gè)視頻文件和定時(shí)存儲視頻文件。
自定義頂部懸浮條,發(fā)送單擊信號通知,可設(shè)置是否啟用。
可設(shè)置畫面拉伸填充或者等比例填充。
可設(shè)置解碼是速度優(yōu)先、質(zhì)量優(yōu)先、均衡處理。
可對視頻進(jìn)行截圖(原始圖片)和截屏(視頻窗體)。
錄像文件存儲為MP4文件。
支持焦距控制、云臺控制。
可定制功能。
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()); } //同時(shí)播放聲音 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; } 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; } }
感謝各位的閱讀,以上就是“Qt如何實(shí)現(xiàn)??祍dk本地播放”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Qt如何實(shí)現(xiàn)??祍dk本地播放這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。