mod_SurveillanceRecorder.h 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. #pragma once
  2. #include "SpBase.h"
  3. #include "SpIni.h"
  4. #include "ews_capture.h"
  5. #include "volumekeeper.h"
  6. #include "Event.h"
  7. #include "mod_selfchecker/SelfChecker_client_g.h"
  8. #include "mod_selfchecker/SelfChecker_def_g.h"
  9. #include "SurveillanceRecorder_server_g.h"
  10. #include "SurveillanceRecorder_msg_g.h"
  11. #include "libwmvrecord.h"
  12. #include "libvideoecho.h"
  13. #include "UploadRecord.h"
  14. #include "EventCode.h"
  15. using namespace SelfChecker;
  16. namespace SurveillanceRecorder {
  17. typedef struct
  18. {
  19. CSimpleStringA szDevicePrefix;
  20. BOOL bAutoMode;
  21. } SecondBranchParam;
  22. class CSurveillanceRecorderEntity;
  23. class SelfChekerClient:public SelfCheckerService_ClientBase
  24. {
  25. public:
  26. explicit SelfChekerClient(CSurveillanceRecorderEntity *pEntity);
  27. };
  28. class SurveillanceRecordServiceSession : public SurveillanceRecorderService_ServerSessionBase
  29. {
  30. public:
  31. explicit SurveillanceRecordServiceSession(CSurveillanceRecorderEntity *pEntity) : m_pEntity(pEntity){}
  32. virtual void Handle_GetContinuRecordInfo(SpReqAnsContext<SurveillanceRecorderService_GetContinuRecordInfo_Req, SurveillanceRecorderService_GetContinuRecordInfo_Ans>::Pointer ctx);
  33. virtual void Handle_GetContinuRecordState(SpReqAnsContext<SurveillanceRecorderService_GetContinuRecordState_Req, SurveillanceRecorderService_GetContinuRecordState_Ans>::Pointer ctx);
  34. virtual void Handle_GetContinuRecordMode(SpReqAnsContext<SurveillanceRecorderService_GetContinuRecordMode_Req, SurveillanceRecorderService_GetContinuRecordMode_Ans>::Pointer ctx);
  35. virtual void Handle_StartEwsCamera(SpReqAnsContext<SurveillanceRecorderService_StartEwsCamera_Req, SurveillanceRecorderService_StartEwsCamera_Ans>::Pointer ctx);
  36. virtual void Handle_StopEwsCamera(SpReqAnsContext<SurveillanceRecorderService_StopEwsCamera_Req, SurveillanceRecorderService_StopEwsCamera_Ans>::Pointer ctx);
  37. private:
  38. CSurveillanceRecorderEntity *m_pEntity;
  39. };
  40. class CSurveillanceRecorderEntity: public CEntityBase, public ISysVarListener, public ILogListener, public ITimerListener, public CWmvHostApi, public LibVideoEcho::CVideoEchoHostApi
  41. {
  42. public:
  43. CSurveillanceRecorderEntity(): m_bRecordAllowed(false), m_bAutoMode(false), m_secondBranchAllowed(FALSE), m_last_disk_overtop(FALSE), m_pKeeperIn(NULL), m_ews_capture(NULL), m_lCaptureEwsCount(0), m_nCameraErrorCode(Error_Succeed),
  44. m_iEwsEmptyTimes(0), m_nEwsCameraRestartNum(0), m_pSelfcheckClient(NULL), m_pRecorder(NULL), pSession(NULL), m_bEchoRecord(FALSE), m_pConnection(NULL), /*m_hUploadAnsEvt(NULL), */m_nUploadResult(0), m_eAudioOutQuality(eUltraHD),
  45. m_bIsAudioNsOn(false), m_iAudioNsPolicy(2){}
  46. virtual ~CSurveillanceRecorderEntity() { /*nothing to implement*/ }
  47. virtual const char *GetEntityName() const { return "SurveillanceRecorder"; }
  48. virtual bool IsService() const{ return true; }
  49. virtual void OnPreStart(CAutoArray<CSimpleStringA> strArgs,CSmartPointer<ITransactionContext> pTransactionContext);
  50. virtual void OnStarted();
  51. virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer<ITransactionContext> pTransactionContext);
  52. virtual void OnTimeout(DWORD dwTimerID);
  53. // add by ly at 20161018
  54. ErrorCodeEnum SetCameraSysVar(const CSimpleStringA &newVal);
  55. ErrorCodeEnum ChangeSysvar(ErrorCodeEnum op);
  56. bool SetAutoBright(ErrorCodeEnum nCode);
  57. // CAviHostAPI
  58. virtual void Debug(const char *fmt, ...)
  59. {
  60. va_list arg;
  61. va_start(arg, fmt);
  62. vDbg(fmt, arg);
  63. va_end(arg);
  64. }
  65. virtual int GetActiveCamera();
  66. virtual HINSTANCE GetEntityHinstance();
  67. virtual void OnRecordFailed(bool bRecordDevFault);
  68. virtual void OnRecordEntityExcption();
  69. virtual void OnASectionFinished(const char *pszMessage);
  70. virtual void OnRecordFinished();
  71. ErrorCodeEnum RealSelfCheck();
  72. ContinuRecordStateCode GetContinuRecordState();
  73. bool GetContinuRecordMode() const;
  74. ErrorCodeEnum ExternStartCamera();
  75. ErrorCodeEnum ExternStopCamera();
  76. private:
  77. ErrorCodeEnum LoadConfig(ews_capture_config_t *conf);
  78. // 全程录像摄像头启动失败
  79. void OnWideAngleCameraStartFailed(const char* pszFailedMsg);
  80. virtual void OnSysVarEvent(const char *pszKey, const char *pszValue,const char *pszOldValue,const char *pszEntityName);
  81. virtual void OnLog( const CAutoArray<CUUID> &SubIDs, const CUUID nLogID,const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
  82. const DWORD dwSysError,const DWORD dwUserCode,const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
  83. const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName,const char *pszMessage);
  84. virtual void OnSelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext);
  85. ErrorCodeEnum StartEwsCamera();
  86. void StartCamera();
  87. void StopEwsCamera();
  88. void StopCamera();
  89. ErrorCodeEnum ReStartEwsCamera();
  90. virtual CServerSessionBase *OnNewSession(const char* pszRemoteEntityName, const char * pszClass)
  91. {
  92. LOG_FUNCTION();
  93. LOG_TRACE("%s connected class = %s!", pszRemoteEntityName, pszClass);
  94. return new SurveillanceRecordServiceSession(this);
  95. }
  96. void StartRecord(const char *wmvfilename);
  97. void StopRecord();
  98. void StartEchoRecord(int x, int y, int w, int h);
  99. void StopEchoRecord();
  100. ErrorCodeEnum LoadServerConfig();
  101. bool SecureClientConnect();
  102. void SecureClientRelease();
  103. BOOL RecordInit();
  104. BOOL GetCurrentSectionBySerialID(const char* videoserialid, std::string &strWmvFile);
  105. BOOL UpdateVideoRecord(const char *videofilename);
  106. void UploadVideoRecord(const char *videorecordname=NULL);
  107. void OnEndUploadRecord(const char *videoserialid, int result);
  108. ErrorCodeEnum ExternBeginControl();
  109. ErrorCodeEnum ExternEndControl();
  110. ErrorCodeEnum HandleContinurecordEntityException(const char* pszMessage);
  111. ErrorCodeEnum RestartContinueRecord();
  112. ErrorCodeEnum CheckConfigEWSCameraName();
  113. void AutoCorrectCameraConfigName(long wait_time);
  114. ErrorCodeEnum SetAudioQuality(int iAudioQuality);
  115. ErrorCodeEnum SetAudioNsPolicy(int iNsPolicy);
  116. public:
  117. DeviceTypeEnum m_eDeviceType;
  118. bool m_bRecordAllowed;
  119. bool m_bAutoMode; // 是否自动模式录像
  120. BOOL m_bStartCamera;
  121. BOOL m_bCamConfig; // 是否正在配置摄像头
  122. BOOL m_bRecordPaused; // 是否全程录像暂停
  123. BOOL m_bStartRecord;
  124. BOOL m_bCameraInserted;
  125. ews_capture_config_t conf;
  126. ErrorCodeEnum m_nCameraErrorCode; //摄像头故障码,0:无故障,1:ews摄像头故障
  127. CSimpleStringA m_terminalNo;
  128. CSimpleStringA m_RecordBeginTime;
  129. CUUID m_uid; // 录像会话ID
  130. // 二级分行配置 add by ly@2018/11/12
  131. BOOL m_secondBranchAllowed;
  132. CAutoArray<SecondBranchParam> m_secondBranchParams;
  133. bool m_bNeedRestart; // add by clp 20200102 是否自动重启
  134. //huchen add for ews autocorrect
  135. CSimpleStringA m_strEnvCam; //Env摄像头配置名
  136. CSimpleStringA m_strOptCam; //Opt摄像头配置名
  137. private:
  138. BOOL m_last_disk_overtop; // 最近一次磁盘检查是否占用过高 add by ly at 2017/05/17
  139. int m_max_disk_percent; // 磁盘最大占用百分比 add by ly at 2017/05/16
  140. int m_kept_volume_in;
  141. void *m_pKeeperIn;
  142. ews_capture_t *m_ews_capture;
  143. CSimpleStringA m_CamFriendlyName; // 摄像头友好名称
  144. LONG m_lCaptureEwsCount;
  145. CAutoArray<CUUID> m_arrListener;
  146. int m_iEwsEmptyTimes;
  147. int m_nEwsCameraRestartNum;
  148. SelfChekerClient*m_pSelfcheckClient;
  149. Clibwmvrecord *m_pRecorder;
  150. LibVideoEcho::videoplay_session_t *pSession;
  151. BOOL m_bEchoRecord;
  152. //int m_iCameraState;
  153. BOOL m_bExternStartCam; // 是否外部启动的广角摄像头 add by ly@2018/07/25
  154. private:
  155. CSimpleStringA m_TempDir; // 临时目录
  156. CSimpleStringA m_RecordSaveDir; // 全程录像上传目录
  157. CUploadRecordConnection *m_pConnection;
  158. //HANDLE m_hUploadAnsEvt;
  159. int m_nUploadResult; // 上传结果 -1:调用失败 0:上传失败 1:上传成功
  160. CSimpleStringA m_server1;
  161. int m_server1_port;
  162. CSimpleStringA m_server2;
  163. int m_server2_port;
  164. eAudioOutPutType m_eAudioOutQuality;
  165. bool m_bIsAudioNsOn;
  166. int m_iAudioNsPolicy;
  167. friend class CUploadRecordConnection;
  168. friend struct UploadVideoRecordTask;
  169. };
  170. struct UploadVideoRecordTask : public ITaskSp
  171. {
  172. explicit UploadVideoRecordTask(CSurveillanceRecorderEntity* pEntity)
  173. : m_pEntity(pEntity) {}
  174. void Process() { return m_pEntity->UploadVideoRecord(); }
  175. private:
  176. CSurveillanceRecorderEntity* m_pEntity;
  177. };
  178. }