libvideorecord.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. #pragma once
  2. // 下列 ifdef 块是创建使从 DLL 导出更简单的
  3. // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 LIBRECORD_EXPORTS
  4. // 符号编译的。在使用此 DLL 的
  5. // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
  6. // LIBRECORD_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
  7. // 符号视为是被导出的。
  8. #ifdef _MSC_VER
  9. #ifdef LIBVIDEORECORD_EXPORTS
  10. #define LIBVIDEORECORD_API __declspec(dllexport)
  11. #else
  12. #define LIBVIDEORECORD_API __declspec(dllimport)
  13. #endif
  14. # elif ( defined(__GNUC__) && __GNUC__ >= 4 )
  15. #define LIBVIDEORECORD_API __attribute__((visibility("default")))
  16. #else
  17. #define LIBVIDEORECORD_API
  18. #endif
  19. #include <stdarg.h>
  20. #include <stdio.h>
  21. #ifndef REC_MAX_FILE
  22. #define REC_MAX_FILE 600000 //录像文件最大容量10分钟,超出大小后另辟文件保存
  23. #endif
  24. #ifndef MAX_PATH
  25. #define MAX_PATH 260
  26. #endif // !MAX_PATH
  27. #ifndef RECORD_MP4_SUFFIX
  28. #define RECORD_MP4_SUFFIX "mp4"
  29. #endif
  30. enum eVideoFormat {
  31. eWMV,
  32. eMP4
  33. };
  34. enum eStereoArrayType{
  35. eLocalLeft,
  36. eRemoteLeft
  37. };
  38. enum record_loglevel {
  39. RECORD_LOG_DEBUG,
  40. RECORD_LOG_INFO,
  41. RECORD_LOG_WARN,
  42. RECORD_LOG_ERROR,
  43. RECORD_LOG_FATAL
  44. };
  45. enum eAudioOutPutType{
  46. eUnKnown,
  47. eLowDefinition,
  48. eStandardDefinition,
  49. eHighDefinition,
  50. eUltraHD
  51. };
  52. static const char* audio_quality_type_table[] = {
  53. "eUnKnown",
  54. "eLowDefinition",
  55. "eStandardDefinition",
  56. "eHighDefinition",
  57. "eUltraHD"
  58. };
  59. //录制双向的视频类型,0:单向录制,1:坐席<->大机双录
  60. enum eRvcRecordType{
  61. eSingleSide,
  62. eStand2Agent
  63. };
  64. static const char* record_type_table[] = {
  65. "SingleSide",
  66. "Stand2Agent"
  67. };
  68. typedef struct Rvc_RecordAudioParam_s{
  69. eRvcRecordType eRecordType;
  70. eAudioOutPutType eOutPutType;
  71. bool bIsNsOn;
  72. int iNsPolicy;
  73. bool bIsTransOn;
  74. int iAudioChannels;
  75. bool bMuteAudioMode;
  76. }Rvc_RecordAudioParam_t;
  77. typedef struct
  78. {
  79. bool bSubtitle;
  80. bool bSubtitleSection;
  81. char topSubtitleData[MAX_PATH];
  82. #ifdef _WIN32
  83. char bottomSubtitleData1[MAX_PATH];
  84. char bottomSubtitleData2[MAX_PATH];
  85. char strRightAgentInfo[MAX_PATH];
  86. #else
  87. wchar_t bottomSubtitleData1[MAX_PATH];
  88. wchar_t bottomSubtitleData2[MAX_PATH];
  89. wchar_t strRightAgentInfo[MAX_PATH];
  90. #endif
  91. } SubtitleParam;
  92. enum eRvcRecordFailedCase{
  93. eInitialFailed,
  94. eFontNULL,
  95. eBeginFailed,
  96. eVideoGetFailed,
  97. eRemoteAudioGetFailed,
  98. eLocalAudioGetFailed,
  99. eSampNotSupport,
  100. eAudioStreamWriteFailed,
  101. eRemoteVideoGetFailed,
  102. eDefault
  103. };
  104. class CHostApi
  105. {
  106. public:
  107. virtual void Debug(record_loglevel elevel, const char *fmt, ...) = 0;
  108. virtual void vDebug(record_loglevel elevel, const char* str, va_list list) = 0;
  109. virtual int GetRecordCamera() = 0;
  110. virtual void OnRecordFailed(eRvcRecordFailedCase eCase, const char *pszMessage, bool bRecordDevFault=false) = 0;
  111. virtual void OnRecordEntityExcption() = 0;
  112. virtual void OnASectionFinished(const char* pszMessage, int iSerialNum, bool bfinished) = 0;
  113. virtual void OnRecordFinished() = 0;
  114. virtual int GetCameraState() = 0;
  115. };
  116. class libvideorecord_impl; //桥接
  117. // 此类是从 libwmvrecord.dll 导出的
  118. class LIBVIDEORECORD_API Clibvideorecord
  119. {
  120. public:
  121. Clibvideorecord(bool*pResult, CHostApi *pHostAPI,const char* audioqueuename, const char* videoqueuename, const char* videoqueue2name, const char* salesaudioqueuename=NULL, const char* remotevideoqueuename=NULL, const char* remoteaudioqueuename=NULL);
  122. ~Clibvideorecord(void);
  123. // //开始记录,文件名videofilename为空则以当前系统时间做参数
  124. bool StartVideoRecord(
  125. int fps,
  126. int videoquality,
  127. eVideoFormat eFormat,
  128. Rvc_RecordAudioParam_t* pAudioParam,
  129. SubtitleParam *subtitleParam = NULL,
  130. bool bWholeSection = false,
  131. bool bSessionManage = false,
  132. const char *pathname = NULL,
  133. int pathlength = 0,
  134. const char *videofilename = NULL,
  135. int filenamelength = 0
  136. );
  137. bool StopVideoRecord(); //退出
  138. void CloseVideoFile(); //结束当前录像
  139. bool ReNameVideoFile(const char*newfilename); //session变化,修改当前录像文件名
  140. #ifdef _WIN32
  141. bool SetRightVideoWaterMark(const char* strWaterMark); //设置拼接后右侧视频的水印
  142. #else
  143. bool SetRightVideoWaterMark(const wchar_t* strWaterMark); //设置拼接后右侧视频的水印
  144. #endif
  145. bool PauseRecord(); //暂停录像
  146. bool ContinueRecord(); //继续录像
  147. private:
  148. libvideorecord_impl* m_pImpl;
  149. };