hkcamera.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #ifndef HKCAMERA_H
  2. #define HKCAMERA_H
  3. #include <QWidget>
  4. #include "spdlog/spdlog.h"
  5. #include "HCNetSDK.h"
  6. #include "CVideoPlayer.h"
  7. class QVideoWidget;
  8. class QMediaPlayer;
  9. class QMediaPlaylist;
  10. class QLayout;
  11. // class CVideoPlayer;
  12. // QT_BEGIN_NAMESPACE
  13. // namespace Ui { class HKCamera; }
  14. // QT_END_NAMESPACE
  15. /**
  16. * 说明:这个类没有UI,视频播放窗口在Layout中,设置父类,直接设置这个Layout即可
  17. *
  18. */
  19. class HKCamera : public QObject
  20. {
  21. Q_OBJECT
  22. public:
  23. /* 回调函数类型 */
  24. enum CallBackType{
  25. PlayCallBack = 0,
  26. DownloadCallBack
  27. };
  28. HKCamera(QObject *parent = nullptr);
  29. ~HKCamera();
  30. bool initHKCamera(const HKLoginInfo& info); /* 初始化海康摄像头SDK */
  31. quint32 getAnalogChannelNum(); /* 获取模拟通道数 */
  32. quint32 getAnalogChannelStart(); /* 获取模拟通道起始号 */
  33. quint32 getDigitalChannelNum(); /* 获取数字通道数 */
  34. quint32 getDigitalChannelSatrt(); /* 获取数字通道起始号 */
  35. /* 获取实时视频数据 */
  36. bool getRealDataFromCamera(int Channel);
  37. /* 实时显示视频 */
  38. void realPlayBack(int channel,QWidget* playWindow = nullptr);
  39. /* 智能检索 */
  40. bool smartSearch(int channel, const QDateTime& start, const QDateTime& end);
  41. /* 按照时间查找文件,主要是查找该时间段的文件是否存在 */
  42. bool findFileWithTime(int channel,const QDateTime& start,const QDateTime& end);
  43. /* 查找一段时间的视频是否完整 */
  44. bool findFileIsComplete(int channel,const QDateTime& start,const QDateTime& end);
  45. /* 按照时间段下载记录的文件 */
  46. bool downloadRecordFile(int channel,const QString& savePath, const QDateTime& start,const QDateTime& end);
  47. /********************* 控制播放接口 *********************/
  48. /* 打开视频文件,顺便初始化播放类 */
  49. CVideoPlayer* openVideoFile(const QString& fileName);
  50. /* 播放视频 */
  51. void playVideo(CVideoPlayer* CVideoPlayer);
  52. /* 关闭播放,清空播放类 */
  53. void closePlay(CVideoPlayer* CVideoPlayer);
  54. /* 暂停播放 */
  55. void pause(CVideoPlayer* CVideoPlayer);
  56. /* 停止播放 */
  57. void stop(CVideoPlayer* CVideoPlayer);
  58. /* 继续播放 */
  59. void continuePlay(CVideoPlayer* CVideoPlayer);
  60. /* 获取播放时长 */
  61. unsigned long long getPlayDuration(CVideoPlayer* CVideoPlayer);
  62. /* 设置当前播放位置 */
  63. void setCurrentPlayPos(CVideoPlayer* CVideoPlayer, unsigned long long pos);
  64. /* 获取当前播放位置 */
  65. unsigned long long getCurrentPlayPos(CVideoPlayer* CVideoPlayer);
  66. /* 获取播放状态 */
  67. bool getPlayState(CVideoPlayer* CVideoPlayer);
  68. /* 设置播放窗口的父窗口 */
  69. void setVideoParent(CVideoPlayer* CVideoPlayer, QWidget* parent);
  70. /* 设置音量 */
  71. void setVolume(CVideoPlayer* CVideoPlayer, int volume);
  72. /* 获取音量 */
  73. int getVolume(CVideoPlayer* CVideoPlayer);
  74. /* 检查指针是否在列表容器中 */
  75. bool checkVideoPlayerInList(CVideoPlayer* CVideoPlayer);
  76. /* 设置回调函数 */
  77. void setCallBack(CallBackType type, std::function<Play_CallBack> playCallback,void* pContext);
  78. private:
  79. /* 异常回调函数 */
  80. static void exceptionCallBack(unsigned int type, int userID,int handle,void* user);
  81. /* 实时预览回调函数 */
  82. static void realDataCallBack(LONG realHandle, DWORD dataType, BYTE *pBuffer,DWORD bufSize,void* user);
  83. private:
  84. std::shared_ptr<spdlog::logger> m_logger = nullptr;
  85. int m_sdkVersion = 3; /* SDK版本,这个版本自己定义的,为了区分不同的接口函数 */
  86. HKLoginInfo m_loginInfo; /* 登录信息 */
  87. LONG m_loginID; /* 登陆返回的用户ID,后续对摄像头的操作都需要这个ID */
  88. DeviceInfo m_devInfo; /* 登陆上的设备信息 */
  89. // QLayout m_vLayout = nullptr; /* 放置播放窗口的布局 */
  90. std::function<Play_CallBack> m_playCallback = nullptr; /* 播放回调函数 */
  91. std::function<Download_CallBack> m_downloadCallback = nullptr; /* 下载回调函数 */
  92. void* m_playContext = nullptr; /* 播放回调函数的上下文 */
  93. void* m_downloadContext = nullptr; /* 下载回调函数的上下文 */
  94. // CVideoPlayer* m_CVideoPlayer = nullptr; /* 视频播放类 */
  95. QList<CVideoPlayer *> m_listPlayer; /* 播放窗口列表 */
  96. };
  97. #endif // HKCAMERA_H