avplayerwidget.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #ifndef AVPLAYERWIDGET_H
  2. #define AVPLAYERWIDGET_H
  3. #include <QWidget>
  4. #include <QPushButton>
  5. #include <QVBoxLayout>
  6. #include <QHBoxLayout>
  7. #include <QLabel>
  8. #include <QSlider>
  9. #include <QLineEdit>
  10. #include <QSharedPointer>
  11. #include <QFutureWatcher>
  12. #include <QProgressBar>
  13. #include <QMovie>
  14. class AVPlayer;
  15. class AVOpenGLWidget;
  16. class VideoFrame;
  17. class AVPlayerWidget : public QWidget
  18. {
  19. Q_OBJECT
  20. public:
  21. explicit AVPlayerWidget(QWidget *parent = nullptr);
  22. ~AVPlayerWidget();
  23. void play(const QString &url);
  24. void stop();
  25. void pause();
  26. void resume();
  27. // 兼容旧接口:基于房间ID控制播放
  28. void stopPlay();
  29. void setPlayRoomId(const QString &id);
  30. void startPlay();
  31. // 异步播放接口
  32. void playAsync(const QString &url);
  33. void startPlayAsync();
  34. private Q_SLOTS:
  35. void ptsChangedSlot(unsigned int duration);
  36. void durationChangedSlot(unsigned int pts);
  37. void terminateSlot();
  38. // UI控制槽函数
  39. void onPlayButtonClicked();
  40. void onStopButtonClicked();
  41. void onPauseButtonClicked();
  42. void onTestPlayButtonClicked();
  43. void onVolumeChanged(int volume);
  44. // 视频帧处理
  45. void onFrameChanged(QSharedPointer<VideoFrame> frame);
  46. // 异步播放相关槽函数
  47. void onAsyncPlayFinished();
  48. void onAsyncPlayError(const QString &error);
  49. signals:
  50. void playStateChanged(bool isPlaying);
  51. void playLoadingStarted();
  52. void playLoadingFinished();
  53. void playError(const QString &error);
  54. private:
  55. void setupUI();
  56. void connectSignals();
  57. void showLoadingUI();
  58. void hideLoadingUI();
  59. AVPlayer *m_player;
  60. AVOpenGLWidget *m_openglWidget;
  61. // UI组件
  62. QVBoxLayout *m_mainLayout;
  63. QHBoxLayout *m_controlLayout;
  64. QPushButton *m_playButton;
  65. QPushButton *m_pauseButton;
  66. QPushButton *m_stopButton;
  67. QPushButton *m_testPlayButton;
  68. QLabel *m_timeLabel;
  69. QSlider *m_volumeSlider;
  70. QLineEdit *m_urlEdit;
  71. bool m_isPlaying;
  72. bool m_isPaused;
  73. bool m_isLoading;
  74. // 异步播放相关
  75. QFutureWatcher<bool> *m_playWatcher;
  76. // 加载状态UI
  77. QLabel *m_loadingLabel;
  78. QProgressBar *m_loadingProgress;
  79. QMovie *m_loadingMovie;
  80. QString m_pendingUrl;
  81. };
  82. #endif // AVPLAYERWIDGET_H