#ifndef PLAYERDEMOWINDOW_H #define PLAYERDEMOWINDOW_H #pragma once #include #include #include #include #include #include #include #include #include "AvRecorder/ui/opengl_video_widget.h" #include "Avplayer/FFmpegVideoPuller.h" #include "AudioPlayer.h" #include "VideoPlayer.h" extern "C" { #include } struct sonicStreamStruct; class PlayerDemoWindow : public QWidget { Q_OBJECT public: explicit PlayerDemoWindow(QWidget* parent = nullptr); ~PlayerDemoWindow(); void startPlay(const QString& url); private slots: void onProgressSliderMoved(int value); void onProgressSliderReleased(); void onSpeedChanged(int index); void onPlayClicked(); private: FFmpegVideoPuller* m_puller = nullptr; OpenGLVideoWidget* m_videoWidget = nullptr; AudioPlayer* m_audioPlayer = nullptr; VideoPlayer* m_videoPlayer = nullptr; // UI QSlider* m_progressSlider = nullptr; QLabel* m_timeLabel = nullptr; QComboBox* m_speedCombo = nullptr; QPushButton* m_playBtn = nullptr; // 进度相关 bool m_sliderPressed = false; double m_firstPts = 0.0; double m_lastPts = 0.0; double m_duration = 0.0; std::atomic speedFlag; bool m_playing; void updateProgress(); QString formatTime(double seconds) const; QCheckBox* m_keepAspectCheck = nullptr; private: SwrContext* m_swrCtx = nullptr; uint8_t* m_swrBuffer = nullptr; int m_swrBufferSize = 0; }; #endif // PLAYERDEMOWINDOW_H