VideoPlayer.h 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #ifndef VideoPlayer_H
  2. #define VideoPlayer_H
  3. #include <QWidget>
  4. #include <QThread>
  5. #include <QTimer>
  6. #include <QSemaphore>
  7. class DecodeVedio;
  8. class VideoPlayer : public QWidget
  9. {
  10. Q_OBJECT
  11. public:
  12. explicit VideoPlayer(QWidget *parent = nullptr);
  13. ~VideoPlayer();
  14. void openPlayVedio(const QString& fileName); /* 打开播放视频 */
  15. bool play(); /* 播放视频 */
  16. void pause(); /* 暂停播放 */
  17. void stop(); /* 停止播放 */
  18. void backward(qint64 ms); /* 后退,单位ms */
  19. void forward(qint64 ms); /* 前进,单位ms */
  20. bool getPlayStatus() { return m_playStatus; } /* 获取播放状态 */
  21. qint64 getDuration(); /* 获取视频时长,单位ms */
  22. qint64 getCurrentPos(); /* 获取当前播放位置,单位ms */
  23. void setCurrentPos(qint64 pos); /* 设置当前播放位置,单位ms */
  24. void setPlayWidgetSize(int width,int height); /* 设置播放视频窗口的大小 */
  25. void setPlayWidget(QWidget* widget, bool flag = false); /* 设置播放窗口 */
  26. void setPreviewImage(int num = 2); /* 设置预览图片数目,在暂停时跳转,可能会有花屏或者黑帧,可以设置跳转图片个数跳过黑帧 */
  27. void setFPS(int fps); /* 设置帧率 */
  28. // void setPlayCallBack(std::function<Play_CallBack> playCallBack,void* context); /* 设置播放回调函数 */
  29. signals:
  30. void signal_playCompleted(); /* 播放完成信号 */
  31. void signal_refreshImage(); /* 刷新图片信号 */
  32. protected:
  33. void paintEvent(QPaintEvent *event) override;
  34. void resizeEvent(QResizeEvent *event) override;
  35. void refreshOneUIUntilHave(); /* 刷新一张图片,直到有图片为止 */
  36. /* 双击事件函数 */
  37. // void mouseDoubleClickEvent(QMouseEvent *event) override;
  38. private slots:
  39. void do_refreshUI(); /* 取出画面,刷新UI */
  40. void do_refreshSamImage(); /* 通过信号刷新图片 */
  41. void do_playCompleted(); /* 播放完成 */
  42. private:
  43. bool isLocalFile(const QString& fileName); /* 判断是否是本地文件 */
  44. protected:
  45. QString m_fileName; /* 文件名 */
  46. bool m_isOpenFile = false; /* 是否打开了视频文件,未打开视频文件也就是未初始化解码线程 */
  47. QTimer m_timerRefreshUI; /* 定时器,用于刷新界面 */
  48. bool m_playStatus = false; /* 是否正在播放 */
  49. private:
  50. bool m_isLocalFile = false; /* 是否是本地文件 */
  51. int m_srcWidth = 0; /* 视频原本大小 */
  52. int m_srcHeight = 0;
  53. int m_nowWidth = 0; /* 现在大小 */
  54. int m_nowHeight = 0;
  55. int m_fps = 0; /* 帧数 */
  56. int m_interval = 0; /* 定时器定时间隔,帧率的倒数,单位ms */
  57. qint64 m_duration = 0; /* 时长,单位ms */
  58. DecodeVedio* m_decodeVedio = nullptr;
  59. QThread* m_threadDecode = nullptr; /* 解码器所在的线程 */
  60. QImage* m_image = nullptr; /* 画面 */
  61. QSemaphore* m_semRefresh = nullptr; /* 刷新信号量 */
  62. int m_previewImage = 0; /* 预览图片数目 */
  63. // std::function<Play_CallBack> m_funcPlayCB = nullptr; /* 播放回调函数 */
  64. // void* m_context = nullptr; /* 上下文 */
  65. };
  66. #endif /* VideoPlayer_H */