qt6.5.0屏幕录制
记录一下本次开发踩到的坑,qt开发屏幕录制最坑的点是m_screen_caputure->setActive(true);
录制前需要先激活屏幕捕获。不然会直接报找不到编码器的错误。其他废话不多说,直接上代码
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QMediaRecorder>
#include <QMediaCaptureSession>
#include <QScreenCapture>
#include <QAudioInput>
#include <QMediaFormat>
#include <QMediaDevices>
#include <QAudioDevice>
#include <QTimer>
#include <QTime>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
void initSrceen();//初始化屏幕
void initAudioDev();//初始化音频设备
void initVideoCodec();//初始化视频编码格式
void initAudioCodec();//初始化音频编码格式
void initFileFormat();//初始化文件格式
void initQuality();//初始化音视频质量
void updateStateEnable(bool bl);//更新控件使能
void showRecordDuration();//显示录制时长
void showError(QMediaRecorder::Error error, const QString &errorString);//显示错误信息
private slots:
void on_btn_start_record_clicked();
void on_btn_stop_record_clicked();
void on_btn_pause_record_clicked();
void on_comboBox_video_encode_format_currentIndexChanged(int index);
void on_comboBox_audio_encode_format_currentIndexChanged(int index);
void on_comboBox_file_format_currentIndexChanged(int index);
void on_comboBox_video_quality_currentIndexChanged(int index);
void on_comboBox_audio_currentIndexChanged(int index);
void on_comboBox_screen_currentIndexChanged(int index);
void on_tbtn_set_dir_clicked();
private:
Ui::Widget *ui;
QMediaCaptureSession m_captureSession;
QMediaRecorder m_recorder;
QScreenCapture *m_screen_caputure = nullptr;
QScreen *m_srceen = nullptr;
QAudioDevice m_dev;
QAudioInput m_audio;
QMediaFormat format;
//屏幕设备列表
QList<QScreen *> m_screenList;
//音频设备列表
QList<QAudioDevice> m_audioInputList;
QTimer *m_timer;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include