真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Qtmpv解碼播放怎么實(shí)現(xiàn)

這篇文章主要介紹“Qt mpv解碼播放怎么實(shí)現(xiàn)”,在日常操作中,相信很多人在Qt mpv解碼播放怎么實(shí)現(xiàn)問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Qt mpv解碼播放怎么實(shí)現(xiàn)”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站制作、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)公司推出正安免費(fèi)做網(wǎng)站回饋大家。

一、前言

之前玩了vlc解碼和ffmpeg解碼,前陣子有個(gè)客戶需要換成mpv解碼,于是研究了下mpv的使用方法,自從用了mpv以后發(fā)現(xiàn)愛(ài)不釋手,這玩意天生適合極客和程序員啊,居然將各種處理封裝成了命令和屬性調(diào)用,比如播放進(jìn)度,你只需要讀取屬性time-pos即可,如果要讀取音量只需要讀取屬性volume即可,設(shè)置音量就直接設(shè)置屬性volume對(duì)應(yīng)的值即可,我的乖乖,這太棒了棒極了,這不就是咱們夢(mèng)寐以求的處理方式嗎?你只需要封裝幾個(gè)通用的處理接口(讀取屬性mpv_get_property、設(shè)置屬性mpv_set_property、執(zhí)行命令mpv_command_node、設(shè)置參數(shù)mpv_set_option),就涵蓋了絕大多數(shù)的功能,你說(shuō)簡(jiǎn)單易用不,要的就是這種效果呢?。?!

mpv是一款基于MPlayer和MPlayer2的多平臺(tái)開(kāi)源播放器,是一個(gè)開(kāi)源的,跨平臺(tái)視頻播放器,帶有極簡(jiǎn)的 GUI 界面以及豐富的命令行控制。其在Linux上擁有廣泛的輸出設(shè)備支持,內(nèi)置ffmpeg解碼器,支持絕大部分的視頻和音頻格式,支持本地播放和網(wǎng)絡(luò)播放,支持ass特效字幕,GPU解碼能力十分出色。MPV有標(biāo)準(zhǔn)播放器該有的所有功能,你可以播放各種視頻,以及通過(guò)常用快捷鍵來(lái)控制播放。在網(wǎng)絡(luò)上經(jīng)常被譽(yù)為神級(jí)播放器,神一般的存在!

通過(guò)mpv來(lái)顯示視頻,目前只找到句柄的形式,回調(diào)的形式?jīng)]有找到,不知道是不是不支持,翻遍了官網(wǎng)的手冊(cè)和說(shuō)明,硬是沒(méi)有找到,還有一個(gè)問(wèn)題就是通過(guò)mpv_set_option設(shè)置播放的句柄,在linux上不知道如何傳入?yún)?shù),如果有誰(shuí)有辦法可以留言,謝謝。

解碼播放流程:

  1. 調(diào)用mpv_create創(chuàng)建實(shí)例。

  2. 調(diào)用mpv_set_option設(shè)置播放句柄。

  3. 調(diào)用mpv_set_property設(shè)置一些屬性比如啟用鍵盤(pán)輸入等。

  4. 調(diào)用mpv_set_option設(shè)置一些參數(shù)比如硬解碼、超時(shí)時(shí)間等。

  5. 調(diào)用mpv_initialize初始化實(shí)例。

  6. 調(diào)用mpv_command_async執(zhí)行命令loadfile打開(kāi)文件播放。

  7. 調(diào)用mpv_terminate_destroy釋放實(shí)例。

二、功能特點(diǎn)

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

  2. 支持windows+linux+mac。

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

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

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

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

  7. 支持h365視頻流+rtmp等常見(jiàn)視頻流。

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

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

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

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

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

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

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

三、效果圖

Qt mpv解碼播放怎么實(shí)現(xiàn)

四、核心代碼

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

    //創(chuàng)建實(shí)例
    mpvPlayer = mpv_create();

    //回調(diào)方式和句柄方式兩種分別處理
    if (callback) {
        return false;
    } else {
        //設(shè)置播放句柄
        if (playWidget == NULL) {
            return false;
        }

        //下面是WIN上的方法,如何在linux上的方法還沒(méi)找到
        HWND wid = (HWND)playWidget->winId();
        mpv_set_option(mpvPlayer, "wid", MPV_FORMAT_INT64, &wid);
    }

    //請(qǐng)求級(jí)別日志消息
    mpv_request_log_messages(mpvPlayer, "info");
    //啟用默認(rèn)綁定
    setValue("input-default-bindings", "yes");
    //啟用鍵盤(pán)輸入
    setValue("input-vo-keyboard", "yes");

    //設(shè)置硬件加速 none auto any d3d11va dxva2
    setOption("hwdec", hardware);
    //設(shè)置通信協(xié)議 tcp udp
    setOption("rtsp-transport", transport);
    //設(shè)置網(wǎng)絡(luò)超時(shí)時(shí)間 單位秒
    setOption("network-timeout", 3);

    //初始化實(shí)例
    if (mpv_initialize(mpvPlayer) < 0) {
        return false;
    }

    //設(shè)置保存文件,目前發(fā)現(xiàn)有部分視頻流不行,原因未知
    this->initSave();

    //創(chuàng)建事件管理器
    if (callbackevent) {
        attachEvents(mpvPlayer);
        mpv_set_wakeup_callback(mpvPlayer, wakeup, this);
    }

    QByteArray data = url.toUtf8();
    //command(QVariantList() << "loadfile" << data.data());
    const char *args[] = {"loadfile", data.data(), NULL};
    if (mpv_command_async(mpvPlayer, 0, args) < 0) {
        return false;
    }

    //打印支持的屬性列表和命令列表
    //qDebug() << TIMEMS << getValue("property-list") << getValue("command-list");
    //打印組件的版本
    //qDebug() << TIMEMS << getValue("mpv-version") << getValue("ffmpeg-version");
    //qDebug() << TIMEMS << "init mpv finsh";
    return true;
}

void MpvThread::free()
{
    if (mpvPlayer != NULL) {
        mpv_terminate_destroy(mpvPlayer);
        mpvPlayer = NULL;
    }

    //qDebug() << TIMEMS << "close mpv ok";
}

到此,關(guān)于“Qt mpv解碼播放怎么實(shí)現(xiàn)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!


網(wǎng)頁(yè)題目:Qtmpv解碼播放怎么實(shí)現(xiàn)
鏈接分享:http://weahome.cn/article/gdcsgh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部