溫馨提示×

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

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

Qt如何實(shí)現(xiàn)mpv錄像存儲(chǔ)

發(fā)布時(shí)間:2021-12-15 10:28:36 來(lái)源:億速云 閱讀:172 作者:iii 欄目:互聯(lián)網(wǎng)科技

本篇內(nèi)容主要講解“Qt如何實(shí)現(xiàn)mpv錄像存儲(chǔ)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Qt如何實(shí)現(xiàn)mpv錄像存儲(chǔ)”吧!

一、前言

用mpv來(lái)做錄像存儲(chǔ),保存視頻文件,從來(lái)都沒(méi)有如此的方便,直接設(shè)置屬性stream-record對(duì)應(yīng)的文件路徑即可,我的乖乖,一行代碼,如此精簡(jiǎn)美麗大方,搞得我都不敢相信自己的眼睛,mpv除了支持主流的win、linux、mac三大操作系統(tǒng)外,還支持手機(jī)安卓IOS等,尤其是居然支持各種嵌入式linux,記得vlc想要在嵌入式linux上交叉編譯成功的話,難于上青天,各種插件的依賴實(shí)在是太多了,直到你放棄為止,在X86的linux系統(tǒng)還是比較方便一些的,而在這塊,mpv簡(jiǎn)直是完爆vlc啊,直接命令行都可以在嵌入式linux上安裝呢,內(nèi)置的ffmpeg超強(qiáng)解碼器,使得你可以直接命令行調(diào)用mpv來(lái)播放音視頻,這在一些嵌入式linux上Qt無(wú)法播放音視頻的場(chǎng)景,非常有用,本人在全志H3板子上使用的就是mpv來(lái)播放音視頻,默認(rèn)GPU解碼使得CPU占用極地。

前面幾篇文章寫過(guò)vlc的錄像存儲(chǔ)和ffmpeg的錄像存儲(chǔ),都是同時(shí)支持了保存成一個(gè)視頻文件和定時(shí)存儲(chǔ)成不同的視頻文件,這個(gè)功能都采用了同樣的策略,那就開個(gè)定時(shí)器來(lái)處理,比如開啟了定時(shí)存儲(chǔ)的話,到了時(shí)間先停止錄像,然后再重新開始錄像,重新設(shè)置新的視頻文件名稱,這樣來(lái)實(shí)現(xiàn)的,同樣的在mpv這里也是這樣處理的,先設(shè)置屬性stream-record為空字符串則表示停止錄像,然后再重新設(shè)置屬性stream-record為新的文件名稱即可。

二、功能特點(diǎn)

  1. 多線程實(shí)時(shí)播放視頻流+本地視頻等。

  2. 支持windows+linux+mac。

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

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

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

  6. 可直接拖曳文件到mpvwidget控件播放。

  7. 支持h365視頻流+rtmp等常見視頻流。

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

  9. 支持存儲(chǔ)單個(gè)視頻文件和定時(shí)存儲(chǔ)視頻文件。

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

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

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

  13. 錄像文件存儲(chǔ)MP4文件。

  14. 支持qsv、dxva2、d3d11va等硬解碼。

三、效果圖

Qt如何實(shí)現(xiàn)mpv錄像存儲(chǔ)

四、核心代碼

void MpvThread::initSave()
{
    if (!saveFile) {
        return;
    }

    if (saveInterval == 0) {
        saveVideo(fileName);
    }
}

void MpvThread::saveVideo()
{
    if (!saveFile) {
        return;
    }

    //重新設(shè)置文件名稱
    QString dirName = QString("%1/%2").arg(savePath).arg(QDATE);
    newDir(dirName);
    fileName = QString("%1/%2_%3.mp4").arg(dirName).arg(fileFlag).arg(STRDATETIME);
    saveVideo(fileName);
}

void MpvThread::saveVideo(const QString &fileName)
{
    if (mpvPlayer) {
        //轉(zhuǎn)成平臺(tái)的路徑,否則中文目錄可能不認(rèn)識(shí)
        QString file = QDir::toNativeSeparators(fileName);
        QByteArray data = file.toUtf8();
        setValue("stream-record", "");
        setValue("stream-record", data.constData());
    }
}

到此,相信大家對(duì)“Qt如何實(shí)現(xiàn)mpv錄像存儲(chǔ)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

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

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

qt
AI