utilities.cpp 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. /*
  2. * CallingAPI.cpp
  3. *
  4. * Created on: 2021年12月10日
  5. * Author: Admin
  6. */
  7. #include "utilities.h"
  8. #include "utils/Log.h"
  9. #include "string.h"
  10. #include "sip_config.h"
  11. #include "storage/StoragePreferences.h"
  12. #include "sip_config.h"
  13. #include <entry/EasyUIContext.h>
  14. #include <mutex>
  15. #include "base/strings.hpp"
  16. #include "base/base.hpp"
  17. #include "utilities.h"
  18. #include "base/time.hpp"
  19. #include "base/strings.hpp"
  20. #include "base/prefs.hpp"
  21. #include "base/json_object.h"
  22. #include "manager/ConfigManager.h"
  23. #include "security/SecurityManager.h"
  24. #include "zkaudio.h"
  25. #include "voip/telephone_audio_initializer.h"
  26. /**
  27. * 仅用于测试,默认不发送视频
  28. */
  29. void TelephoneAutoTransmitVideo(bool transmit);
  30. std::string GetDeviceUid();
  31. static std::mutex telephone_mutex;
  32. static voip::Telephone* telephone = NULL;
  33. voip::Telephone* GetTelephone() {
  34. std::lock_guard<std::mutex> lock(telephone_mutex);
  35. if (telephone != NULL) {
  36. return telephone;
  37. }
  38. voip::Configuration conf;
  39. #if 0
  40. std::string password = StoragePreferences::getString(SIP_REG_PASSWORD,
  41. SIP_REG_PASSWORD_DEFAULT);
  42. conf.id_uri = "sip:RM-1-1-1-1-1-1@jhws.top;transport=tcp";
  43. // conf.id_uri = "sip:RM-414-1-1-1-1-7@test.jhws.top";
  44. conf.server_uri = "sip:test.jhws.top";
  45. // conf.door_uri = "sip:OD-414-1-1-1-0-2@jhws.top";
  46. conf.user_name = "RM-1-1-1-1-1-1";
  47. conf.password = password;
  48. conf.port = 58583;
  49. #else
  50. std::string domain = StoragePreferences::getString(SIP_REG_DOMAIN,
  51. SIP_REG_DOMAIN_DEFAULT);
  52. std::string number = StoragePreferences::getString(SIP_REG_ACCOUNT,
  53. SIP_REG_ACCOUNT_DEFAULT);
  54. std::string password = StoragePreferences::getString(SIP_REG_PASSWORD,
  55. SIP_REG_PASSWORD_DEFAULT);
  56. int port = StoragePreferences::getInt(SIP_REG_PORT, SIP_REG_PORT_DEFAULT);
  57. // conf.id_uri = URI(number);
  58. conf.id_uri = URI(number, domain);
  59. conf.server_uri = base::format("sip:%s:%d", domain.c_str(), port);
  60. // conf.server_uri = "sip:new-sip.jhws.top:58583";
  61. conf.user_name = number;
  62. conf.password = password;
  63. conf.enable_ice = StoragePreferences::getBool(SIP_ENABLE_ICE, false);
  64. std::string stun_server =
  65. base::trim(StoragePreferences::getString(SIP_STUN_TURN_SERVER, ""));
  66. conf.stun_server = stun_server;
  67. conf.turn_server = stun_server;
  68. // conf.user_agent = "JHCloud-linux-i1.1.0";
  69. // conf.headers["SID"] = GetDeviceUid();
  70. // conf.headers["CID"] = "jhylf14988-com.jhws";
  71. // conf.headers["JWT"] = StoragePreferences::getString(SIP_JHWS_TOKEN, "");
  72. // LOGD("deviceuid: %s", GetDeviceUid().c_str());
  73. // LOGD("id_url: %s", conf.id_uri.c_str());
  74. // LOGD("server_url: %s", conf.server_uri.c_str());
  75. // LOGD("user_name: %s", conf.user_name.c_str());
  76. // LOGD("password: %s", conf.password.c_str());
  77. // LOGD("user_agent: %s", conf.user_agent.c_str());
  78. #endif
  79. // bool enable_video = StoragePreferences::getBool(SIP_ENABLE_VIDEO, true);
  80. bool enable_video = StoragePreferences::getBool(SIP_ENABLE_VIDEO, false);
  81. conf.auto_transmit_video_to_remote = enable_video;
  82. //单实例
  83. telephone = new voip::Telephone(conf);
  84. #if 0
  85. //设置消回音、增益等参数
  86. base::AcousticEchoCancellater::Configuration aec_conf;
  87. aec_conf.sample_rate = 8000; //固定8K
  88. aec_conf.nearend_channel = 1;
  89. aec_conf.farend_channel = 1;
  90. aec_conf.comfort_noise_enable = 0;
  91. base::AudioProcessChain::Configuration apc_conf;
  92. apc_conf.number_of_channels = 1;
  93. apc_conf.sample_rate = 8000; //固定8K
  94. apc_conf.anr.enable = 1; //降低噪音
  95. // apc_conf.eq.enable = 1;
  96. apc_conf.agc.enable = 1;
  97. for (int i = 0; i < array_length(apc_conf.eq.gain_db); ++i) {
  98. //调节EQ,使发送给对方的声音音量更大
  99. // apc_conf.eq.gain_db[i] = 10;
  100. }
  101. zk_audio_input_set_volume_native(0, 0);
  102. zk_audio_input_set_volume_native(1, 12);
  103. zk_audio_output_set_volume_native(15);
  104. // telephone->SetInputAecApcConfig(aec_conf, apc_conf);
  105. #endif
  106. #if 1
  107. const int kSampleRate = 8000;//固定8K
  108. //设置消回音等参数
  109. base::AcousticEchoCancellater::Configuration aec_conf;
  110. aec_conf.sample_rate = kSampleRate; //固定8K
  111. aec_conf.nearend_channel = 1;
  112. aec_conf.farend_channel = 1;
  113. {
  114. aec_conf.comfort_noise_enable = 0;
  115. unsigned int suppression_mode_intensity[7] = { 5, 5, 5, 5, 4, 4, 4 };
  116. memcpy((void*)aec_conf.suppression_mode_intensity, (void*)suppression_mode_intensity,
  117. (int) sizeof(suppression_mode_intensity));
  118. }
  119. //进一步处理录音数据
  120. base::AudioProcessChain::Configuration apc_conf;
  121. apc_conf.number_of_channels = 1;
  122. apc_conf.sample_rate = kSampleRate;
  123. {
  124. apc_conf.anr.enable = 1; //降低噪音
  125. for (int i = 0; i < array_length(apc_conf.anr.intensity); ++i) {
  126. apc_conf.anr.intensity[i] = 5;
  127. }
  128. }
  129. {
  130. apc_conf.eq.enable = 0;//增大音量
  131. for(int i = 0; i < array_length(apc_conf.eq.gain_db); ++i) {
  132. apc_conf.eq.gain_db[i] = 8;
  133. }
  134. }
  135. {
  136. apc_conf.agc.enable = 0;
  137. short def_compression_ratio_input[7] = { -65, -55, -48, -25, -18, -12, 0 };
  138. short def_compression_ratio_output[7] = { -65, -50, -30, -15, -8, -2, 0 };
  139. memcpy(apc_conf.agc.compression_ratio_input, def_compression_ratio_input,
  140. (int) sizeof(def_compression_ratio_input));
  141. memcpy(apc_conf.agc.compression_ratio_output, def_compression_ratio_output,
  142. (int) sizeof(def_compression_ratio_output));
  143. }
  144. zk_audio_input_set_volume_native(0, 0);
  145. zk_audio_input_set_volume_native(1, 6);
  146. telephone->SetInputPcmGainSize(10.0);
  147. telephone->SetInputAecApcConfig(aec_conf, apc_conf);
  148. #else
  149. //也可以从配置文件中设置 Aec、 Apc、 输入输出音量
  150. const std::string filename =
  151. CONFIGMANAGER->getResFilePath("telephone_audio_config.json");
  152. TelephoneAudioInitializer::Setup(telephone, filename);
  153. #endif
  154. return telephone;
  155. }
  156. void ReleaseTelephone() {
  157. std::lock_guard<std::mutex> lock(telephone_mutex);
  158. if (telephone != NULL) {
  159. deleteptr(&telephone);
  160. }
  161. }
  162. std::string GetVersion(){
  163. return "1.0.0";
  164. }
  165. int GetVersionNo() {
  166. return 3;
  167. }
  168. std::string GetDeviceUid() {
  169. unsigned char devID[16];
  170. int ret = SECURITYMANAGER->getDevID(devID);
  171. if (ret <= 0) {
  172. return "";
  173. }
  174. std::string str;
  175. for (int i = 0; i < ret; ++i) {
  176. str += base::format("%02X", devID[i]);
  177. }
  178. return str;
  179. }