mod_recorder.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #pragma once
  2. #include "SpBase.h"
  3. #include "SpIni.h"
  4. #include "libvideorecord.h"
  5. #include "EventCode.h"
  6. #include "fileutil.h"
  7. #include "array.h"
  8. #include <memutil.h>
  9. #include <algorithm>
  10. #include <assert.h>
  11. #include "rvc_media_common.h"
  12. #include "Recorder_client_g.h"
  13. #include "Recorder_def_g.h"
  14. #include "Recorder_server_g.h"
  15. #include "recordinfo.h"
  16. namespace Recorder {
  17. class CRecorderEntity : public CEntityBase, public CHostApi, public ILogListener, public ISysVarListener
  18. {
  19. public:
  20. CRecorderEntity() : m_bStarted(false), m_pRecorder(NULL), m_bEncFlag(true){
  21. m_strHttpServerAPI = RVC_UPLOAD_VIDEORECORDING_HTTP_API;
  22. m_iHttpTimeOut = RVC_HTTPTIMEOUT;
  23. m_strHttpServerAddr = NULL;
  24. m_strAppVersion = NULL;
  25. m_strTerminalId = NULL;
  26. memset(m_strRecordName, 0, MAX_PATH);
  27. m_eBusinessStatus = eInterrupt;
  28. }
  29. virtual ~CRecorderEntity() {}
  30. virtual const char* GetEntityName() const { return "Recorder"; }
  31. virtual bool IsService() const { return true; }
  32. virtual CServerSessionBase* OnNewSession(const char* pszRemoteEntityName, const char* pszClass);
  33. virtual void OnPreStart(CAutoArray<CSimpleStringA> strArgs, CSmartPointer<ITransactionContext> pTransactionContext);
  34. virtual void OnPreClose(EntityCloseCauseEnum eCloseCause, CSmartPointer<ITransactionContext> pTransactionContext);
  35. ErrorCodeEnum __OnStart(ErrorCodeEnum preOperationError);
  36. ErrorCodeEnum __OnClose(ErrorCodeEnum preOperationError);
  37. bool InitRecorder();
  38. bool ReleaseRecorder();
  39. virtual void OnStarted();
  40. virtual void Debug(record_loglevel elevel, const char* fmt, ...);
  41. virtual void vDebug(record_loglevel elevel, const char* str, va_list list);
  42. virtual int GetRecordCamera();
  43. virtual void OnRecordFailed(eRvcRecordFailedCase eCase, const char* pszMessage, bool bRecordDevFault);
  44. virtual void OnRecordEntityExcption();
  45. virtual void OnRecordFinished();
  46. virtual void OnASectionFinished(const char* pszMessage, int iSerialNum, bool bfinished);
  47. virtual int GetCameraState();
  48. virtual void OnLog(const CAutoArray<CUUID>& SubIDs, const CUUID nLogID, const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
  49. const DWORD dwSysError, const DWORD dwUserCode, const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
  50. const CAutoArray<DWORD>& Param, const char* pszEntityName, const char* pszModuleName, const char* pszMessage, const linkContext& pLinkInfo);
  51. void StartRecord(const char* videofilename);
  52. void StopRecord();
  53. bool GetStartFlag() { return m_bStarted; }
  54. void SetRecordSessionID(const char* strRecordID);
  55. void GetRecordSessionID(char* strRecordID, size_t uLen);
  56. private:
  57. virtual void OnSysVarEvent(const char* pszKey, const char* pszValue, const char* pszOldValue, const char* pszEntityName);
  58. virtual void OnSelfTest(EntityTestEnum eTestType, CSmartPointer<ITransactionContext> pTransactionContext);
  59. DeviceTypeEnum RvcGetDeviceType();
  60. int HandleSaveVideoRecord(const char* videofilename);
  61. int GetRecordVideoInfo(const char* videofilename, char* strSession, size_t uSessionLen, int* iSeriesNum, char* strFormat, size_t uFormatLen);
  62. int HandleFinishedVideoRecord(const char* videofilename);
  63. int SaveExceptionRecordVideos();
  64. int HandleEncryptVideoRecord(const char* videofilename);
  65. ErrorCodeEnum LoadEntityConfig();
  66. ErrorCodeEnum PostVideoRecordInfos();
  67. ErrorCodeEnum AddToVideoRecordList(const char* videofilename);
  68. ErrorCodeEnum HandleExceptionRecordVideos();
  69. private:
  70. DeviceTypeEnum m_eDeviceType;
  71. int m_iActiveCamera;
  72. int m_iCameraState;
  73. CAutoArray<CUUID> m_arrListener;
  74. bool m_bStarted;
  75. Clibvideorecord* m_pRecorder;
  76. CSimpleStringA m_terminalNo;
  77. CSimpleStringA m_TempDir;
  78. CSimpleStringA m_RecordSaveDir;
  79. bool m_bEncFlag;
  80. CSimpleStringA m_strHttpServerAddr;
  81. CSimpleStringA m_strHttpServerAPI;
  82. int m_iHttpTimeOut;
  83. CSimpleStringA m_strAppVersion;
  84. CSimpleStringA m_strTerminalId;
  85. vector<record_item_t*> m_vRecordList;
  86. char m_strRecordName[MAX_PATH];
  87. eRvcBusinessStatus m_eBusinessStatus;
  88. };
  89. class RecordServiceSession : public RecorderSerVice_ServerSessionBase
  90. {
  91. public:
  92. explicit RecordServiceSession(CRecorderEntity* pEntity) : m_pEntity(pEntity) {}
  93. virtual void Handle_StartTransactionRecord(SpReqAnsContext<RecorderSerVice_StartTransactionRecord_Req, RecorderSerVice_StartTransactionRecord_Ans>::Pointer ctx);
  94. virtual void Handle_StopTransactionRecord(SpReqAnsContext<RecorderSerVice_StopTransactionRecord_Req, RecorderSerVice_StopTransactionRecord_Ans>::Pointer ctx);
  95. private:
  96. CRecorderEntity* m_pEntity;
  97. };
  98. }