Qt6 播放音视频

2024-06-13 1299阅读

一、概述

QT6相较于Qt5引入了许多新特性和改进,包括对音视频开发的增强支持。

Qt6 播放音视频
(图片来源网络,侵删)
  1. QT6中的音视频支持

    QT6提供了一套完整的音视频处理功能,这些功能被整合在QtAV项目中。QtAV是一个基于Qt的音视频处理框架,用于处理音视频播放、录制、编解码、处理等任务。QT6对QtAV进行了进一步的集成和优化,使得开发音视频应用更为方便。

  2. 音视频编解码

    QT6提供了对多种音视频编解码格式(如H.264, H.265, AAC等)的支持。这意味着开发者可以在不进行复杂的编解码配置的情况下,轻松实现音视频的编解码功能。

  3. 音视频播放和录制

    QT6支持音视频的播放和录制功能。开发者可以使用QT6提供的API实现各种音视频播放器和录制器,例如本地播放器、网络流媒体播放器和视频会议录制器等。

  4. 音视频处理

    QT6还提供了音视频处理功能,如滤镜、效果、转码等。开发者可以通过这些功能实现音视频的个性化处理,例如添加水印、调整亮度、对比度等。

  5. 跨平台支持

    QT6是一个跨平台框架,这意味着开发者可以在Windows、macOS、Linux等不同操作系统上使用QT6进行音视频开发。QT6提供了对各种操作系统音视频API的封装,使得开发者可以实现跨平台音视频应用的开发

二、音频和视频数据类型

