av_recorder.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #pragma once
  2. #include <QCheckBox>
  3. #include <QLayout>
  4. #include <QPushButton>
  5. #include <QTime>
  6. #include <QTimer>
  7. #include <QWidget>
  8. #include <QAction>
  9. #include <QMenu>
  10. #include "audio_widget.h"
  11. #include "capture_source_widget.h"
  12. #include "qcombobox.h"
  13. #include "qstatusbar.h"
  14. #include "recorder/audio_recorder.h"
  15. #include "recorder/video_recorder.h"
  16. #include "ui/opengl_video_widget.h"
  17. #include "ui/settings_page.h"
  18. using namespace avrecorder::video;
  19. class AvRecorder : public QWidget
  20. {
  21. Q_OBJECT
  22. public:
  23. AvRecorder(QWidget* parent = nullptr);
  24. ~AvRecorder();
  25. bool start();
  26. QWidget* statusBar() const { return m_statusBar; }
  27. void setSettings(const SettingsPage::Param& param);
  28. public slots:
  29. void renderFrame();
  30. private:
  31. SettingsPage::Param m_settingsParam;
  32. void initStatusBarUi();
  33. void startCapture(CaptureMethod method);
  34. void stopCapture();
  35. void startPreview();
  36. void dealCapture();
  37. void stopPreview();
  38. bool startStream(std::string_view path, std::string_view format);
  39. void stopStream();
  40. bool startSyncRecord(); // 开始同步录像
  41. void stopSyncRecord(); // 停止同步录像
  42. void initConnect();
  43. void showAudioDeviceMenu(); // 显示音频设备菜单
  44. void onMicrophoneDeviceSelected(); // 麦克风设备选择
  45. void onSpeakerDeviceSelected(); // 扬声器设备选择
  46. private:
  47. AudioRecorder m_audioRecorder;
  48. VideoRecorder m_videoRecorder;
  49. AvMuxer m_avMuxer;
  50. AvMuxer m_recordMuxer; // 添加用于同步录像的Muxer
  51. // VideoRender m_videoRender;
  52. OpenGLVideoWidget* m_glWidget;
  53. AudioWidget* m_microphoneWidget = nullptr;
  54. AudioWidget* m_speakerWidget = nullptr;
  55. QPushButton* m_recordBtn = nullptr;
  56. QPushButton* m_liveBtn = nullptr;
  57. QPushButton* m_settingsBtn = nullptr;
  58. QPushButton* m_audioDeviceBtn = nullptr; // 音频设备选择按钮
  59. QCheckBox* m_isDrawCursorBox = nullptr;
  60. QCheckBox* m_syncRecordBox = nullptr; // 添加同步录像的复选框
  61. QTimer* m_videoRenderTimer = nullptr;
  62. QTimer m_otherTimer;
  63. CaptureSourceWidget* m_captureSourceWidget = nullptr;
  64. bool m_isRecord = false;
  65. bool m_isLive = false;
  66. bool m_isSyncRecord = false; // 是否同步录像
  67. QComboBox* m_captureMethodBox = nullptr;
  68. QLabel* m_captureStatusLabel = nullptr;
  69. QLabel* m_captureTimeLabel = nullptr;
  70. QLabel* m_fpsLabel = nullptr;
  71. QLabel* m_videoEncodeLabel = nullptr;
  72. QLabel* m_audioEncodeLabel = nullptr;
  73. QLabel* m_videolossRate = nullptr;
  74. QTime m_recordTime;
  75. bool m_isLocked = false;
  76. QStatusBar* m_statusBar = nullptr;
  77. void updateCaptureMethodBox(bool isMonitor);
  78. void onCaptureSourceChanged();
  79. };