123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- #ifndef HKCAMERA_H
- #define HKCAMERA_H
- #include <QWidget>
- #include "spdlog/spdlog.h"
- #include "HCNetSDK.h"
- #include "CVideoPlayer.h"
- class QVideoWidget;
- class QMediaPlayer;
- class QMediaPlaylist;
- class QLayout;
- // class CVideoPlayer;
- // QT_BEGIN_NAMESPACE
- // namespace Ui { class HKCamera; }
- // QT_END_NAMESPACE
- /**
- * 说明:这个类没有UI,视频播放窗口在Layout中,设置父类,直接设置这个Layout即可
- *
- */
- class HKCamera : public QObject
- {
- Q_OBJECT
- public:
- /* 回调函数类型 */
- enum CallBackType{
- PlayCallBack = 0,
- DownloadCallBack
- };
- HKCamera(QObject *parent = nullptr);
- ~HKCamera();
- bool initHKCamera(const HKLoginInfo& info); /* 初始化海康摄像头SDK */
- quint32 getAnalogChannelNum(); /* 获取模拟通道数 */
- quint32 getAnalogChannelStart(); /* 获取模拟通道起始号 */
- quint32 getDigitalChannelNum(); /* 获取数字通道数 */
- quint32 getDigitalChannelSatrt(); /* 获取数字通道起始号 */
- /* 获取实时视频数据 */
- bool getRealDataFromCamera(int Channel);
- /* 实时显示视频 */
- void realPlayBack(int channel,QWidget* playWindow = nullptr);
- /* 智能检索 */
- bool smartSearch(int channel, const QDateTime& start, const QDateTime& end);
- /* 按照时间查找文件,主要是查找该时间段的文件是否存在 */
- bool findFileWithTime(int channel,const QDateTime& start,const QDateTime& end);
- /* 查找一段时间的视频是否完整 */
- bool findFileIsComplete(int channel,const QDateTime& start,const QDateTime& end);
- /* 按照时间段下载记录的文件 */
- bool downloadRecordFile(int channel,const QString& savePath, const QDateTime& start,const QDateTime& end);
- /********************* 控制播放接口 *********************/
- /* 打开视频文件,顺便初始化播放类 */
- CVideoPlayer* openVideoFile(const QString& fileName);
- /* 播放视频 */
- void playVideo(CVideoPlayer* CVideoPlayer);
- /* 关闭播放,清空播放类 */
- void closePlay(CVideoPlayer* CVideoPlayer);
- /* 暂停播放 */
- void pause(CVideoPlayer* CVideoPlayer);
- /* 停止播放 */
- void stop(CVideoPlayer* CVideoPlayer);
- /* 继续播放 */
- void continuePlay(CVideoPlayer* CVideoPlayer);
- /* 获取播放时长 */
- unsigned long long getPlayDuration(CVideoPlayer* CVideoPlayer);
- /* 设置当前播放位置 */
- void setCurrentPlayPos(CVideoPlayer* CVideoPlayer, unsigned long long pos);
- /* 获取当前播放位置 */
- unsigned long long getCurrentPlayPos(CVideoPlayer* CVideoPlayer);
- /* 获取播放状态 */
- bool getPlayState(CVideoPlayer* CVideoPlayer);
- /* 设置播放窗口的父窗口 */
- void setVideoParent(CVideoPlayer* CVideoPlayer, QWidget* parent);
- /* 设置音量 */
- void setVolume(CVideoPlayer* CVideoPlayer, int volume);
- /* 获取音量 */
- int getVolume(CVideoPlayer* CVideoPlayer);
- /* 检查指针是否在列表容器中 */
- bool checkVideoPlayerInList(CVideoPlayer* CVideoPlayer);
- /* 设置回调函数 */
- void setCallBack(CallBackType type, std::function<Play_CallBack> playCallback,void* pContext);
- private:
- /* 异常回调函数 */
- static void exceptionCallBack(unsigned int type, int userID,int handle,void* user);
- /* 实时预览回调函数 */
- static void realDataCallBack(LONG realHandle, DWORD dataType, BYTE *pBuffer,DWORD bufSize,void* user);
- private:
- std::shared_ptr<spdlog::logger> m_logger = nullptr;
- int m_sdkVersion = 3; /* SDK版本,这个版本自己定义的,为了区分不同的接口函数 */
- HKLoginInfo m_loginInfo; /* 登录信息 */
- LONG m_loginID; /* 登陆返回的用户ID,后续对摄像头的操作都需要这个ID */
- DeviceInfo m_devInfo; /* 登陆上的设备信息 */
- // QLayout m_vLayout = nullptr; /* 放置播放窗口的布局 */
- std::function<Play_CallBack> m_playCallback = nullptr; /* 播放回调函数 */
- std::function<Download_CallBack> m_downloadCallback = nullptr; /* 下载回调函数 */
- void* m_playContext = nullptr; /* 播放回调函数的上下文 */
- void* m_downloadContext = nullptr; /* 下载回调函数的上下文 */
- // CVideoPlayer* m_CVideoPlayer = nullptr; /* 视频播放类 */
-
- QList<CVideoPlayer *> m_listPlayer; /* 播放窗口列表 */
- };
- #endif // HKCAMERA_H
|