在音视频开发中,了解和正确处理音频和视频数据类型是非常重要的。QT6为音视频开发提供了丰富的类和方法,可以帮助开发者方便地进行音视频数据的处理。

  1. 音频数据类型

    QT6中,音频数据类型主要包括以下几种,

  • QAudioFormat,表示音频数据的格式信息,如采样率、采样位数、通道数等。
  • QAudioInput,表示音频输入设备,可以通过该类实现音频数据的采集。
  • QAudioOutput,表示音频输出设备,可以通过该类实现音频数据的播放。
  • QMediaObject,表示媒体对象,可以包含音频、视频等多种类型的媒体数据。
    1. 视频数据类型

      QT6中,视频数据类型主要包括以下几种,

    • QVideoFrame,表示视频帧,包含视频图像的数据和格式信息。
    • QVideoEncoder,表示视频编码器,可以将视频数据进行编码压缩。
    • QVideoDecoder,表示视频解码器,可以将编码压缩的视频数据进行解码。
    • QMediaObject,表示媒体对象,可以包含音频、视频等多种类型的媒体数据。
      1. 音频视频数据处理

        在QT6中,音频和视频数据的处理主要通过以下几个步骤进行,

      2. 创建QAudioFormat对象,设置音频数据的格式信息,如采样率、采样位数、通道数等。
      3. 创建QAudioInput或QAudioOutput对象,与音频输入或输出设备进行交互。
      4. 读取或写入音频数据。对于音频输入,可以使用QAudioInput对象的read()方法读取音频数据;对于音频输出,可以使用QAudioOutput对象的write()方法写入音频数据。
      5. 对于视频数据,可以使用QVideoFrame对象来处理视频图像数据。可以通过QVideoFrame对象的像素访问函数来获取或设置视频图像的像素数据。
      6. 如果需要对音频或视频数据进行编码或解码,可以使用QVideoEncoder或QVideoDecoder对象。

        以上是关于音频和视频数据类型的基本介绍。在后续的章节中,我们将通过具体的实例来详细讲解如何在QT6中进行音视频数据的采集、处理和播放。

      三、播放音频

      在Qt6中,如果想播放音频,你必须在.pro文件中加上

      QT += multimedia

       如果你使用的是CMake,请在find_package里加上 Multimedia;

      find_package(Qt6 REQUIRED Widgets Multimedia)

       .h文件如下:

      #ifndef MAINWINDOW_H
      #define MAINWINDOW_H
       
      #include 
      #include 
      #include 
      QT_BEGIN_NAMESPACE
      namespace Ui { class MainWindow; }
      QT_END_NAMESPACE
       
      class MainWindow : public QMainWindow
      {
          Q_OBJECT
       
      public:
          QMediaPlayer *player = nullptr;
          QAudioOutput *audioOutput = nullptr;
          MainWindow(QWidget *parent = nullptr);
          ~MainWindow();
       
      private:
          Ui::MainWindow *ui;
      };
      #endif // MAINWINDOW_H

      .cpp文件如下:

      #include "mainwindow.h"
      #include "ui_mainwindow.h"
       
      MainWindow::MainWindow(QWidget *parent)
          : QMainWindow(parent)
          , ui(new Ui::MainWindow)
      {
          ui->setupUi(this);
          player = new QMediaPlayer(this);
          audioOutput = new QAudioOutput(this);
          player->setAudioOutput(audioOutput);//指定音频输出位置
          audioOutput->setVolume(0.5);  //调节音频音量
          player->setSource(QUrl("qrc:/audio.mp3"));
          player->play();
      }
       
      MainWindow::~MainWindow()
      {
          delete ui;
      }
       

      四、播放视频

      播放视频的代码结构类似于播放音频,但要注意的是视频它是一个窗口!!!

      因此想播放视频,你必须在.pro文件中加上

      QT += multimediawidgets

       如果你使用的是CMake,请在find_package里加上 Multimedia;

      find_package(Qt6 REQUIRED Widgets Multimedia MultimediaWidgets)

      五、完整代码

      CMakeLists:

      cmake_minimum_required(VERSION 3.10)
      project(demo VERSION 1.0 LANGUAGES CXX)
      set(CMAKE_AUTOMOC ON)
      set(CMAKE_AUTOUIC ON)
      set(CMAKE_AUTORCC ON)
      set(CMAKE_CXX_STANDARD 17)
      set(CMAKE_CXX_STANDARD_REQUIRED ON)
      find_package(Qt6 REQUIRED Widgets Multimedia MultimediaWidgets)
      set(PROJECT_SOURCES 
      	main.cpp
      	Widget.h
      	Widget.cpp
      	#res.qrc
      )
      add_executable(${PROJECT_NAME} ${PROJECT_SOURCES})
      target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Widgets Qt6::Multimedia Qt6::MultimediaWidgets)

       Widget.h:

      // widget.h
      #ifndef WIDGET_H
      #define WIDGET_H
      #include 
      #include 
      #include 
      #include 
      class Widget : public QWidget
      {
          Q_OBJECT
      public:
          Widget(QWidget* parent = nullptr);
          ~Widget();
          QMediaPlayer* m_player = nullptr;
          QAudioOutput* m_audioOutput = nullptr;
          QVideoWidget* m_videoWidget = nullptr;
      };
      #endif // WIDGET_H
      

      Widget.cpp

      // widget.cpp
      #include "widget.h"
      #include 
      #include 
      #include 
      Widget::Widget(QWidget* parent)
          : QWidget(parent)
      {
          this->setFixedSize(500, 300);
          this->setWindowFlag(Qt::WindowMaximizeButtonHint, false);
          m_player = new QMediaPlayer(this);
          m_audioOutput = new QAudioOutput(this);
          m_videoWidget = new QVideoWidget(this);
          m_videoWidget->resize(500, 260);
          m_player->setAudioOutput(m_audioOutput);
          m_player->setVideoOutput(m_videoWidget);
          QPushButton* btn1 = new QPushButton(this);
          btn1->move(200, 270);
          btn1->setText("play");
          connect(btn1, &QPushButton::clicked, [=]() {
              QString str = QFileDialog::getOpenFileName();
              m_player->setSource(QUrl(str));
              //m_player->setSource(QUrl("qrc:/pear_snow.mp3"));
              //m_player->setSource(QUrl("qrc:/output.mp4"));
              m_player->play();
              });
      }
      Widget::~Widget()
      {
      }
      

      main.cpp

      #include 
      #include "Widget.h"
      int main(int argc, char* argv[])
      {
          QApplication app(argc, argv);       
          Widget w;
          w.show();
          return app.exec();
      }
      

      以上代码既能播放音频也能播放视频,相信到这已经解决你的疑惑了。

      详细代码:Qt6播放音视频: Qt6播放音视频

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]