赞
踩
本文将详细介绍如何利用Qt6多媒体模块中的QMediaCaptureSession、QMediaRecorder、QScreenCapture、QAudioInput、QMediaFormat等功能,实现对屏幕和声音的录制,并生成常见的媒体格式文件,如MP4、AVI、MA3等。我们将探讨如何利用这些功能来实现灵活的视频和音频参数设置,以满足不同需求下的录制和生成要求。我们将重点讨论如何配置视频和音频参数,包括分辨率、帧率、编解码器选择、音频采样率、声道设置等。通过本文,您将了解如何利用Qt6的多媒体模块,轻松实现对屏幕和声音的录制,并生成您所需的多媒体格式文件。
完整源码已上传,但审核较慢,如有需要可先收藏。
testrecord/ 项目目录 ├── capturerecorder.cpp 录制功能类源文件 ├── capturerecorder.h 录制功能类头文件 ├── images 界面图标根目录 │ ├── app.ico 应用程序图标 │ ├── info-circle.png │ ├── open-folder.png │ ├── pause.png │ ├── refresh.png │ ├── select-folder.png │ ├── start.png │ └── stop.png ├── main.cpp 主函数所在文件 ├── resource.qrc qt资源文件 ├── testrecord.pro qt项目文件 ├── widget.cpp 主界面源文件 ├── widget.h 主界面头文件 └── widget.ui 主界面ui
QT += core gui multimedia
RC_ICONS = images/app.ico
QMediaCaptureSession类是Qt6多媒体模块中的一个重要类,它提供了对多媒体捕获会话的控制和管理功能。通过QMediaCaptureSession类,您可以轻松地管理和控制多媒体捕获设备,如摄像头、麦克风等,实现对视频和音频的捕获。该类提供了开始、暂停、停止捕获会话的方法,以及捕获状态的监控功能,让您可以方便地管理捕获过程。另外,QMediaCaptureSession类还提供了信号和槽机制,让您可以方便地与其他多媒体类进行交互,实现更复杂的多媒体处理功能。
项目中使用到:
m_session->setAudioInput(m_audioInput); //声音输入
m_session->setScreenCapture(m_screen); //屏幕图像输入
m_session->setRecorder(m_recorder); //录制
QMediaRecorder类是Qt6多媒体模块中的一个重要类,它提供了对音频和视频的录制功能。通过QMediaRecorder类,您可以轻松地实现对音频和视频的录制,并生成常见的媒体格式文件,如MP4、AVI、MA3等。该类提供了开始录制、暂停录制、停止录制的方法,以及录制状态的监控功能,让您可以方便地管理录制过程。另外,QMediaRecorder类还提供了丰富的配置选项,包括视频参数和音频参数的设置,如分辨率、帧率、编解码器选择、音频采样率、声道设置等,让您可以根据实际需求进行灵活的配置。
项目中使用到:
m_recorder->record(); //开始录制
m_recorder->stop(); //停止录制
m_recorder->pause(); //暂停录制
m_recorder->setQuality((QMediaRecorder::Quality)quality); //设置视频质量
屏幕捕获
项目中使用到:
m_screen->setScreen(qApp->primaryScreen()); //设置要录制的屏幕
m_screen->setActive(true); //激活录制
QAudioInput类是Qt中用于音频输入的类,它提供了对音频输入设备(如麦克风)的访问和控制。通过QAudioInput类,您可以实现对音频输入设备的录制,获取音频数据,并进行处理或存储。该类可以用于实时音频采集、语音识别、音频分析等应用场景。
项目中使用到:
//获取默认输入设备
m_audioInput = new QAudioInput(QMediaDevices::defaultAudioInput(), this);
用于设置打包格式、视频编码器、音频编码器等参数。
项目中使用到:
m_mediaFormat.setFileFormat((QMediaFormat::FileFormat)format); //设置打包格式
m_mediaFormat.setVideoCodec((QMediaFormat::VideoCodec)codec);//设置视频编码
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QDateTime> #include "capturerecorder.h" QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); private slots: void slotRefreshAudioInput();//刷新声音输入设备 void slotOpenDirClicked(); //打开输出目录 void slotSelectDirClicked(); //选择输出目录 void slotRestoreClicked(); //恢复默认设置 void slotStart(); //开始/暂停录制 void slotStop(); //停止录制 void slotDurationChanged(qint64 duration); //录制时长 void slotRecorderStateChanged(QMediaRecorder::RecorderState state); private: Ui::Widget *ui; bool m_running = false; bool m_paused = false; CaptureRecorder* m_pCapture = nullptr; QDateTime m_duration;//录制时长 }; #endif // WIDGET_H
具体实现,参见完整源码工程
#pragma once #include <QMediaRecorder> #include <QMediaFormat> class QMediaCaptureSession; class QMediaRecorder; class QScreenCapture; class QAudioInput; class CaptureRecorder : public QObject { Q_OBJECT public: CaptureRecorder(QObject *parent); ~CaptureRecorder(); /** * 开始录制 */ void record(); /** * 停止录制 */ void stop(); /** * 暂停录制 */ void pause(); /** * 恢复录制 */ void resume(); /** * 是否录制中 */ bool isAvailable() const; /** * 开启录制屏幕 */ void enableScreenCapture(bool enable); /** * 设置文件输出格式 */ void setFileFormat(int format); /** * 设置视频编码器 */ void setVideoCodec(int codec); /** * 设置视频帧率 */ void setVideoFrameRate(qreal frameRate); /** * 设置比特率 */ void setVideoBitRate(int bitRate); /** * 设置录制质量 */ void setQuality(int quality); /** * 设置输出路径 */ void setOutputLocation(const QString &location); signals: void durationChanged(qint64 duration); void recorderStateChanged(QMediaRecorder::RecorderState state); private: QMediaFormat m_mediaFormat; QMediaCaptureSession* m_session = nullptr; QMediaRecorder* m_recorder = nullptr; QScreenCapture* m_screen = nullptr; QAudioInput* m_audioInput = nullptr; };
具体实现,参见完整源码工程
https://download.csdn.net/download/yegu001/88772210
✍结尾 ❤️ 感谢您的支持和鼓励
,关注
不迷路✍
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。