cameraplayer.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #ifndef CAMERAPLAYER_H
  2. #define CAMERAPLAYER_H
  3. #include <QObject>
  4. #include <QTimer>
  5. // #include "PlayM4.h"
  6. // #include "HCNetSDK.h"
  7. #include "hksdkapi.h"
  8. #include "RingQueue.hpp"
  9. #include "PlayerGlobalInfo.h"
  10. #include "PlayerGLWidget.h"
  11. #include "PlayerWidget.h"
  12. class TransCode;
  13. /**
  14. * @brief 登录设备返回的设备信息,模拟通道可使用的通道号是从模拟起始通道号到最大的通道个数,数字通道同理
  15. *
  16. */
  17. struct CameraInfo
  18. {
  19. quint32 AChannelNum; /* 模拟通道个数,貌似就是最大模拟通道个数 */
  20. quint32 AChannelStart; /* 模拟起始通道号 */
  21. quint32 DChannelNum; /* 数字通道个数,貌似就是最大模拟通道个数 */
  22. quint32 DChannelStart; /* 数字起始通道号 */
  23. };
  24. class CameraPlayer : public QObject
  25. {
  26. Q_OBJECT
  27. public:
  28. explicit CameraPlayer(QObject *parent = nullptr);
  29. ~CameraPlayer();
  30. /* 设置摄像机信息 */
  31. bool initCamera(QString cameraIP, int cameraPort, QString cameraUser, QString cameraPwd);
  32. /* 获取摄像机通道号 */
  33. CameraInfo getCameraInfo() { return m_camInfo; }
  34. /* 开启实时预览,传入通道号,开始接收摄像机的数据,但是并不播放 */
  35. bool startRealPlay(int channel);
  36. /* 关闭预览 */
  37. void stopRealPlay();
  38. /* 开始播放预览 */
  39. void startPlay();
  40. /* 设置播放窗口父指针 */
  41. void setPlayWndParent(QWidget* playWnd);
  42. /* 设置播放窗口大小 */
  43. void setPlayWndSize(int width, int height);
  44. void setPlayWndSize(QSize size) { setPlayWndSize(size.width(), size.height()); }
  45. /* 获取播放窗口指针 */
  46. QWidget* getPlayWnd() { return m_player; }
  47. /* 设置一张默认的图片 */
  48. void setImage(const QImage& image) { m_player->setImage(image); }
  49. /* 获取视频分辨率 */
  50. QSize getImageSize() { return m_imageSize; }
  51. private slots:
  52. /* 更新一帧数据 */
  53. void do_updateFrame();
  54. private:
  55. /* 异常回调函数 */
  56. static void exceptionCallBack(unsigned int type, int userID,int handle,void* user);
  57. /* 实时预览回调函数 */
  58. static void CALLBACK realDataCallBack(LONG realHandle, DWORD dataType, BYTE *pBuffer,DWORD bufSize,void* user);
  59. /* 标准数据流的预览回调函数 */
  60. static void realDataCallBackStandard(LONG realHandle, DWORD dataType, BYTE *pBuffer,DWORD bufSize,DWORD user);
  61. /* 解码回调函数 */
  62. #if defined (C_WIN32)
  63. static void CALLBACK DecCallBack(long nPort, char * pBuf, long nSize,FRAME_INFO * pFrameInfo, long nUser, long nReserved2);
  64. #elif defined (C_WIN64)
  65. static void CALLBACK DecCallBack(long nPort, char * pBuf, long nSize,FRAME_INFO * pFrameInfo, void* nUser, void* nReserved2);
  66. #elif defined(C_LINUX)
  67. static void CALLBACK DecCallBack(int nPort, char * pBuf, int nSize,FRAME_INFO * pFrameInfo, void* nUser, int nReserved2);
  68. #endif
  69. private:
  70. int m_sdkVersion = 3; /* SDK版本,这个版本自己定义的,为了区分不同的接口函数 */
  71. LONG m_loginID; /* 登陆返回的用户ID,后续对摄像头的操作都需要这个ID */
  72. CameraInfo m_camInfo; /* 登陆上的设备信息 */
  73. LONG m_realPlayHandle = -1; /* 实时预览句柄 */
  74. LONG m_playPort = -1; /* 全局的播放库port号 */
  75. int m_frameRate = 0; /* 帧率 */
  76. QSize m_imageSize; /* 图片大小 */
  77. QTimer m_frameTimer; /* 定时器,用于更新一帧数据 */
  78. RingQueue<Image_YUV420*> m_imageQueue; /* 环形队列,存放YUV数据 */
  79. PlayerGLWidget* m_player = nullptr; /* 播放窗口 */
  80. // RingQueue<Image_QImage*> m_imageQueue; /* 环形队列,存放QImage数据 */
  81. // PlayerWidget* m_player = nullptr; /* 播放窗口 */
  82. TransCode* m_transCode = nullptr; /* 转码类 */
  83. };
  84. #endif // CAMERAPLAYER_H