整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          html多頁面實現(xiàn)背景音樂的連續(xù)播放,簡單處理筆記

          在多個HTML頁面之間切換時持續(xù)播放背景音樂,可以使用JavaScript和localStorage來實現(xiàn)。這里有一個簡單的實現(xiàn)方案:

          1. 創(chuàng)建一個隱藏的音頻播放器: 在每個HTML頁面的<body>標簽內(nèi)添加一個隱藏的音頻標簽,并設(shè)置自動播放和循環(huán)播放屬性。
          1. 使用JavaScript控制音頻狀態(tài): 當(dāng)頁面加載時,檢查localStorage中是否有音樂正在播放的狀態(tài),如果有,則恢復(fù)播放。同時,當(dāng)頁面離開時,記錄音樂的播放狀態(tài)到localStorage。

          下面是一個簡化版的多頁面背景音樂連續(xù)播放的Demo示例。這個例子包含兩個HTML文件:index.html 和 page2.html。請確保你有相應(yīng)的音頻文件(如music.mp3)并放置在與HTML文件相同的目錄下。

          index.html

          <!DOCTYPE html>
          <html lang="en">
              <head>
                  <meta charset="UTF-8" />
                  <title>首頁</title>
                  <style>
                      #backgroundMusic {
                          display: none;
                      }
                  </style>
              </head>
              <body>
                  <h1>首頁</h1>
                  <p>這是首頁,背景音樂會持續(xù)播放。</p>
                  <a href="page2.html">前往第二頁</a>
          
                  <audio controls id="backgroundMusic" loop>
                      <source src="https://img.mtsws.cn/LightPicture/2023/08/45f935a39d0189c0.mp3" type="audio/mpeg" />
                      您的瀏覽器不支持 audio 元素。
                  </audio>
          
                  <script>
                      document.addEventListener('DOMContentLoaded', function () {
                          var audio = document.getElementById('backgroundMusic')
                          setupMusic(audio)
                      })
          
                      function setupMusic(audio) {
                          var musicTime = parseFloat(localStorage.getItem('musicTime')) || 0
                          var isPlaying = localStorage.getItem('musicPlaying') === 'true'
          
                          audio.currentTime = musicTime
                          if (isPlaying) {
                              audio.play().catch(function (error) {
                                  console.error('自動播放被阻止:', error)
                              })
                          }
          
                          audio.onplay = function () {
                              localStorage.setItem('musicPlaying', true)
                          }
                          audio.onpause = function () {
                              localStorage.setItem('musicPlaying', false)
                          }
                          audio.ontimeupdate = function () {
                              localStorage.setItem('musicTime', audio.currentTime)
                          }
                      }
                  </script>
              </body>
          </html>
          

          page2.html

          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <title>第二頁</title>
              <style>
                  #backgroundMusic { display: none; }
              </style>
          </head>
          <body>
          
          <h1>第二頁</h1>
          <p>切換到第二頁,背景音樂仍然連續(xù)播放。</p>
          <a href="index.html">返回首頁</a>
          
          <audio id="backgroundMusic" src="music.mp3" loop></audio>
          
          <script>
              document.addEventListener('DOMContentLoaded', function() {
                  var audio = document.getElementById('backgroundMusic');
                  setupMusic(audio);
              });
          
              // 與index.html中相同的setupMusic函數(shù),確保音樂播放邏輯一致
              function setupMusic(audio) {/*...函數(shù)內(nèi)容與上文相同...*/}
          </script>
          </body>
          </html>

          在這個示例中,index.html 和 page2.html 都包含了相同的JavaScript邏輯來管理背景音樂的播放狀態(tài)和時間。當(dāng)用戶在頁面間導(dǎo)航時,音樂將會無縫繼續(xù)播放,而不是重新開始。請根據(jù)實際需要調(diào)整音頻文件路徑和其他細節(jié)。

          網(wǎng)頁中添加視頻、聲音、動畫等,可以增強用戶體驗。在HTML5之前,為網(wǎng)頁添加多媒體的唯一辦法,就是使用第三方的插件(如,Adobe Flash等)。

          HTML5中,提供了對多媒體的原生支持,只需通過 video 元素,就可以向網(wǎng)頁嵌入視頻、電影或音頻資源,通過 audio 元素向網(wǎng)頁嵌入音頻資源,省時省力。

          HTML中嵌入視頻和音頻代碼

          一、視頻

          在HTML5時代,在網(wǎng)頁中嵌入視頻非常簡單,只需要一個 video 元素,并設(shè)置它的 src 屬性,使其鏈接一個視頻地址就可以完全搞定了,這個太esay了

          <video src="media/vedio.mp4"></video>

          把這個網(wǎng)站在IE8中打開一看,網(wǎng)站上除了一片空白外,什么也沒有,這是為什么呢?

          原來 video 是HTML5最新引入的元素,并不是所有瀏覽器都支持它,IE8及以下版本都無法識別 video 標簽。如果瀏覽器不識別 video標簽,則會忽略它,當(dāng)做什么都沒有。這就是網(wǎng)站上一片空白的原因。

          這個問題好解決,只需在 video 標簽之間放置文本信息,不支持 video 標簽的老瀏覽器,會顯示 video 標簽之間的文本信息,以提示用戶瀏覽器不支持 video,就這么簡單!

          <video src="media/vedio.mp4">

          你的瀏覽器已經(jīng)老掉牙了,不支持video,還不趕快使用現(xiàn)代瀏覽器O(∩_∩)O~!

          </video>

          在IE8上打開一看,確實顯示了提示文本,這下好多了,至少用戶知道自己的瀏覽器不能播放視頻,該換瀏覽器了。

          下載了Opera瀏覽器的最新版本25.0,打開一看,怎么還是一片空白外!Opera瀏覽器明明是支持video標簽的,那又是為什么呢?

          這個就得從視頻的編碼格式說起了。video 元素支持三種視頻格式:Ogg、MP4、WebM。

          Ogg是帶有Theora視頻編碼和Vorbis音頻編碼的文件,后綴名為 .ogg;MP4是帶有H.264視頻編碼和AAC音頻編碼的MP4文件,后綴名為 .mp4;WebM是VP8視頻編碼和Vorbis音頻編碼的文件,后綴名為 .webm。

          這個Opera瀏覽器呢,它可以支持ogg,但不支持mp4。由于Opera支持video標簽,故video標簽之間的文本信息沒有顯示出來,但它不支持ogg,所以就不進行播放,最終導(dǎo)致頁面出現(xiàn)一片空白。這下可怎么辦呢?

          其實辦法有的是,我們可以從網(wǎng)上下載一副圖像,放到視頻播放窗口,如果視頻無法播放,就顯示這張圖片,是不是更好呢?從網(wǎng)上下載一張美女圖片,干脆叫beauty.jpg吧。那這個圖像怎么添加到視頻窗口呢?

          video標簽有個poster 屬性,就是專門在視頻窗口放置圖片的。poster是一個video的占位符,無論什么情況下,只要視頻還沒有播放(視頻下載過程中、視頻不存在、不支持該視頻類型、用戶點擊播放按鈕前),就會顯示該圖像,可以看做是視頻播放之前插入的宣傳畫或海報。

          <video src="media/vedio.mp4" poster = "img/beauty.jpg">

          你的瀏覽器已經(jīng)老掉牙了,不支持video,還不趕快使用現(xiàn)代瀏覽器O(∩_∩)O~!

          </video>

          在Opera瀏覽器上刷新一下,真的有一個美女沖著自己微笑呢。雖然視頻沒有播放出來,這回心情卻是好多了。

          那我可不能一天到晚只看美女呀,視頻還是還是要想辦法播放出來的。既然Opera瀏覽器不支持mp4,我們就換成需要ogg吧,這樣就肯定沒問題了。

          我想了想,這個辦法不好,萬一某個瀏覽器只支持支持ogg,不支持mp4呢。這年頭,什么都缺,就是不缺點子,隨便在網(wǎng)上一搜,辦法就有了。

          在 video 元素中添加 source 元素,就可以解決這個問題。在source 元素中,通過 src 屬性指定視頻的地址,通過 type 屬性指定視頻的類型,以幫助瀏覽器決定是否能播放該視頻。并且,在 video 元素中可以添加任意多個source 元素,讓不同的 source 元素鏈接到不同的視頻文件。

          這樣的話,當(dāng)瀏覽器發(fā)現(xiàn) video 元素時,首先會查看它本身是否定義了 src 屬性。如果沒有,就會檢查 source 元素。瀏覽器會逐個查看這些視頻源,直到找到一個可以播放的視頻。一旦找到,就會播放它并忽略其他的視頻源。我們干脆添加兩個source,一個是mp4,一個是ogg,這下視頻是一定能播放出來了。

          <video poster = "img/beauty.jpg">

          <source src="media/vedio.mp4" type="video/mp4">

          <source src="media/vedio.ogg" type="video/ogg">

          你的瀏覽器已經(jīng)老掉牙了,不支持video,還不趕快使用現(xiàn)代瀏覽器O(∩_∩)O~!

          </video>

          在Opera瀏覽器上又刷新一下,只有美女沖著我微笑,視頻還是沒播放出來。唉,太粗心了,忘記添加播放視頻的控件了。

          在video標簽中,通過添加controls 屬性來為視頻添加播放控件,方便用戶執(zhí)行播放、暫停操作和音量控制。

          <video poster = "img/beauty.jpg" controls>

          (此處略去500字…)

          </video>

          在Opera瀏覽器上又刷新一下,效果真的不一樣,這次不僅看到美女,還看到了視頻控件。用鼠標猛戳一下那個播放按鈕,哈哈,不錯,真的聽到美妙的旋律。我們的ogg文件,終于播放出來了,讓我們好好享受一下吧O(∩_∩)O。

          聽了一會,忽然一想,不對呀,我剛才點了播放按鈕后,等了半天才聽到聲音。能不能我一點播放按鈕,就立即播放呢?

          原來視頻也是需要下載緩存的,點擊播放按鈕后,首先緩存,然后才播放的。那能不能在頁面加載的同時就緩存呢。這樣,用戶點擊播放后,就不必等待了。

          這當(dāng)然可以,在video標簽中,通過添加preload屬性來為視頻添加預(yù)加載功能,在頁面加載的同時加載視頻。

          <video poster = "img/beauty.jpg" controls preload>

          (此處略去500字…)

          </video>

          關(guān)于 preload 屬性,稍微再啰嗦一點,就是可以把它設(shè)置為 metadata,讓瀏覽器僅僅預(yù)加載視頻的基本信息,如尺寸、時長、以及一些關(guān)鍵的幀。這樣的話,在開始播放之前,瀏覽器可以提前計算視頻的顯示尺寸。

          既然一切都OK了!讓我們看看mp4是不是能正常播放。下載最新版的Google Chrome 38.0瀏覽器,打開網(wǎng)頁,猛戳一下播放按鈕。

          等等~,等等~,不對,怎么只有聲音沒有畫面,明明是mp4格式的文件呀?使用暴風(fēng)影音試了一下,是有畫面的呀!

          辛辛苦苦又在網(wǎng)上搜了一番,花了整整586秒,終于找到了答案。mp4視頻需要h.264編碼格式才會有圖像的。

          找了一個 h.264 編碼格式的 mp4 試了一下,不錯,確實有圖像了!看了半天,原來是一部老外的電影,嘰里咕嚕一陣,一句話也沒聽懂。那O(∩_∩)O~,能否提供中文字幕呢,這樣就不必費老大勁去聽了!

          HTML5中,通過在video元素添加track元素為視頻添加字幕。字幕文件有兩種格式:WebVTT和TTML。WebVTT是Web視頻文本軌跡(Web Video Text Track),是UTF-8編碼格式的文本文件;TTML是時序文本標記語言(Timed Text Markup Language),是XML格式的文件。兩種文件的具體格式,已經(jīng)超出我們的討論范圍。

          video元素支持添加多個track元素,不同的track元素鏈接到不同的字幕文件。用戶可以在各個字幕間進行切換。

          <video poster = "img/beauty.jpg" controls preload>

          <track src="en_track.vtt" kind="subtitles" srclang="en" label="English" default>

          <track src="cn_track.vtt" kind="captions" srclang="zh" label="簡體中文">

          </video>

          track元素中,src屬性指定字幕文件的URL;srclang屬性字幕文件的語言類型,若kind 屬性值是 "subtitles" 時,該屬性必需的;label 屬性指定字幕標簽,每個字幕元素必需設(shè)置一個唯一不重復(fù)的標簽,切換字幕時,會顯示標簽的名稱;kind指定字幕內(nèi)容類型,只能是subtitles、captions、descriptions、chapters、metadata 之一;default屬性指定是否是默認字幕,如果一個都沒指定,將不會自動顯示字幕。

          除了字幕外,我還希望對視頻進行過多的控制,比如讓視頻自動播放、循環(huán)播放、默認靜音,以及視頻窗口的尺寸等等,這些都能做到嗎?

          這已經(jīng)不是什么事了,video 元素已經(jīng)提供了相關(guān)屬性,根據(jù)需要設(shè)置相應(yīng)的屬性就可以了。這些屬性及含義見表 23:

          HTML中嵌入視頻和音頻代碼

          哦,原來這么簡單呀!那就到此為止吧,網(wǎng)頁中嵌入視頻的全部代碼都在這里,就打包給你吧!

          <video width="300" poster="img/beauty.jpg" controls preload autoplay loop muted>

          <source src="media/vedio.mp4">

          <source src="media/vedio.ogg">

          <track src="en_track.vtt" kind="subtitles" srclang="en" label="English" default>

          <track src="cn_track.vtt" kind="captions" srclang="zh" label="簡體中文">

          你的瀏覽器已經(jīng)老掉牙了,不支持video,還不趕快使用現(xiàn)代瀏覽器O(∩_∩)O~!

          </video>

          睜大眼睛一看,卻只有7行代碼。然而,就這區(qū)區(qū)7行代碼,可把他折磨得夠嗆。

          看著這一切都全部搞定,他仰望著天空,長長呼了一口氣,顯得是那么的放松,那么的愜意。此時,他閉上眼睛,在自己的夢幻世界里遨游!


          二、音頻

          有了在網(wǎng)頁中嵌入視頻的經(jīng)歷,要在網(wǎng)頁中嵌入音頻,那簡直就是小菜一碟了。只要把vedio元素換成 audio 元素,就全部搞定。

          但需要了解的是,audio 所支持的音頻格式只有Ogg Vorbis、mp3 和 wav。還要知道,由于音頻沒有畫面,也就沒有 width、height、poster 屬性,而其他屬性都支持,并且跟視頻的含義相同。

          網(wǎng)頁中嵌入音頻的代碼如下:

          <audio controls preload autoplay loop muted>

          <source src="media/audio.mp3">

          <source src="media/audio.wav">

          <source src="media/audio.ogg">

          你的瀏覽器已經(jīng)老掉牙了,不支持audio,還不趕快使用現(xiàn)代瀏覽器O(∩_∩)O~!

          </audio>

          放內(nèi)存中的音樂

              QFile read("./music/Nevada.mp3");
              if (!read.open(QIODevice::ReadOnly))
              {
                  qDebug() << "文件打開失敗,請重試~";
              }
              //下面用的對象,必須動態(tài)申請,不然構(gòu)造函數(shù)執(zhí)行完畢,局部變量內(nèi)存會被釋放
              QByteArray *data = new QByteArray(read.readAll());
              read.close();
          
              QBuffer *buffer = new QBuffer(data,this);
              if (!buffer->open(QIODevice::ReadWrite))
              {
                  qDebug() << "buffer error";
              }
              //qDebug() << data;
              QMediaPlayer *player = new QMediaPlayer(this);
              player->setMedia(QMediaContent(),buffer);
              player->play();

          播放內(nèi)存中的視頻

              QMediaPlayer *player = new QMediaPlayer(this);
              player->setMedia(QUrl("./music/MMD.mp4"));
              player->play();
          ?
              QVideoWidget* videowidget = new QVideoWidget(this);
              player->setVideoOutput(videowidget);

          vs中如果提示編譯器堆空間不足,則打開vcxproj工程文件,在PropertyGroup中添加如下代碼

          <PropertyGroup Label="Globals">
              <!-- 資源文件加載,防止編譯器堆空間不足 -->
               <PreferredToolArchitecture>x64</PreferredToolArchitecture> 
          </PropertyGroup>

          【領(lǐng)QT開發(fā)教程學(xué)習(xí)資料,點擊下方鏈接免費領(lǐng)取↓↓,先碼住不迷路~】

          點擊→領(lǐng)取「鏈接」

          音視頻播放

          播放音頻

          在Qt中,要想使計算機發(fā)出響聲,最簡單的方法是調(diào)用QApplication : : beep()靜態(tài)函數(shù)。而Qt Multimedia模塊中提供了多個類來實現(xiàn)不同層次的音頻輸入,輸出和處理。

          QSound

          QSound類提供了播放.wav聲音文件的方法。

          Qt 提供了 GUI 應(yīng)用程序中最常用的音頻操作:異步播放聲音文件。 使用靜態(tài) play() 函數(shù)最容易做到這一點:

           QSound::play("mysounds/bells.wav");

          或者,首先從聲音文件創(chuàng)建一個 QSound 對象,然后調(diào)用 play() 槽:

            QSound bells("mysounds/bells.wav");
            bells.play();

          在這兩種情況下,文件可能是本地文件或資源中的文件。

          一旦創(chuàng)建了 QSound 對象,就可以查詢它的 fileName() 和 loops() 總數(shù)(即聲音播放的次數(shù))。 可以使用 setLoops() 函數(shù)更改重復(fù)次數(shù)。 播放聲音時,loopsRemaining() 函數(shù)返回剩余的重復(fù)次數(shù)。 使用 isFinished() 函數(shù)來確定聲音是否播放完畢。

          使用 QSound 對象播放的聲音可能會比靜態(tài) play() 函數(shù)使用更多的內(nèi)存,但它也可能播放得更快(取決于底層平臺的音頻設(shè)施)。

          如果您需要更好地控制播放聲音,請考慮 QSoundEffect 或 QAudioOutput 類。

          Public Functions

          QSound(const QString &filename, QObject *parent = nullptr)
          virtual ~QSound()
          QString fileName() const
          bool isFinished() const
          int loops() const
          int loopsRemaining() const
          void setLoops(int number)

          Slots

          void play()
          void stop()

          Static Public Members

          void play(const QString &filename)

          QSoundEffect

          QSoundEffect類提供了一種播放低延遲聲音效果的方法 。

          這個類允許你以較低的延遲方式播放未壓縮的音頻文件(通常是WAV文件),并且適用于“反饋”類型的聲音,以響應(yīng)用戶的動作(例如虛擬鍵盤聲音,彈出對話框的正面或負面反饋,或游戲聲音)。 如果低延遲不重要,可以考慮使用QMediaPlayer類,因為它支持更廣泛的媒體格式,并且資源消耗更少。

          看個例子:

          QSoundEffect effect;
          effect.setSource(QUrl::fromLocalFile("F:/MyCode/QtObjectCode/QtCourse/soundeffect/video_call.wav"));
          effect.setLoopCount(QSoundEffect::Infinite);
          effect.setVolume(0.8f);
          effect.play();

          通常應(yīng)該重用音效,這樣可以提前完成所有解析和準備工作,并且只在必要時觸發(fā)。 這有助于降低延遲音頻播放。

          class MyGame
          {
          public:
            MyGame(): m_videoCall(this)
            {
                m_videoCall.setSource(QUrl::fromLocalFile("video_call.wav"));
                m_videoCall.setVolume(0.25f);
          ?
                // Set up click handling etc.
                connect(clickSource, &QPushButton::clicked, &m_videoCall, &QSoundEffect::play);
            }
          private:
            QSoundEffect m_videoCall;
          }

          由于QSoundEffect需要更多的資源來實現(xiàn)較低的延遲播放,平臺可能會限制同時播放聲音效果的數(shù)量。

          【領(lǐng)QT開發(fā)教程學(xué)習(xí)資料,點擊下方鏈接免費領(lǐng)取↓↓,先碼住不迷路~】

          點擊→領(lǐng)取「鏈接」

          Public Functions

          • 設(shè)置
          //設(shè)置源(wav文件路徑)
          void setSource(const QUrl &url)
          //設(shè)置循環(huán)次數(shù)  
          void setLoopCount(int loopCount)
          //設(shè)置靜音
          void setMuted(bool muted)
          //設(shè)置音量0~1之間
          void setVolume(qreal volume)
          • 判斷
          //音效是否加載完畢
          bool isLoaded() const
          //是否是靜音    
          bool isMuted() const
          //是否正在播放    
          bool isPlaying() const

          Slots

          void play() //播放
          void stop() //停止

          Signals

          void categoryChanged()
          void loadedChanged()
          void loopCountChanged()
          void loopsRemainingChanged()
          void mutedChanged()
          void playingChanged()
          void sourceChanged()
          void statusChanged()
          void volumeChanged()

          枚舉

          QSoundEffect::Status

          枚舉

          描述

          QSoundEffect::Null

          未設(shè)置源或源為空。

          QSoundEffect::Loading

          SoundEffect 正在嘗試加載源。

          QSoundEffect::Ready

          源已加載并準備好播放。

          QSoundEffect::Error

          運行過程中出現(xiàn)錯誤,例如加載源失敗。

          QMediaPlayer

          QMediaPlayer類是一個高級媒體播放類。 它可以用來播放歌曲、電影和網(wǎng)絡(luò)廣播等內(nèi)容。 要播放的內(nèi)容被指定為QMediaContent對象,可以將其視為附加了附加信息的主要或規(guī)范URL。 當(dāng)提供QMediaContent時,可以開始播放。

          QMediaPlayer player;
          player.setMedia(QUrl::fromLocalFile("F:/MyCode/QtObjectCode/QtCourse/soundeffect/That-Girl.mp3"));
          player.setVolume(50);
          player.play();

          QVideoWidget可以與QMediaPlayer一起用于視頻渲染,QMediaPlaylist用于訪問播放列表功能。

          QVideoWidget wid;
          wid.show();
          ?
          QMediaPlaylist playList;
          playList.addMedia(QUrl::fromLocalFile("F:/MyCode/QtObjectCode/QtCourse/soundeffect/That-Girl.mp3"));
          playList.addMedia(QUrl::fromLocalFile("F:/MyCode/QtObjectCode/QtCourse/soundeffect/干坤坤.mp4"));
          ?
          QMediaPlayer player;
          player.setPlaylist(&playList);
          //player.setMedia(QUrl::fromLocalFile("F:/MyCode/QtObjectCode/QtCourse/soundeffect/That-Girl.mp3"));
          player.setVolume(50);
          playList.next();
          player.setVideoOutput(&wid);
          player.play();

          Public Functions

          //該值是當(dāng)前媒體的總播放時間,以毫秒為單位。 該值可能在QMediaPlayer對象的生命周期中發(fā)生變化,并且可能在初始回放開始時不可用,請連接到durationChanged()信號來接收狀態(tài)通知。  
          qint64 duration() const
          //將QVideoWidget視頻輸出附加到媒體播放器。  
          void setVideoOutput(QVideoWidget *output)
          void setVideoOutput(QGraphicsVideoItem *output)
          void setVideoOutput(QAbstractVideoSurface *surface)  

          Public Slots

          //暫停播放當(dāng)前源
          void pause()    
          //開始或恢復(fù)播放當(dāng)前源    
          void play()
          //設(shè)置當(dāng)前媒體源。 使用mediaStatusChanged()和error()信號,以便在加載媒體和加載過程中發(fā)生錯誤時得到通知      
          void setMedia(const QMediaContent &media, QIODevice *stream = nullptr)
          //設(shè)置靜音    
          void setMuted(bool muted)
          //設(shè)置倍速播放
          void setPlaybackRate(qreal rate)
          //設(shè)置播放列表    
          void setPlaylist(QMediaPlaylist *playlist)
          //設(shè)置播放位置,以媒體開始后的毫秒數(shù)為單位。 位置的周期性變化將用信號positionChanged()表示,更新間隔可以用QMediaObject的方法setNotifyInterval()設(shè)置。    
          void setPosition(qint64 position)
          //此屬性保存當(dāng)前播放音量。  播放音量是線性縮放的,從0(靜音)到100(全音量)。默認為100      
          void setVolume(int volume)
          //停止播放,并將播放位置重置到開始    
          void stop()

          Signals

          //表示當(dāng)前播放內(nèi)容已更改為media。  
          void currentMediaChanged(const QMediaContent &media)
          //表示內(nèi)容的持續(xù)時間已更改為持續(xù)時間,以毫秒表示。  
          void durationChanged(qint64 duration)    
          //產(chǎn)生了錯誤
          void error(QMediaPlayer::Error error)
          //表示媒體來源已轉(zhuǎn)變?yōu)閙edia。      
          void mediaChanged(const QMediaContent &media)
          //表示當(dāng)前媒體的狀態(tài)已經(jīng)改變    
          void mediaStatusChanged(QMediaPlayer::MediaStatus status)
          //靜音狀態(tài)改變  
          void mutedChanged(bool muted)
          //播放速率改變
          void playbackRateChanged(qreal rate)
          //播放位置改變    
          void positionChanged(qint64 position)
          //表示播放器對象的狀態(tài)已經(jīng)改變。  
          void stateChanged(QMediaPlayer::State state)
          //音量改變
          void volumeChanged(int volume)

          枚舉

          (enum QMediaPlayer::Error)媒體播放器產(chǎn)生的具體錯誤。

          枚舉

          描述

          MediaPlayer::NoError

          沒有錯誤發(fā)生

          QMediaPlayer::ResourceError

          無法解析媒體源

          QMediaPlayer::FormatError

          媒體資源的格式不受(完全)支持。 重新播放是可能的,但沒有音頻或視頻組件。

          QMediaPlayer::NetworkError

          網(wǎng)絡(luò)錯誤

          QMediaPlayer::AccessDeniedError

          沒有播放媒體資源的適當(dāng)權(quán)限。

          QMediaPlayer::ServiceMissingError

          找不到有效的播放服務(wù),無法繼續(xù)播放。

          (enum QMediaPlayer::Flag)播放標志。

          枚舉

          描述

          QMediaPlayer::LowLatency

          該播放器預(yù)計將用于簡單的音頻格式,播放沒有明顯的延遲。 這種回放服務(wù)可以用于蜂鳴聲、鈴聲等。

          QMediaPlayer::StreamPlayback

          該播放器預(yù)計將播放基于QIODevice的流。 如果傳遞給QMediaPlayer構(gòu)造器,將選擇支持流回放的服務(wù)。

          QMediaPlayer::VideoSurface

          期望播放器能夠呈現(xiàn)為QAbstractVideoSurface輸出。

          (enum QMediaPlayer::MediaStatus)定義媒體播放器當(dāng)前媒體的狀態(tài)。

          枚舉

          描述

          QMediaPlayer::UnknownMediaStatus

          無法確定媒體的狀態(tài)。

          QMediaPlayer::NoMedia

          沒有當(dāng)前的媒體。 播放器處于停止?fàn)顟B(tài)。

          QMediaPlayer::LoadingMedia

          當(dāng)前媒體正在加載中。 播放器可能處于任何狀態(tài)。

          QMediaPlayer::LoadedMedia

          已加載當(dāng)前媒體。 播放器處于停止?fàn)顟B(tài)。

          QMediaPlayer::StalledMedia

          由于緩沖不足或其他一些臨時中斷,當(dāng)前媒體的播放已停止。 播放器處于PlayingState或PausedState

          QMediaPlayer::BufferingMedia

          播放器正在緩沖數(shù)據(jù),但緩沖了足夠的數(shù)據(jù)以供播放。 播放器處于PlayingState或PausedState。

          QMediaPlayer::BufferedMedia

          播放器已經(jīng)完全緩沖了當(dāng)前的媒體。 播放器處于PlayingState或PausedState。

          QMediaPlayer::EndOfMedia

          播放已經(jīng)結(jié)束。 播放器處于停止?fàn)顟B(tài)。

          QMediaPlayer::InvalidMedia

          當(dāng)前媒體無法播放。 播放器處于停止?fàn)顟B(tài)。

          (enum QMediaPlayer::State)媒體播放器的當(dāng)前狀態(tài)。

          枚舉

          描述

          QMediaPlayer::StoppedState

          播放停止?fàn)顟B(tài)

          QMediaPlayer::PlayingState

          播放進行狀態(tài)

          QMediaPlayer::PausedState

          播放暫停狀態(tài)

          QMediaPlaylist

          QMediaPlaylist類提供了要播放的媒體內(nèi)容列表。

          QMediaPlaylist旨在與其他媒體對象一起使用,如QMediaPlayer。

          QMediaPlaylist允許訪問服務(wù)固有的播放列表功能(如果可用的話),否則它提供本地內(nèi)存播放列表實現(xiàn)。

            playlist = new QMediaPlaylist;
            playlist->addMedia(QUrl("http://example.com/movie1.mp4"));
            playlist->addMedia(QUrl("http://example.com/movie2.mp4"));
            playlist->addMedia(QUrl("http://example.com/movie3.mp4"));
            playlist->setCurrentIndex(1);
          ?
            player = new QMediaPlayer;
            player->setPlaylist(playlist);
          ?
            videoWidget = new QVideoWidget;
            player->setVideoOutput(videoWidget);
            videoWidget->show();
          ?
            player->play();

          根據(jù)播放列表源代碼的實現(xiàn),大多數(shù)播放列表更改操作可以是異步的。

          【領(lǐng)QT開發(fā)教程學(xué)習(xí)資料,點擊下方鏈接免費領(lǐng)取↓↓,先碼住不迷路~】

          點擊→領(lǐng)取「鏈接」

          Public Functions

          • 構(gòu)造與析構(gòu)
          QMediaPlaylist(QObject *parent = nullptr)
          virtual ~QMediaPlaylist()
          • 添加/移除/清空媒體
          bool addMedia(const QMediaContent &content)
          bool addMedia(const QList<QMediaContent> &items)
              
          bool insertMedia(int pos, const QMediaContent &content)
          bool insertMedia(int pos, const QList<QMediaContent> &items)    
              
          bool removeMedia(int pos)
          bool removeMedia(int start, int end)
          
          bool clear()
          • 保存/加載播放列表
          bool save(const QUrl &location, const char *format = nullptr)
          bool save(QIODevice *device, const char *format)
          
          void load(const QNetworkRequest &request, const char *format = nullptr)
          void load(const QUrl &location, const char *format = nullptr)
          void load(QIODevice *device, const char *format = nullptr)
          • 獲取播放內(nèi)容
          int currentIndex() const
          QMediaContent currentMedia() const
          
          QMediaContent media(int index) const
          int nextIndex(int steps = 1) const 
          int previousIndex(int steps = 1) const
              
          int mediaCount() const
          • 操作播放列表
          bool moveMedia(int from, int to)
          void setPlaybackMode(QMediaPlaylist::PlaybackMode mode)
          • 其他
          QMediaPlaylist::Error error() const
          QString errorString() const
              
          bool isEmpty() const
          bool isReadOnly() const

          slots

          void next()
          void previous()
          void setCurrentIndex(int playlistPosition)
          void shuffle()

          signals

          void currentIndexChanged(int position)
          void currentMediaChanged(const QMediaContent &content)
          void loadFailed()
          void loaded()
          void mediaAboutToBeInserted(int start, int end)
          void mediaAboutToBeRemoved(int start, int end)
          void mediaChanged(int start, int end)
          void mediaInserted(int start, int end)
          void mediaRemoved(int start, int end)
          void playbackModeChanged(QMediaPlaylist::PlaybackMode mode)

          枚舉

          (enum QMediaPlaylist::Error)QMediaPlaylist錯誤碼。

          枚舉

          描述

          QMediaPlaylist::NoError

          沒有錯誤

          QMediaPlaylist::FormatError

          格式錯誤

          QMediaPlaylist::FormatNotSupportedError

          格式不支持

          QMediaPlaylist::NetworkError

          網(wǎng)絡(luò)錯誤

          QMediaPlaylist::AccessDeniedError

          訪問錯誤(拒絕訪問)

          (enum QMediaPlaylist::PlaybackMode)描述了播放列表中的播放順序。

          枚舉

          描述

          QMediaPlaylist::CurrentItemOnce

          單曲播放一次

          QMediaPlaylist::CurrentItemInLoop

          單曲循環(huán)

          QMediaPlaylist::Sequential

          順序播放(列表播放完結(jié)束)

          QMediaPlaylist::Loop

          列表循環(huán)(列表播放完,從頭開始繼續(xù)播放)

          QMediaPlaylist::Random

          隨機播放

          QMediaContent

          QMediaContent類提供對與媒體內(nèi)容相關(guān)的資源的訪問。

          QMediaContent在多媒體框架內(nèi)用作媒體內(nèi)容的邏輯句柄。 一個QMediaContent對象包含一個QNetworkRequest,它提供了內(nèi)容的URL。

          非空QMediaContent將始終具有對通過request()方法可用的內(nèi)容的引用。

          另外,QMediaContent可以表示播放列表,并包含指向有效QMediaPlaylist對象的指針。 在這種情況下URL是可選的,可以是空的,也可以指向播放列表的URL。

          Public Functions

          QMediaContent(QMediaPlaylist *playlist, const QUrl &contentUrl = QUrl(), bool takeOwnership = false)
          QMediaContent(const QMediaContent &other)
          QMediaContent(const QNetworkRequest &request)
          QMediaContent(const QUrl &url)
          QMediaContent()
          QMediaContent &operator=(const QMediaContent &other)
          ~QMediaContent()
          bool isNull() const
          QMediaPlaylist *playlist() const
          QNetworkRequest request() const
          bool operator!=(const QMediaContent &other) const
          bool operator==(const QMediaContent &other) const

          視頻播放

          QMediaPlayer

          QMediaPlayer類可用來播放視頻,只不過需要搭配專門的視頻顯示控件來使用。

          • 針對視頻播放的函數(shù)
          void setVideoOutput(QVideoWidget *output)
          void setVideoOutput(QGraphicsVideoItem *output)
              
          //當(dāng)前媒體的視頻是否可用,如果可用,可以使用QVideoWidget類來查看視頻。
          bool isVideoAvailable() const    

          QVideoWidget

          • 需包含模塊multimediawidgets

          QVideoWidget類提供了一個小部件,用于呈現(xiàn)由媒體對象生成的視頻。

          將 QVideoWidget 附加到 QMediaObject 允許它顯示該媒體對象的視頻或圖像輸出。 QVideoWidget 通過在其構(gòu)造函數(shù)中傳遞指向 QMediaObject 的指針附加到媒體對象,并通過銷毀 QVideoWidget 來分離。

            player = new QMediaPlayer;
          ?
            playlist = new QMediaPlaylist(player);
            playlist->addMedia(QUrl("http://example.com/myclip1.mp4"));
            playlist->addMedia(QUrl("http://example.com/myclip2.mp4"));
          ?
            videoWidget = new QVideoWidget;
            player->setVideoOutput(videoWidget);
          ?
            videoWidget->show();
            playlist->setCurrentIndex(1);
            player->play();

          注意:一次只能將一個顯示輸出附加到媒體對象。

          Public Functions

          QVideoWidget(QWidget *parent = nullptr)
          virtual ~QVideoWidget()
              
          Qt::AspectRatioMode aspectRatioMode() const
          int brightness() const      //亮度
          int contrast() const        //對比度
          int hue() const             //色調(diào)
          bool isFullScreen() const   //是否全屏
          int saturation() const      //飽和度

          Slots

          //設(shè)置視頻縮放時,寬度和高度的變化模式
          void setAspectRatioMode(Qt::AspectRatioMode mode)
          //調(diào)整顯示視頻的亮度。有效亮度值范圍在 -100 到 100 之間,默認值為 0。    
          void setBrightness(int brightness)
          //調(diào)整顯示的視頻的對比度。有效對比度值范圍在-100到100之間,默認值為0。     
          void setContrast(int contrast)
          //調(diào)整顯示視頻的色調(diào)。有效的色調(diào)值范圍在 -100 到 100 之間,默認值為 0。    
          void setHue(int hue)
          //調(diào)整顯示視頻的飽和度。 有效的飽和度值范圍在-100到100之間,默認值是0。
          void setSaturation(int saturation)    
          //設(shè)置窗口全屏顯示    
          void setFullScreen(bool fullScreen)

          Signals

          //亮度改變
          void brightnessChanged(int brightness)
          //對比度改變    
          void contrastChanged(int contrast)
          //是否全屏狀態(tài)改變    
          void fullScreenChanged(bool fullScreen)
          //飽和度改變    
          void saturationChanged(int saturation)
          //色調(diào)改變    
          void hueChanged(int hue)    

          https://www.cnblogs.com/lxuechao/p/12677357.html

          攝像機

          QCameraInfo

          QCameraInfo 類提供有關(guān)相機設(shè)備的一般信息。

          QCameraInfo 允許您查詢系統(tǒng)上當(dāng)前可用的相機設(shè)備。

          靜態(tài)函數(shù) defaultCamera() 和 availableCameras() 為您提供所有可用相機的列表。

          此示例打印所有可用相機的名稱:

           const QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
           for (const QCameraInfo &cameraInfo : cameras)
               qDebug() << cameraInfo.deviceName();

          一個QCameraInfo可以用來構(gòu)造一個QCamera。 下面的例子實例化所有可用相機設(shè)備中第一個相機設(shè)備QCamera:

            const QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
            camera = new QCamera(cameras.first());

          你也可以使用QCameraInfo來獲得一個相機設(shè)備的一般信息,例如描述,在系統(tǒng)上的物理位置,或相機傳感器的方向。

           QCamera myCamera;
            QCameraInfo cameraInfo(myCamera);
          ?
            if (cameraInfo.position() == QCamera::FrontFace)
                qDebug() << "攝像頭位于硬件系統(tǒng)的正面。";
            else if (cameraInfo.position() == QCamera::BackFace)
                qDebug() << "攝像頭位于硬件系統(tǒng)的背面。";
          ?
            qDebug() << "相機傳感器方向是 " << cameraInfo.orientation() << " 度.";

          QCamera

          QCamera類為系統(tǒng)攝像機設(shè)備提供接口。

          QCamera可以與QCameraViewfinder一起使用,用于取景器顯示,QMediaRecorder用于視頻錄制,QCameraImageCapture用于圖像拍攝。

          你可以使用QCameraInfo列出可用的相機并選擇使用哪一個。

          Public Functions

          • 設(shè)置捕獲模式
          QCamera::CaptureModes captureMode() const
          void setCaptureMode(QCamera::CaptureModes mode)
          • 設(shè)置取景器
          void setViewfinder(QVideoWidget *viewfinder)
          void setViewfinder(QGraphicsVideoItem *viewfinder)

          枚舉

          QCamera::CaptureMode

          捕獲模式

          枚舉

          描述

          QCamera::CaptureViewfinder

          取景器模式,只是簡單的顯示

          QCamera::CaptureStillImage

          幀捕獲模式,比如:拍照

          QCamera::CaptureVideo

          視頻捕獲模式,比如:錄制視頻


          主站蜘蛛池模板: 中文字幕在线看视频一区二区三区| 国产在线步兵一区二区三区| 人妻无码一区二区三区AV| 无码人妻久久一区二区三区 | 国产一区二区三区小向美奈子| 一区二区三区人妻无码| 日韩在线一区高清在线| 中字幕一区二区三区乱码 | 亚洲bt加勒比一区二区| 国产乱码精品一区二区三区四川 | 久久无码一区二区三区少妇| 无码日韩人妻av一区免费| 久久精品视频一区二区三区| 国产精品亚洲综合一区| eeuss鲁片一区二区三区| 无码乱人伦一区二区亚洲| 国产一区在线视频| 99精品国产一区二区三区| 久久se精品一区二区影院| 无码乱人伦一区二区亚洲一 | 91video国产一区| 亚洲综合av一区二区三区| 一区二区三区视频网站| 中文字幕在线播放一区| 欲色aV无码一区二区人妻| 日韩精品一区二区午夜成人版 | 国产精品va无码一区二区| 亚洲美女视频一区| 天天爽夜夜爽人人爽一区二区 | 久久久久久人妻一区精品| 麻豆一区二区三区精品视频| 亚洲.国产.欧美一区二区三区| 精品亚洲福利一区二区| 国产精品美女一区二区视频| 国产乱码精品一区二区三区四川人| 一区二区视频免费观看| 精品无码综合一区二区三区| 国产AV一区二区三区无码野战 | 国产精品亚洲专区一区| 日韩精品无码一区二区三区| 午夜无码视频一区二区三区|