Brak opisu

RCTAgora.m 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. //
  2. // RCTAgora.m
  3. // RCTAgora
  4. //
  5. // Created by 邓博 on 2017/6/13.
  6. // Copyright © 2017年 Syan. All rights reserved.
  7. //
  8. #import "RCTAgora.h"
  9. #import <React/RCTEventDispatcher.h>
  10. #import <React/RCTBridge.h>
  11. #import <React/RCTUIManager.h>
  12. #import <React/RCTView.h>
  13. @interface RCTAgora ()
  14. @property (strong, nonatomic) AgoraRtcEngineKit *rtcEngine;
  15. @end
  16. @implementation RCTAgora
  17. RCT_EXPORT_MODULE();
  18. @synthesize bridge = _bridge;
  19. - (void)dealloc
  20. {
  21. //销毁引擎实例
  22. [AgoraRtcEngineKit destroy];
  23. }
  24. //导出常量
  25. - (NSDictionary *)constantsToExport {
  26. return @{};
  27. }
  28. /**
  29. * 初始化AgoraKit
  30. *
  31. * @param appid
  32. * @param channelProfile 设置频道模式
  33. * @param videoProfile 视频模式
  34. * @param clientRole 创建角色
  35. * @param channelName 频道名称
  36. * @param info 附加字段
  37. * @param reactTag 绑定view的tag
  38. * @return 0 when executed successfully. return negative value if failed.
  39. */
  40. RCT_EXPORT_METHOD(loadAgoraKit:(NSDictionary *)options)
  41. {
  42. self.rtcEngine = [AgoraRtcEngineKit sharedEngineWithAppId:options[@"appid"] delegate:self];
  43. //频道模式
  44. [self.rtcEngine setChannelProfile:[options[@"channelProfile"] integerValue]];
  45. //启用双流模式
  46. [self.rtcEngine enableDualStreamMode:YES];
  47. [self.rtcEngine enableVideo];
  48. [self.rtcEngine setVideoProfile:[options[@"videoProfile"] integerValue]swapWidthAndHeight:YES];
  49. [self.rtcEngine setClientRole:[options[@"clientRole"] integerValue] withKey:nil];
  50. //开启预览
  51. [self.rtcEngine startPreview];
  52. [self.rtcEngine joinChannelByKey:nil channelName:options[@"channelName"] info:options[@"info"] uid:0 joinSuccess:^(NSString *channel, NSUInteger uid, NSInteger elapsed) {
  53. //绑定本地视图
  54. AgoraRtcVideoCanvas *canvas = [[AgoraRtcVideoCanvas alloc] init];
  55. canvas.uid = uid;
  56. canvas.view = [self.bridge.uiManager viewForReactTag:options[@"reactTag"]];
  57. canvas.renderMode = AgoraRtc_Render_Hidden;
  58. [self.rtcEngine setupLocalVideo:canvas];
  59. }];
  60. //Agora Native SDK 与 Agora Web SDK 间的互通
  61. [self.rtcEngine enableWebSdkInteroperability:YES];
  62. }
  63. - (void)rtcEngine:(AgoraRtcEngineKit *)engine didOccurError:(AgoraRtcErrorCode)errorCode{
  64. }
  65. - (dispatch_queue_t)methodQueue
  66. {
  67. return dispatch_get_main_queue();
  68. }
  69. RCT_EXPORT_METHOD(getViewWithTag:(nonnull NSNumber *)reactTag)
  70. {
  71. UIView *view = [self.bridge.uiManager viewForReactTag:reactTag];
  72. NSLog(@"%@",view);
  73. }
  74. @end