libvideorecord.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  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. #define REC_MAX_FILE 600000 //wmv文件最大容量10分钟,超出大小后另辟文件保存
  21. #ifndef MAX_PATH
  22. #define MAX_PATH 260
  23. #endif // !MAX_PATH
  24. #ifndef RECORD_WMV_SUFFIX
  25. #define RECORD_WMV_SUFFIX "wmv"
  26. #endif
  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_NO,
  40. RECORD_LOG_DEBUG,
  41. RECORD_LOG_INFO,
  42. RECORD_LOG_ERROR
  43. };
  44. enum eAudioOutPutType{
  45. eUnKnown,
  46. eLowDefinition,
  47. eStandardDefinition,
  48. eHighDefinition,
  49. eUltraHD
  50. };
  51. static const char* audio_quality_type_table[] = {
  52. "eUnKnown",
  53. "eLowDefinition",
  54. "eStandardDefinition",
  55. "eHighDefinition",
  56. "eUltraHD"
  57. };
  58. //录制双向的视频类型,0:单向录制,1:坐席<->大机双录
  59. enum eRvcRecordType{
  60. eSingleSide,
  61. eStand2Agent
  62. };
  63. static const char* record_type_table[] = {
  64. "SingleSide",
  65. "Stand2Agent"
  66. };
  67. typedef struct Rvc_RecordAudioParam_s{
  68. eRvcRecordType eRecordType;
  69. eAudioOutPutType eOutPutType;
  70. bool bIsNsOn;
  71. int iNsPolicy;
  72. int iAudioOutBitRate;
  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. char bottomSubtitleData1[MAX_PATH];
  83. char bottomSubtitleData2[MAX_PATH];
  84. char strRightAgentInfo[MAX_PATH];
  85. } SubtitleParam;
  86. enum eRvcRecordFailedCase{
  87. eInitialFailed,
  88. eFontNULL,
  89. eBeginFailed,
  90. eVideoGetFailed,
  91. eRemoteAudioGetFailed,
  92. eLocalAudioGetFailed,
  93. eSampNotSupport,
  94. eAudioStreamWriteFailed,
  95. eRemoteVideoGetFailed,
  96. eDefault
  97. };
  98. class CHostApi
  99. {
  100. public:
  101. virtual void Debug(record_loglevel elevel, const char *fmt, ...) = 0;
  102. virtual void vDebug(record_loglevel elevel, const char* str, va_list list) = 0;
  103. virtual int GetActiveCamera() = 0;
  104. virtual void OnRecordFailed(eRvcRecordFailedCase eCase, const char *pszMessage, bool bRecordDevFault=false) = 0;
  105. virtual void OnRecordEntityExcption() = 0;
  106. virtual void OnASectionFinished(const char* pszMessage, int iSerialNum, bool bfinished) = 0;
  107. virtual void OnRecordFinished() = 0;
  108. virtual int GetCameraState() = 0;
  109. };
  110. class libvideorecord_impl; //桥接
  111. // 此类是从 libwmvrecord.dll 导出的
  112. class LIBVIDEORECORD_API Clibvideorecord
  113. {
  114. public:
  115. 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);
  116. ~Clibvideorecord(void);
  117. // //开始记录,文件名videofilename为空则以当前系统时间做参数
  118. bool StartVideoRecord(
  119. int fps,
  120. int videoquality,
  121. eVideoFormat eFormat,
  122. Rvc_RecordAudioParam_t* pAudioParam,
  123. SubtitleParam *subtitleParam = NULL,
  124. bool bWholeSection = false,
  125. bool bSessionManage = false,
  126. const char *pathname = NULL,
  127. int pathlength = 0,
  128. const char *videofilename = NULL,
  129. int filenamelength = 0
  130. );
  131. bool StopVideoRecord(); //退出
  132. void CloseVideoFile(); //结束当前录像
  133. bool ReNameVideoFile(const char*newfilename); //session变化,修改当前录像文件名
  134. bool SetRightVideoWaterMark(const char* strWaterMark); //设置拼接后右侧视频的水印
  135. bool PauseRecord(); //暂停录像
  136. bool ContinueRecord(); //继续录像
  137. private:
  138. libvideorecord_impl* m_pImpl;
  139. };