我們希望在 Qt 6.2 中支持的主要用例是:
在 Qt 6 中,當(dāng)前支持的集合是:
Qt Multimedia的公共 API由 5 個(gè)大型功能塊組成。其中三個(gè)塊已經(jīng)存在于 Qt 5 中,但是這些塊中的 API 發(fā)生了重大變化。功能塊是:
在做新的 API 的時(shí)候,我們也希望在 C++ 和 QML 之間有一個(gè)統(tǒng)一的 API。這使我們可以刪除大量代碼,這些代碼只是簡(jiǎn)單地包裝了 C++ API 并以稍微不同的方式將其暴露給 QML。對(duì)于大多數(shù)公共 C++ 類,現(xiàn)在有一個(gè)相應(yīng)的同名 QML 項(xiàng)。所以QMediaPlayer并例如具有相應(yīng)QML MediaPlayer的具有相同的API作為C ++類的項(xiàng)目。
讓我們從設(shè)備發(fā)現(xiàn)開(kāi)始。新的QMediaDevices 類旨在為您提供有關(guān)可用音頻和視頻設(shè)備的信息。它將允許您列出可用的音頻輸入(通常是麥克風(fēng))、音頻輸出(揚(yáng)聲器和耳機(jī))和攝像頭。您可以檢索默認(rèn)設(shè)備,類還會(huì)通知您有關(guān)配置的任何更改,例如,當(dāng)用戶連接外部耳機(jī)時(shí)。
QMediaDevices devices; connect(devices, QMediaDevices::audioInputsChanged, []() { qDebug() “available audio inputs have changed”; }
此功能塊有助于使用原始 PCM 數(shù)據(jù)處理低電平音頻,并直接從音頻設(shè)備讀取或?qū)懭朐摂?shù)據(jù)。
處理媒體文件播放的主要類是QMediaPlayer。該QMediaPlayer API已經(jīng)從我們?cè)赒t5簡(jiǎn)化了我們必須從現(xiàn)在模塊去掉了所有的播放列表功能,這在過(guò)去是內(nèi)置了Qt 5媒體播放器,但其復(fù)雜的API和實(shí)現(xiàn)。我們計(jì)劃在 6.2 之后將播放列表功能作為一個(gè)單獨(dú)的獨(dú)立類帶回來(lái),然后您可以在需要時(shí)連接到QMediaPlayer。現(xiàn)在,如果需要,您可以在“播放器”示例中找到一些處理播放列表的代碼。
另一方面,QMediaPlayer獲得了渲染字幕的能力,您現(xiàn)在可以使用setActiveAudioTrack()、setActiveVideoTrack()和setActiveSubtitleTrack()方法檢查和選擇所需的音頻、視頻或字幕軌道。
Qt 6 中的 QMediaPlayer 要求您使用setAudioOutput()和setVideoOutput()方法將其主動(dòng)連接到音頻和視頻輸出。不設(shè)置音頻輸出將意味著媒體播放器不播放音頻。這是對(duì) Qt 5 的更改,在 Qt 5 中始終選擇默認(rèn)音頻輸出。進(jìn)行了更改以允許音頻和視頻之間的對(duì)稱 API 并簡(jiǎn)化與 QML 的集成
除了QMediaPlayer 之外,Qt 6 還具有跨平臺(tái)支持,可以使用QAudioDecoder類將音頻文件解碼為原始 PCM 數(shù)據(jù)。該功能存在于 Qt 5 的某些平臺(tái)上,但并未在所有平臺(tái)上實(shí)現(xiàn)。
用 C++ 實(shí)現(xiàn)的最小媒體播放器如下所示:
//widget示例 QMediaPlayer player; QAudioOutput audioOutput; // chooses the default audio routing player.setAudioOutput(audioOutput); QVideoWidget *videoOutput = new QVideoWidget; player.setVideoOutput(videoOutput); player.setSource(“mymediafile.mp4”); player.play(); //qml示例 Window { MediaPlayer { id: mediaPlayer audioOutput: AudioOutput {} // use default audio routing videoOutput: videoOutput source: “mymediafile.mp4” } VideoOutput { id: videoOutput anchors.fill: parent } Component.onCompleted: mediaPlayer.play() }
捕獲和記錄功能在 Qt 6 中經(jīng)歷了最大的 API 更改。在 Qt 5 中,您必須神奇地將相機(jī)連接到記錄器,而 Qt 6 現(xiàn)在帶有更明確的 API 來(lái)設(shè)置捕獲管道。
Qt 6 中的中心類是QMediaCaptureSession。錄制音頻/視頻或捕獲圖像時(shí)始終需要此類。要設(shè)置錄音會(huì)話,您可以使用setAudioInput()將音頻輸入連接到會(huì)話,如果您想從相機(jī)錄制,請(qǐng)使用setCamera()將相機(jī)連接到它。
這里要注意的一件事是QAudioInput和QCamera充當(dāng)兩個(gè)輸入通道。使用QAudioInput::setDevice()或QCamera::setCameraDevice()選擇要使用的物理設(shè)備。選擇設(shè)備后,QAudioInput和QCamera允許您更改該設(shè)備的屬性,例如設(shè)置音量或相機(jī)的分辨率和幀速率。
QMediaCaptureSession允許將音頻和視頻輸出連接到它以進(jìn)行預(yù)覽和監(jiān)視。要拍攝靜止圖像,請(qǐng)使用setImageCapture()將QImageCapture對(duì)象連接到它。
要錄制音頻和視頻,請(qǐng)將QMediaRecorder連接到會(huì)話。QMediaRecorder允許通過(guò)指定一個(gè)請(qǐng)求記錄特定的文件格式和編解碼器QMediaFormat。在 Qt 6 中,我們沒(méi)有在此處提供跨平臺(tái) API,使用不同格式和編解碼器的枚舉。
由于編解碼器支持取決于平臺(tái),您還可以查詢QMediaFormat以獲取支持的文件格式和編解碼器集。后端也將始終嘗試將請(qǐng)求的格式解析為支持的格式。
因此,例如,如果您請(qǐng)求帶有 H265 視頻編解碼器的 MPEG4 文件,但不支持 H265,則它可能會(huì)回退到 H264 或其他受支持的編解碼器。
除了設(shè)置格式之外,您還可以在編碼器上設(shè)置其他屬性,例如質(zhì)量、分辨率和幀率。
QMediaCaptureSession session; QCamera camera; session.addCamera(camera); QImageCapture imageCapture; session.addImageCapture(imageCapture); camera.start(); imageCapture.captureToFile(“myimage.jpg”); QMediaRecorder recorder; session.setRecorder(recorder); QMediaFormat format(QMediaFormat::MPEG4); format.setAudioCodec(QMediaFormat::AudioCodec::AAC); format.setVideoCodec(QMediaFormat::VideoCodec::H265); recorder.setMediaFormat(format); recorder.setOutputLocation(“mycapture.mp4”); recorder.record();
在 6.2 之后,我們將研究待辦事項(xiàng)中的幾個(gè)項(xiàng)目。這些想法的優(yōu)先級(jí)尚未完成,關(guān)于您的需求的反饋將在這里幫助我們。我們的想法包括:
然而,目前,我們的大部分工作都集中在錯(cuò)誤修復(fù)和為 Qt 6.2 做好一切準(zhǔn)備上。由于較大的變化,在實(shí)現(xiàn)中仍然存在許多粗糙的邊緣,并且某些功能可能存在錯(cuò)誤或缺少功能。我們的目標(biāo)是在 6.2.0 中修復(fù)這些問(wèn)題,但需要您的反饋才能這樣做。
最近發(fā)布的 Qt 6.2 測(cè)試版確實(shí)有 Qt 多媒體的二進(jìn)制文件,您可以輕松地嘗試和使用它們。我們非常感謝任何反饋,無(wú)論是在博客上還是在 bugreports.qt.io。
到此這篇關(guān)于Qt6中重大改變的QtMultimedia多媒體模塊實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Qt6 QtMultimedia多媒體模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
標(biāo)簽:呼倫貝爾 烏魯木齊 銀川 湘西 呼倫貝爾 安慶 三亞 葫蘆島
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Qt6中重大改變的QtMultimedia多媒體模塊實(shí)現(xiàn)》,本文關(guān)鍵詞 Qt6,中,重大,改,變的,QtMultimedia,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。