diff --git a/RtcEngine.js b/RtcEngine.js index 0d08e7fe7..4d02157c9 100644 --- a/RtcEngine.js +++ b/RtcEngine.js @@ -13,7 +13,10 @@ export default { Agora.init(options); }, joinChannel(channelName = '00001', uid = 0){ - Agora.joinChannel(channelName, uid) + Agora.joinChannel(channelName, uid); + }, + joinChannelWithToken(token, channelName = '00001', uid = 0){ + Agora.joinChannelWithToken(token, channelName, uid); }, eventEmitter(fnConf) { //there are no `removeListener` for NativeAppEventEmitter & DeviceEventEmitter @@ -24,5 +27,11 @@ export default { }, removeEmitter() { this.listener && this.listener.remove(); - } + }, + enableLastmileTest() { + Agora.enableLastmileTest(); + }, + disableLastmileTest() { + Agora.disableLastmileTest(); + }, }; diff --git a/android/build.gradle b/android/build.gradle index 21be8b4da..4b02c1dcf 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -22,6 +22,6 @@ android { } dependencies { - compile "com.facebook.react:react-native:+" - compile fileTree(dir: 'libs', include: ['*.jar']) + implementation "com.facebook.react:react-native:+" + implementation fileTree(dir: 'libs', include: ['*.jar']) } diff --git a/android/src/main/java/com/syan/agora/AgoraManager.java b/android/src/main/java/com/syan/agora/AgoraManager.java index acb1a5274..e0717e91c 100755 --- a/android/src/main/java/com/syan/agora/AgoraManager.java +++ b/android/src/main/java/com/syan/agora/AgoraManager.java @@ -95,6 +95,21 @@ public AgoraManager joinChannel(String channel, int uid) { return this; } + public AgoraManager joinChannelWithToken(String token, String channel, int uid) { + mRtcEngine.joinChannel(token, channel, null, uid); + return this; + } + + public AgoraManager enableLastmileTest() { + mRtcEngine.enableLastmileTest(); + return this; + } + + public AgoraManager disableLastmileTest() { + mRtcEngine.disableLastmileTest(); + return this; + } + public void startPreview() { mRtcEngine.startPreview(); } @@ -129,4 +144,4 @@ public SurfaceView getSurfaceView(int uid) { } -} \ No newline at end of file +} diff --git a/android/src/main/java/com/syan/agora/AgoraModule.java b/android/src/main/java/com/syan/agora/AgoraModule.java index 3eb5984c2..6bd877c23 100644 --- a/android/src/main/java/com/syan/agora/AgoraModule.java +++ b/android/src/main/java/com/syan/agora/AgoraModule.java @@ -253,6 +253,76 @@ public void run() { } }); } + + @Override + public void onLocalVideoStats(final LocalVideoStats stats) { + runOnUiThread(new Runnable() { + @Override + public void run() { + WritableMap map = Arguments.createMap(); + map.putString("type", "onLocalVideoStats"); + map.putInt("sentBitrate", stats.sentBitrate); + map.putInt("sentFrameRate", stats.sentFrameRate); + commonEvent(map); + } + }); + } + + @Override + public void onRemoteVideoStats(final RemoteVideoStats stats) { + runOnUiThread(new Runnable() { + @Override + public void run() { + WritableMap map = Arguments.createMap(); + map.putString("type", "onRemoteVideoStats"); + map.putInt("delay", stats.delay); + map.putInt("receivedBitrate", stats.receivedBitrate); + map.putInt("receivedFrameRate", stats.receivedFrameRate); + map.putInt("rxStreamType", stats.rxStreamType); + commonEvent(map); + } + }); + } + + @Override + public void onConnectionLost() { + runOnUiThread(new Runnable() { + @Override + public void run() { + WritableMap map = Arguments.createMap(); + map.putString("type", "onConnectionLost"); + commonEvent(map); + } + }); + } + + @Override + public void onNetworkQuality(final int uid, final int txQuality, final int rxQuality) { + runOnUiThread(new Runnable() { + @Override + public void run() { + WritableMap map = Arguments.createMap(); + map.putString("type", "onNetworkQuality"); + map.putInt("uid", uid); + map.putInt("txQuality", txQuality); + map.putInt("rxQuality", rxQuality); + commonEvent(map); + } + }); + } + + @Override + public void onLastmileQuality(final int quality) { + runOnUiThread(new Runnable() { + @Override + public void run() { + WritableMap map = Arguments.createMap(); + map.putString("type", "onLastmileQuality"); + map.putInt("quality", quality); + commonEvent(map); + } + }); + } }; @ReactMethod @@ -260,12 +330,27 @@ public void init(ReadableMap options) { AgoraManager.getInstance().init(getReactApplicationContext(), mRtcEventHandler, options); } + @ReactMethod + public void enableLastmileTest() { + AgoraManager.getInstance().enableLastmileTest(); + } + + @ReactMethod + public void disableLastmileTest() { + AgoraManager.getInstance().disableLastmileTest(); + } + //进入房间 @ReactMethod public void joinChannel(String channelName, int uid) { AgoraManager.getInstance().joinChannel(channelName, uid); } + @ReactMethod + public void joinChannelWithToken(String token, String channelName, int uid) { + AgoraManager.getInstance().joinChannelWithToken(token, channelName, uid); + } + //退出 @ReactMethod public void leaveChannel() { diff --git a/ios/RCTAgora/RCTAgora.m b/ios/RCTAgora/RCTAgora.m index 6b00716d2..2a0f0031b 100644 --- a/ios/RCTAgora/RCTAgora.m +++ b/ios/RCTAgora/RCTAgora.m @@ -67,6 +67,14 @@ - (NSDictionary *)constantsToExport { } +RCT_EXPORT_METHOD(enableLastmileTest) { + [self.rtcEngine enableLastmileTest]; +} + +RCT_EXPORT_METHOD(disableLastmileTest) { + [self.rtcEngine disableLastmileTest]; +} + //加入房间 RCT_EXPORT_METHOD(joinChannel:(NSString *)channelName uid:(NSInteger)uid) { //保存一下uid 在自定义视图使用 @@ -74,6 +82,12 @@ - (NSDictionary *)constantsToExport { [self.rtcEngine joinChannelByKey:nil channelName:channelName info:nil uid:uid joinSuccess:NULL]; } +RCT_EXPORT_METHOD(joinChannelWithToken:(NSString *)token channelName:(NSString *)channelName uid:(NSInteger)uid) { + //保存一下uid 在自定义视图使用 + [AgoraConst share].localUid = uid; + [self.rtcEngine joinChannelByKey:token channelName:channelName info:nil uid:uid joinSuccess:NULL]; +} + //离开频道 RCT_EXPORT_METHOD(leaveChannel){ [self.rtcEngine leaveChannel:^(AgoraRtcStats *stat) { @@ -352,12 +366,57 @@ - (void)rtcEngine:(AgoraRtcEngineKit *)engine didAudioMuted:(BOOL)muted byUid:(N - (void)rtcEngine:(AgoraRtcEngineKit *)engine didVideoMuted:(BOOL)muted byUid:(NSUInteger)uid { NSMutableDictionary *params = @{}.mutableCopy; params[@"type"] = @"onUserMuteVideo"; - params[@"uid"] = [NSNumber numberWithInteger:uid];; + params[@"uid"] = [NSNumber numberWithInteger:uid]; params[@"muted"] = @(muted); [self sendEvent:params]; } +- (void)rtcEngine:(AgoraRtcEngineKit *)engine localVideoStats:(AgoraRtcLocalVideoStats *)stats { + NSMutableDictionary *params = @{}.mutableCopy; + params[@"type"] = @"onLocalVideoStats"; + params[@"sentBitrate"] = @(stats.sentBitrate); + params[@"sentFrameRate"] = @(stats.sentFrameRate); + + [self sendEvent:params]; +} + +- (void)rtcEngine:(AgoraRtcEngineKit *)engine remoteVideoStats:(AgoraRtcRemoteVideoStats *)stats { + NSMutableDictionary *params = @{}.mutableCopy; + params[@"type"] = @"onRemoteVideoStats"; + params[@"delay"] = @(stats.delay); + params[@"reivedBitrate"] = @(stats.receivedBitrate); + params[@"receivedFrameRate"] = @(stats.receivedFrameRate); + params[@"rxStreamType"] = @(stats.rxStreamType); + + [self sendEvent:params]; +} + +- (void)rtcEngineConnectionDidLost:(AgoraRtcEngineKit *)engine { + NSMutableDictionary *params = @{}.mutableCopy; + params[@"type"] = @"onConnectionLost"; + + [self sendEvent:params]; +} + +- (void)rtcEngine:(AgoraRtcEngineKit *)engine networkQuality:(NSUInteger)uid txQuality:(AgoraRtcQuality)txQuality rxQuality:(AgoraRtcQuality)rxQuality { + NSMutableDictionary *params = @{}.mutableCopy; + params[@"type"] = @"onNetworkQuality"; + params[@"uid"] = @(uid); + params[@"txQuality"] = @(txQuality); + params[@"rxQuality"] = @(rxQuality); + + [self sendEvent:params]; +} + +- (void)rtcEngine:(AgoraRtcEngineKit *)engine lastmileQuality:(AgoraRtcQuality)quality { + NSMutableDictionary *params = @{}.mutableCopy; + params[@"type"] = @"onLastmileQuality"; + params[@"quality"] = @(quality); + + [self sendEvent:params]; +} + /* 音量提示回调 需要开启enableAudioVolumeIndication @@ -419,4 +478,3 @@ - (dispatch_queue_t)methodQueue { //} @end - diff --git a/package.json b/package.json index 658299e6b..c1e262590 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-agora", - "version": "1.1.5", + "version": "1.2.5", "description": "声网Agora", "main": "index.js", "scripts": {