libvideorecord.h 4.0 KB

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