mod_recorder.h 5.2 KB

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