首页 > 其他分享 >Qt6 播放音视频

Qt6 播放音视频

时间:2024-06-05 19:58:46浏览次数:23  
标签:Qt6 QT6 Widget include 视频 音频 音视频 播放

一、概述

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

  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 <QMainWindow>
#include <QMediaPlayer>
#include <QAudioOutput>
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 <QWidget>
#include <QMediaPlayer>
#include <QVideoWidget>
#include <QAudioOutput>

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 <QPushButton>
#include <QFileDialog>
#include <QLabel>

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 <QApplication>
#include "Widget.h"

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

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

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

标签:Qt6,QT6,Widget,include,视频,音频,音视频,播放
From: https://blog.csdn.net/m0_74091159/article/details/139447473

相关文章

  • 腾讯云实时音视频
    import{Injectable}from'@angular/core';import{Observable,Subject,BehaviorSubject}from'rxjs';import{UserService}from'./user.service';declarevar$:any;declarevarTRTC:any;@Injectable({providedIn:......
  • BK7258--wifi音视频soc芯片,1080P H264 wifi低功耗保活,内置BLE,音频code,psram,flash,USB2.
    BK7258是上海博通推出的高度集成的Wi-Fi+BLE combo音视频芯片,支持UVC和DVP摄像头,该芯片集成音视频外设及接口,1080P,H.264,低功耗,内置flash,dsp,psram,驱屏,回声消除及降噪等,广泛适用于可视猫眼,门锁,门铃,ipc,内窥,儿童相机等应用市场。可视门铃应用:DVP接口支持720p25fps图像采集;MJPE......
  • Mac电脑在线视频播放器:IINA for Mac v1.3.4中文版下载
    IINA是一款优秀的Mac平台视频播放软件,能够支持几乎所有常见的视频格式和编解码器,包括4K、HEVC、H.264等。软件采用了现代化的设计风格,界面简洁清晰,操作简便。同时还支持视频播放过程中的画中画、自定义快捷键、在线字幕搜索等功能,用户体验非常优秀。除此之外,IINA还支持AirP......
  • swiftUI使用VideoPlayer和AVPlayer播放视频
    使用VideoPlayer包播放视频:https://github.com/wxxsw/VideoPlayer提供一些可供测试的视频链接,不保证稳定可用哦:https://vfx.mtime.cn/Video/2019/06/15/mp4/190615103827358781.mp4https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4https://vfx.mtime.cn/Video/2019/......
  • 微信小程序------音乐播放------背景音乐播放
    使用wx.getBackgroundAudioManager()方法播放背景音乐即便突出也会显示音乐播放1、成品展示单击右上角按钮播放音乐 2、样式设置2.1html样式<viewclass="playerplayer-{{isPlayingMusic?'play':'pause'}}"bindtap="play"><imagesrc="/pages/ima......
  • 【QT6】pycharm集成qt desinger(非anaconda等环境下)
    前言已经安装好了PyQT6,如果没有,请自行选择在项目或者全局打开cmd并输入:pipinstallPyQt6来进行安装!开始安装确定自己是否有安装pyside6,如果有,直接跳到下一步。。如果你没有安装过pyside6,任意地方打开cmd,输入:pipinstallpySide6安装完毕后,找到你python的安装目录:然后点进......
  • 基于 HTML5 和腾讯云播放 SDK 开发的 M3U8 在线播放器
    在当前的网络视频领域,M3U8文件格式是一种广泛应用的流媒体播放格式,具有广泛的兼容性和稳定性。为了在网页上实现M3U8格式的在线播放,我们可以结合HTML5技术和腾讯云播放SDK,快速开发一个功能强大的M3U8在线播放器。体验地址:https://m3u8player.org1.HTML5和M3U8HTML......
  • 基于 HTML5 和腾讯云播放 SDK 开发的 M3U8 在线播放器
    在当前的网络视频领域,M3U8文件格式是一种广泛应用的流媒体播放格式,具有广泛的兼容性和稳定性。为了在网页上实现M3U8格式的在线播放,我们可以结合HTML5技术和腾讯云播放SDK,快速开发一个功能强大的M3U8在线播放器。体验地址:https://m3u8player.org1.HTML5和M3U......
  • 使用Naudio使用指定声卡播放声音
    //获取WaveOut设备数量intdeviceCount=WaveOut.DeviceCount;//遍历每个设备,获取其DeviceNumber及相关信息for(intdeviceNumber=0;deviceNumber<deviceCount;devic......
  • ios系统上h5页面播放audio标签声音有延迟问题处理
    原文链接https://www.cnblogs.com/yalong/p/18214816背景app内嵌了一个H5页面,页面有个需求是点击某些按钮就触发声音,于是就使用了audio标签,但是有个问题就是在ios上,点击声音会有短时间的延迟,然后才播放声音找了好几种方案总算解决了方案一click事件改为mouseup事件因为移动......