libvideorecord.h 4.2 KB

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