123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- #pragma once
- #include "SpBase.h"
- #include "SpIni.h"
- #include "ews_capture.h"
- #include "volumekeeper.h"
- #include "Event.h"
- #include "mod_selfchecker/SelfChecker_client_g.h"
- #include "mod_selfchecker/SelfChecker_def_g.h"
- #include "SurveillanceRecorder_server_g.h"
- #include "SurveillanceRecorder_msg_g.h"
- #include "libwmvrecord.h"
- #include "libvideoecho.h"
- #include "UploadRecord.h"
- #include "EventCode.h"
- using namespace SelfChecker;
- namespace SurveillanceRecorder {
- typedef struct
- {
- CSimpleStringA szDevicePrefix;
- BOOL bAutoMode;
- } SecondBranchParam;
- class CSurveillanceRecorderEntity;
- class SelfChekerClient:public SelfCheckerService_ClientBase
- {
- public:
- explicit SelfChekerClient(CSurveillanceRecorderEntity *pEntity);
- };
- class SurveillanceRecordServiceSession : public SurveillanceRecorderService_ServerSessionBase
- {
- public:
- explicit SurveillanceRecordServiceSession(CSurveillanceRecorderEntity *pEntity) : m_pEntity(pEntity){}
- virtual void Handle_GetContinuRecordInfo(SpReqAnsContext<SurveillanceRecorderService_GetContinuRecordInfo_Req, SurveillanceRecorderService_GetContinuRecordInfo_Ans>::Pointer ctx);
- virtual void Handle_GetContinuRecordState(SpReqAnsContext<SurveillanceRecorderService_GetContinuRecordState_Req, SurveillanceRecorderService_GetContinuRecordState_Ans>::Pointer ctx);
- virtual void Handle_GetContinuRecordMode(SpReqAnsContext<SurveillanceRecorderService_GetContinuRecordMode_Req, SurveillanceRecorderService_GetContinuRecordMode_Ans>::Pointer ctx);
- virtual void Handle_StartEwsCamera(SpReqAnsContext<SurveillanceRecorderService_StartEwsCamera_Req, SurveillanceRecorderService_StartEwsCamera_Ans>::Pointer ctx);
- virtual void Handle_StopEwsCamera(SpReqAnsContext<SurveillanceRecorderService_StopEwsCamera_Req, SurveillanceRecorderService_StopEwsCamera_Ans>::Pointer ctx);
- private:
- CSurveillanceRecorderEntity *m_pEntity;
- };
- class CSurveillanceRecorderEntity: public CEntityBase, public ISysVarListener, public ILogListener, public ITimerListener, public CWmvHostApi, public LibVideoEcho::CVideoEchoHostApi
- {
- public:
- 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),
- 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),
- m_bIsAudioNsOn(false), m_iAudioNsPolicy(2){}
- virtual ~CSurveillanceRecorderEntity() { /*nothing to implement*/ }
- virtual const char *GetEntityName() const { return "SurveillanceRecorder"; }
- virtual bool IsService() const{ return true; }
- virtual void OnPreStart(CAutoArray<CSimpleStringA> strArgs,CSmartPointer<ITransactionContext> pTransactionContext);
- virtual void OnStarted();
- virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer<ITransactionContext> pTransactionContext);
- virtual void OnTimeout(DWORD dwTimerID);
- // add by ly at 20161018
- ErrorCodeEnum SetCameraSysVar(const CSimpleStringA &newVal);
- ErrorCodeEnum ChangeSysvar(ErrorCodeEnum op);
- bool SetAutoBright(ErrorCodeEnum nCode);
- // CAviHostAPI
- virtual void Debug(const char *fmt, ...)
- {
- va_list arg;
- va_start(arg, fmt);
- vDbg(fmt, arg);
- va_end(arg);
- }
- virtual int GetActiveCamera();
- virtual HINSTANCE GetEntityHinstance();
- virtual void OnRecordFailed(bool bRecordDevFault);
- virtual void OnRecordEntityExcption();
- virtual void OnASectionFinished(const char *pszMessage);
- virtual void OnRecordFinished();
- ErrorCodeEnum RealSelfCheck();
- ContinuRecordStateCode GetContinuRecordState();
- bool GetContinuRecordMode() const;
- ErrorCodeEnum ExternStartCamera();
- ErrorCodeEnum ExternStopCamera();
- private:
- ErrorCodeEnum LoadConfig(ews_capture_config_t *conf);
- // 全程录像摄像头启动失败
- void OnWideAngleCameraStartFailed(const char* pszFailedMsg);
- virtual void OnSysVarEvent(const char *pszKey, const char *pszValue,const char *pszOldValue,const char *pszEntityName);
- virtual void OnLog( const CAutoArray<CUUID> &SubIDs, const CUUID nLogID,const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
- const DWORD dwSysError,const DWORD dwUserCode,const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
- const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName,const char *pszMessage);
- virtual void OnSelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext);
- ErrorCodeEnum StartEwsCamera();
- void StartCamera();
- void StopEwsCamera();
- void StopCamera();
- ErrorCodeEnum ReStartEwsCamera();
- virtual CServerSessionBase *OnNewSession(const char* pszRemoteEntityName, const char * pszClass)
- {
- LOG_FUNCTION();
- LOG_TRACE("%s connected class = %s!", pszRemoteEntityName, pszClass);
- return new SurveillanceRecordServiceSession(this);
- }
- void StartRecord(const char *wmvfilename);
- void StopRecord();
- void StartEchoRecord(int x, int y, int w, int h);
- void StopEchoRecord();
- ErrorCodeEnum LoadServerConfig();
- bool SecureClientConnect();
- void SecureClientRelease();
- BOOL RecordInit();
- BOOL GetCurrentSectionBySerialID(const char* videoserialid, std::string &strWmvFile);
- BOOL UpdateVideoRecord(const char *videofilename);
- void UploadVideoRecord(const char *videorecordname=NULL);
- void OnEndUploadRecord(const char *videoserialid, int result);
- ErrorCodeEnum ExternBeginControl();
- ErrorCodeEnum ExternEndControl();
- ErrorCodeEnum HandleContinurecordEntityException(const char* pszMessage);
- ErrorCodeEnum RestartContinueRecord();
- ErrorCodeEnum CheckConfigEWSCameraName();
-
- void AutoCorrectCameraConfigName(long wait_time);
- ErrorCodeEnum SetAudioQuality(int iAudioQuality);
- ErrorCodeEnum SetAudioNsPolicy(int iNsPolicy);
- public:
- DeviceTypeEnum m_eDeviceType;
- bool m_bRecordAllowed;
- bool m_bAutoMode; // 是否自动模式录像
- BOOL m_bStartCamera;
- BOOL m_bCamConfig; // 是否正在配置摄像头
- BOOL m_bRecordPaused; // 是否全程录像暂停
- BOOL m_bStartRecord;
- BOOL m_bCameraInserted;
- ews_capture_config_t conf;
- ErrorCodeEnum m_nCameraErrorCode; //摄像头故障码,0:无故障,1:ews摄像头故障
- CSimpleStringA m_terminalNo;
- CSimpleStringA m_RecordBeginTime;
- CUUID m_uid; // 录像会话ID
- // 二级分行配置 add by ly@2018/11/12
- BOOL m_secondBranchAllowed;
- CAutoArray<SecondBranchParam> m_secondBranchParams;
-
- bool m_bNeedRestart; // add by clp 20200102 是否自动重启
- //huchen add for ews autocorrect
- CSimpleStringA m_strEnvCam; //Env摄像头配置名
- CSimpleStringA m_strOptCam; //Opt摄像头配置名
- private:
- BOOL m_last_disk_overtop; // 最近一次磁盘检查是否占用过高 add by ly at 2017/05/17
- int m_max_disk_percent; // 磁盘最大占用百分比 add by ly at 2017/05/16
- int m_kept_volume_in;
- void *m_pKeeperIn;
- ews_capture_t *m_ews_capture;
- CSimpleStringA m_CamFriendlyName; // 摄像头友好名称
- LONG m_lCaptureEwsCount;
- CAutoArray<CUUID> m_arrListener;
- int m_iEwsEmptyTimes;
- int m_nEwsCameraRestartNum;
- SelfChekerClient*m_pSelfcheckClient;
- Clibwmvrecord *m_pRecorder;
- LibVideoEcho::videoplay_session_t *pSession;
- BOOL m_bEchoRecord;
- //int m_iCameraState;
- BOOL m_bExternStartCam; // 是否外部启动的广角摄像头 add by ly@2018/07/25
- private:
- CSimpleStringA m_TempDir; // 临时目录
- CSimpleStringA m_RecordSaveDir; // 全程录像上传目录
- CUploadRecordConnection *m_pConnection;
- //HANDLE m_hUploadAnsEvt;
- int m_nUploadResult; // 上传结果 -1:调用失败 0:上传失败 1:上传成功
- CSimpleStringA m_server1;
- int m_server1_port;
- CSimpleStringA m_server2;
- int m_server2_port;
- eAudioOutPutType m_eAudioOutQuality;
- bool m_bIsAudioNsOn;
- int m_iAudioNsPolicy;
- friend class CUploadRecordConnection;
- friend struct UploadVideoRecordTask;
- };
- struct UploadVideoRecordTask : public ITaskSp
- {
- explicit UploadVideoRecordTask(CSurveillanceRecorderEntity* pEntity)
- : m_pEntity(pEntity) {}
- void Process() { return m_pEntity->UploadVideoRecord(); }
- private:
- CSurveillanceRecorderEntity* m_pEntity;
- };
- }
|