tencent_trtc_cloud_plugin.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. #include "include/tencent_trtc_cloud/tencent_trtc_cloud_plugin.h"
  2. // This must be included before many other Windows headers.
  3. #include <windows.h>
  4. // For getPlatformVersion; remove unless needed for your plugin implementation.
  5. #include <VersionHelpers.h>
  6. #include <flutter/method_channel.h>
  7. #include <flutter/plugin_registrar_windows.h>
  8. #include <flutter/standard_method_codec.h>
  9. #include <string>
  10. #include <map>
  11. #include <memory>
  12. #include <sstream>
  13. #include "include/TRTC/ITRTCCloud.h"
  14. #include "include/TRTC/TRTCCloudDef.h"
  15. #include "src/trtc_cloud.h"
  16. using trtc_sdk_flutter::SDKManager;
  17. namespace {
  18. class TencentTrtcCloudPlugin : public flutter::Plugin {
  19. public:
  20. static void RegisterWithRegistrar(flutter::PluginRegistrarWindows *registrar);
  21. TencentTrtcCloudPlugin();
  22. virtual ~TencentTrtcCloudPlugin();
  23. private:
  24. // Called when a method is called on this plugin's channel from Dart.
  25. void HandleMethodCall(
  26. const flutter::MethodCall<flutter::EncodableValue> &method_call,
  27. std::unique_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
  28. private:
  29. bool isInit_ = false;
  30. UP<SDKManager> sdk_manager_;
  31. };
  32. // static
  33. void TencentTrtcCloudPlugin::RegisterWithRegistrar(
  34. flutter::PluginRegistrarWindows *registrar) {
  35. auto channel =
  36. MK_SP<flutter::MethodChannel<flutter::EncodableValue>>(
  37. registrar->messenger(), "trtcCloudChannel",
  38. &flutter::StandardMethodCodec::GetInstance());
  39. auto plugin = std::make_unique<TencentTrtcCloudPlugin>();
  40. plugin->sdk_manager_ = std::make_unique<SDKManager>(channel, registrar->texture_registrar());
  41. channel->SetMethodCallHandler(
  42. [plugin_pointer = plugin.get()](const auto &call, auto result) {
  43. plugin_pointer->HandleMethodCall(call, std::move(result));
  44. });
  45. registrar->AddPlugin(std::move(plugin));
  46. }
  47. TencentTrtcCloudPlugin::TencentTrtcCloudPlugin() {}
  48. TencentTrtcCloudPlugin::~TencentTrtcCloudPlugin() {}
  49. void TencentTrtcCloudPlugin::HandleMethodCall(
  50. const flutter::MethodCall<flutter::EncodableValue> &method_call,
  51. std::unique_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
  52. std::string methodName = method_call.method_name();
  53. if (methodName.compare("getPlatformVersion") == 0) {
  54. std::ostringstream version_stream;
  55. version_stream << "Windows ";
  56. if (IsWindows10OrGreater()) {
  57. version_stream << "10+";
  58. } else if (IsWindows8OrGreater()) {
  59. version_stream << "8";
  60. } else if (IsWindows7OrGreater()) {
  61. version_stream << "7";
  62. }
  63. result->Success(flutter::EncodableValue(version_stream.str()));
  64. return;
  65. }
  66. if(methodName.compare("sharedInstance") == 0) {
  67. isInit_ = true;
  68. sdk_manager_->sharedInstance(method_call, std::move(result));
  69. return;
  70. }
  71. // 未进行单例初始化
  72. if(!isInit_) {
  73. result->Success(nullptr);
  74. return;
  75. }
  76. if(methodName.compare("destroySharedInstance") == 0) {
  77. isInit_ = false;
  78. sdk_manager_->destroySharedInstance(method_call, std::move(result));
  79. } else if(methodName.compare("getSDKVersion") == 0) {
  80. sdk_manager_->getSDKVersion(method_call, std::move(result));
  81. } else if(methodName.compare("enterRoom") == 0) {
  82. sdk_manager_->enterRoom(method_call, std::move(result));
  83. } else if(methodName.compare("switchRoom") == 0) {
  84. sdk_manager_->switchRoom(method_call, std::move(result));
  85. } else if(methodName.compare("exitRoom") == 0) {
  86. sdk_manager_->exitRoom(method_call, std::move(result));
  87. } else if(methodName.compare("connectOtherRoom") == 0) {
  88. sdk_manager_->connectOtherRoom(method_call, std::move(result));
  89. } else if(methodName.compare("disconnectOtherRoom") == 0) {
  90. sdk_manager_->disconnectOtherRoom(method_call, std::move(result));
  91. } else if(methodName.compare("switchRole") == 0) {
  92. sdk_manager_->switchRole(method_call, std::move(result));
  93. } else if(methodName.compare("setDefaultStreamRecvMode") == 0) {
  94. sdk_manager_->setDefaultStreamRecvMode(method_call, std::move(result));
  95. } else if(methodName.compare("startPublishing") == 0) {
  96. sdk_manager_->startPublishing(method_call, std::move(result));
  97. } else if(methodName.compare("stopPublishing") == 0) {
  98. sdk_manager_->stopPublishing(method_call, std::move(result));
  99. } else if(methodName.compare("startPublishCDNStream") == 0) {
  100. sdk_manager_->startPublishCDNStream(method_call, std::move(result));
  101. } else if(methodName.compare("stopPublishCDNStream") == 0) {
  102. sdk_manager_->stopPublishCDNStream(method_call, std::move(result));
  103. } else if(methodName.compare("setMixTranscodingConfig") == 0) {
  104. sdk_manager_->setMixTranscodingConfig(method_call, std::move(result));
  105. } else if(methodName.compare("startLocalPreview") == 0) {
  106. sdk_manager_->startLocalPreview(method_call, std::move(result));
  107. } else if(methodName.compare("stopLocalPreview") == 0) {
  108. sdk_manager_->stopLocalPreview(method_call, std::move(result));
  109. } else if(methodName.compare("startRemoteView") == 0) {
  110. sdk_manager_->startRemoteView(method_call, std::move(result));
  111. } else if(methodName.compare("stopRemoteView") == 0) {
  112. sdk_manager_->stopRemoteView(method_call, std::move(result));
  113. } else if(methodName.compare("stopAllRemoteView") == 0) {
  114. sdk_manager_->stopAllRemoteView(method_call, std::move(result));
  115. } else if(methodName.compare("muteRemoteAudio") == 0) {
  116. sdk_manager_->muteRemoteAudio(method_call, std::move(result));
  117. } else if(methodName.compare("muteAllRemoteAudio") == 0) {
  118. sdk_manager_->muteAllRemoteAudio(method_call, std::move(result));
  119. } else if(methodName.compare("setRemoteAudioVolume") == 0) {
  120. sdk_manager_->setRemoteAudioVolume(method_call, std::move(result));
  121. } else if(methodName.compare("setAudioCaptureVolume") == 0) {
  122. sdk_manager_->setAudioCaptureVolume(method_call, std::move(result));
  123. } else if(methodName.compare("getAudioCaptureVolume") == 0) {
  124. sdk_manager_->getAudioCaptureVolume(method_call, std::move(result));
  125. } else if(methodName.compare("setAudioPlayoutVolume") == 0) {
  126. sdk_manager_->setAudioPlayoutVolume(method_call, std::move(result));
  127. } else if(methodName.compare("getAudioPlayoutVolume") == 0) {
  128. sdk_manager_->getAudioPlayoutVolume(method_call, std::move(result));
  129. } else if(methodName.compare("startLocalAudio") == 0) {
  130. sdk_manager_->startLocalAudio(method_call, std::move(result));
  131. } else if(methodName.compare("stopLocalAudio") == 0) {
  132. sdk_manager_->stopLocalAudio(method_call, std::move(result));
  133. } else if(methodName.compare("muteRemoteVideoStream") == 0) {
  134. sdk_manager_->muteRemoteVideoStream(method_call, std::move(result));
  135. } else if(methodName.compare("muteAllRemoteVideoStreams") == 0) {
  136. sdk_manager_->muteAllRemoteVideoStreams(method_call, std::move(result));
  137. } else if(methodName.compare("setVideoEncoderParam") == 0) {
  138. sdk_manager_->setVideoEncoderParam(method_call, std::move(result));
  139. } else if(methodName.compare("setNetworkQosParam") == 0) {
  140. sdk_manager_->setNetworkQosParam(method_call, std::move(result));
  141. } else if(methodName.compare("setLocalRenderParams") == 0) {
  142. sdk_manager_->setLocalRenderParams(method_call, std::move(result));
  143. } else if(methodName.compare("setRemoteRenderParams") == 0) {
  144. sdk_manager_->setRemoteRenderParams(method_call, std::move(result));
  145. } else if(methodName.compare("setVideoEncoderRotation") == 0) {
  146. sdk_manager_->setVideoEncoderRotation(method_call, std::move(result));
  147. } else if(methodName.compare("setVideoEncoderMirror") == 0) {
  148. sdk_manager_->setVideoEncoderMirror(method_call, std::move(result));
  149. } else if(methodName.compare("enableEncSmallVideoStream") == 0) {
  150. sdk_manager_->enableEncSmallVideoStream(method_call, std::move(result));
  151. } else if(methodName.compare("setRemoteVideoStreamType") == 0) {
  152. sdk_manager_->setRemoteVideoStreamType(method_call, std::move(result));
  153. } else if(methodName.compare("snapshotVideo") == 0) {
  154. sdk_manager_->snapshotVideo(method_call, std::move(result));
  155. } else if(methodName.compare("setLocalVideoRenderListener") == 0) {
  156. sdk_manager_->setLocalVideoRenderListener(method_call, std::move(result));
  157. } else if(methodName.compare("setRemoteVideoRenderListener") == 0) {
  158. sdk_manager_->setRemoteVideoRenderListener(method_call, std::move(result));
  159. } else if(methodName.compare("muteLocalAudio") == 0) {
  160. sdk_manager_->muteLocalAudio(method_call, std::move(result));
  161. } else if(methodName.compare("muteLocalVideo") == 0) {
  162. sdk_manager_->muteLocalVideo(method_call, std::move(result));
  163. } else if(methodName.compare("enableAudioVolumeEvaluation") == 0) {
  164. sdk_manager_->enableAudioVolumeEvaluation(method_call, std::move(result));
  165. } else if(methodName.compare("startAudioRecording") == 0) {
  166. sdk_manager_->startAudioRecording(method_call, std::move(result));
  167. } else if(methodName.compare("stopAudioRecording") == 0) {
  168. sdk_manager_->stopAudioRecording(method_call, std::move(result));
  169. } else if(methodName.compare("startLocalRecording") == 0) {
  170. sdk_manager_->startLocalRecording(method_call, std::move(result));
  171. } else if(methodName.compare("stopLocalRecording") == 0) {
  172. sdk_manager_->stopLocalRecording(method_call, std::move(result));
  173. } else if(methodName.compare("setSystemVolumeType") == 0) {
  174. sdk_manager_->setSystemVolumeType(method_call, std::move(result));
  175. } else if(methodName.compare("getDeviceManager") == 0) {
  176. sdk_manager_->getDeviceManager(method_call, std::move(result));
  177. } else if(methodName.compare("getBeautyManager") == 0) {
  178. sdk_manager_->getBeautyManager(method_call, std::move(result));
  179. } else if(methodName.compare("getAudioEffectManager") == 0) {
  180. sdk_manager_->getAudioEffectManager(method_call, std::move(result));
  181. } else if(methodName.compare("startScreenCapture") == 0) {
  182. sdk_manager_->startScreenCapture(method_call, std::move(result));
  183. } else if(methodName.compare("stopScreenCapture") == 0) {
  184. sdk_manager_->stopScreenCapture(method_call, std::move(result));
  185. } else if(methodName.compare("pauseScreenCapture") == 0) {
  186. sdk_manager_->pauseScreenCapture(method_call, std::move(result));
  187. } else if(methodName.compare("resumeScreenCapture") == 0) {
  188. sdk_manager_->resumeScreenCapture(method_call, std::move(result));
  189. } else if(methodName.compare("setWatermark") == 0) {
  190. sdk_manager_->setWatermark(method_call, std::move(result));
  191. } else if(methodName.compare("sendCustomCmdMsg") == 0) {
  192. sdk_manager_->sendCustomCmdMsg(method_call, std::move(result));
  193. } else if(methodName.compare("sendSEIMsg") == 0) {
  194. sdk_manager_->sendSEIMsg(method_call, std::move(result));
  195. } else if(methodName.compare("startSpeedTest") == 0) {
  196. sdk_manager_->startSpeedTest(method_call, std::move(result));
  197. } else if(methodName.compare("stopSpeedTest") == 0) {
  198. sdk_manager_->stopSpeedTest(method_call, std::move(result));
  199. } else if(methodName.compare("setLogLevel") == 0) {
  200. sdk_manager_->setLogLevel(method_call, std::move(result));
  201. } else if(methodName.compare("setConsoleEnabled") == 0) {
  202. sdk_manager_->setConsoleEnabled(method_call, std::move(result));
  203. } else if(methodName.compare("setLogDirPath") == 0) {
  204. sdk_manager_->setLogDirPath(method_call, std::move(result));
  205. } else if(methodName.compare("setLogCompressEnabled") == 0) {
  206. sdk_manager_->setLogCompressEnabled(method_call, std::move(result));
  207. } else if(methodName.compare("callExperimentalAPI") == 0) {
  208. sdk_manager_->callExperimentalAPI(method_call, std::move(result));
  209. } else if(methodName.compare("setBeautyStyle") == 0) {
  210. sdk_manager_->setBeautyStyle(method_call, std::move(result));
  211. } else if(methodName.compare("setBeautyLevel") == 0) {
  212. sdk_manager_->setBeautyLevel(method_call, std::move(result));
  213. } else if(methodName.compare("setWhitenessLevel") == 0) {
  214. sdk_manager_->setWhitenessLevel(method_call, std::move(result));
  215. } else if(methodName.compare("setRuddyLevel") == 0) {
  216. sdk_manager_->setRuddyLevel(method_call, std::move(result));
  217. } else if(methodName.compare("startPlayMusic") == 0) {
  218. sdk_manager_->startPlayMusic(method_call, std::move(result));
  219. } else if(methodName.compare("stopPlayMusic") == 0) {
  220. sdk_manager_->stopPlayMusic(method_call, std::move(result));
  221. } else if(methodName.compare("pausePlayMusic") == 0) {
  222. sdk_manager_->pausePlayMusic(method_call, std::move(result));
  223. } else if(methodName.compare("resumePlayMusic") == 0) {
  224. sdk_manager_->resumePlayMusic(method_call, std::move(result));
  225. } else if(methodName.compare("setMusicPublishVolume") == 0) {
  226. sdk_manager_->setMusicPublishVolume(method_call, std::move(result));
  227. } else if(methodName.compare("setMusicPlayoutVolume") == 0) {
  228. sdk_manager_->setMusicPlayoutVolume(method_call, std::move(result));
  229. } else if(methodName.compare("setAllMusicVolume") == 0) {
  230. sdk_manager_->setAllMusicVolume(method_call, std::move(result));
  231. } else if(methodName.compare("setMusicPitch") == 0) {
  232. sdk_manager_->setMusicPitch(method_call, std::move(result));
  233. } else if(methodName.compare("setMusicSpeedRate") == 0) {
  234. sdk_manager_->setMusicSpeedRate(method_call, std::move(result));
  235. } else if(methodName.compare("getMusicCurrentPosInMS") == 0) {
  236. sdk_manager_->getMusicCurrentPosInMS(method_call, std::move(result));
  237. } else if(methodName.compare("seekMusicToPosInMS") == 0) {
  238. sdk_manager_->seekMusicToPosInMS(method_call, std::move(result));
  239. } else if(methodName.compare("getMusicDurationInMS") == 0) {
  240. sdk_manager_->getMusicDurationInMS(method_call, std::move(result));
  241. } else if(methodName.compare("setVoiceReverbType") == 0) {
  242. sdk_manager_->setVoiceReverbType(method_call, std::move(result));
  243. } else if(methodName.compare("setVoiceCaptureVolume") == 0) {
  244. sdk_manager_->setVoiceCaptureVolume(method_call, std::move(result));
  245. } else if(methodName.compare("getDevicesList") == 0) {
  246. sdk_manager_->getDevicesList(method_call, std::move(result));
  247. } else if(methodName.compare("setCurrentDevice") == 0) {
  248. sdk_manager_->setCurrentDevice(method_call, std::move(result));
  249. } else if(methodName.compare("getCurrentDevice") == 0) {
  250. sdk_manager_->getCurrentDevice(method_call, std::move(result));
  251. } else if(methodName.compare("setCurrentDeviceVolume") == 0) {
  252. sdk_manager_->setCurrentDeviceVolume(method_call, std::move(result));
  253. } else if(methodName.compare("getCurrentDeviceVolume") == 0) {
  254. sdk_manager_->getCurrentDeviceVolume(method_call, std::move(result));
  255. } else if(methodName.compare("setCurrentDeviceMute") == 0) {
  256. sdk_manager_->setCurrentDeviceMute(method_call, std::move(result));
  257. } else if(methodName.compare("getCurrentDeviceMute") == 0) {
  258. sdk_manager_->getCurrentDeviceMute(method_call, std::move(result));
  259. } else if(methodName.compare("startMicDeviceTest") == 0) {
  260. sdk_manager_->startMicDeviceTest(method_call, std::move(result));
  261. } else if(methodName.compare("stopMicDeviceTest") == 0) {
  262. sdk_manager_->stopMicDeviceTest(method_call, std::move(result));
  263. } else if(methodName.compare("startSpeakerDeviceTest") == 0) {
  264. sdk_manager_->startSpeakerDeviceTest(method_call, std::move(result));
  265. } else if(methodName.compare("stopSpeakerDeviceTest") == 0) {
  266. sdk_manager_->stopSpeakerDeviceTest(method_call, std::move(result));
  267. } else if(methodName.compare("setApplicationPlayVolume") == 0) {
  268. sdk_manager_->setApplicationPlayVolume(method_call, std::move(result));
  269. } else if(methodName.compare("getApplicationPlayVolume") == 0) {
  270. sdk_manager_->getApplicationPlayVolume(method_call, std::move(result));
  271. } else if(methodName.compare("setApplicationMuteState") == 0) {
  272. sdk_manager_->setApplicationMuteState(method_call, std::move(result));
  273. } else if(methodName.compare("getApplicationMuteState") == 0) {
  274. sdk_manager_->getApplicationMuteState(method_call, std::move(result));
  275. } else if(methodName.compare("unregisterTexture") == 0) {
  276. sdk_manager_->unregisterTexture(method_call, std::move(result));
  277. }
  278. else {
  279. result->NotImplemented();
  280. }
  281. }
  282. } // namespace
  283. void TencentTrtcCloudPluginRegisterWithRegistrar(
  284. FlutterDesktopPluginRegistrarRef registrar) {
  285. TencentTrtcCloudPlugin::RegisterWithRegistrar(
  286. flutter::PluginRegistrarManager::GetInstance()
  287. ->GetRegistrar<flutter::PluginRegistrarWindows>(registrar));
  288. }