Skip to content

Commit 9c48594

Browse files
committed
feat: support 3.3.0 for Android
1 parent de52ca6 commit 9c48594

8 files changed

+245
-64
lines changed

Annotations.java

+75-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.lang.annotation.RetentionPolicy;
77

88
import io.agora.rtc.Constants;
9+
import io.agora.rtc.IRtcEngineEventHandler;
910
import io.agora.rtc.RtcEngineConfig;
1011
import io.agora.rtc.video.BeautyOptions;
1112
import io.agora.rtc.video.VideoCanvas;
@@ -265,12 +266,14 @@ public class Annotations {
265266
AgoraCameraCaptureOutputPreference.CAPTURER_OUTPUT_PREFERENCE_AUTO,
266267
AgoraCameraCaptureOutputPreference.CAPTURER_OUTPUT_PREFERENCE_PERFORMANCE,
267268
AgoraCameraCaptureOutputPreference.CAPTURER_OUTPUT_PREFERENCE_PREVIEW,
269+
AgoraCameraCaptureOutputPreference.CAPTURER_OUTPUT_PREFERENCE_MANUAL,
268270
})
269271
@Retention(RetentionPolicy.SOURCE)
270272
public @interface AgoraCameraCaptureOutputPreference {
271273
int CAPTURER_OUTPUT_PREFERENCE_AUTO = 0;
272274
int CAPTURER_OUTPUT_PREFERENCE_PERFORMANCE = 1;
273275
int CAPTURER_OUTPUT_PREFERENCE_PREVIEW = 2;
276+
int CAPTURER_OUTPUT_PREFERENCE_MANUAL = 3;
274277
}
275278

276279
@IntDef({
@@ -362,6 +365,7 @@ public class Annotations {
362365
Constants.CONNECTION_CHANGED_RENEW_TOKEN,
363366
Constants.CONNECTION_CHANGED_CLIENT_IP_ADDRESS_CHANGED,
364367
Constants.CONNECTION_CHANGED_KEEP_ALIVE_TIMEOUT,
368+
Constants.CONNECTION_CHANGED_PROXY_SERVER_INTERRUPTED,
365369
})
366370
@Retention(RetentionPolicy.SOURCE)
367371
public @interface AgoraConnectionChangedReason {
@@ -452,6 +456,7 @@ public class Annotations {
452456
Constants.ERR_PUBLISH_STREAM_INTERNAL_SERVER_ERROR,
453457
Constants.ERR_PUBLISH_STREAM_NOT_FOUND,
454458
Constants.ERR_PUBLISH_STREAM_FORMAT_NOT_SUPPORTED,
459+
Constants.ERR_MODULE_NOT_FOUND,
455460
Constants.ERR_LOAD_MEDIA_ENGINE,
456461
Constants.ERR_START_CALL,
457462
Constants.ERR_START_CAMERA,
@@ -765,8 +770,7 @@ public class Annotations {
765770
Constants.WARN_ADM_RECORD_IS_OCCUPIED,
766771
Constants.WARN_APM_HOWLING,
767772
Constants.WARN_ADM_GLITCH_STATE,
768-
// TODO(3.3.0) WARN_APM_RESIDUAL_ECHO
769-
Constants.WARN_ADM_IMPROPER_SETTINGS,
773+
Constants.WARN_APM_RESIDUAL_ECHO,
770774
Constants.WARN_SUPER_RESOLUTION_STREAM_OVER_LIMITATION,
771775
Constants.WARN_SUPER_RESOLUTION_USER_COUNT_OVER_LIMITATION,
772776
Constants.WARN_SUPER_RESOLUTION_DEVICE_NOT_SUPPORTED,
@@ -845,6 +849,7 @@ public class Annotations {
845849
Constants.CHAT_BEAUTIFIER_MAGNETIC,
846850
Constants.CHAT_BEAUTIFIER_FRESH,
847851
Constants.CHAT_BEAUTIFIER_VITALITY,
852+
Constants.SINGING_BEAUTIFIER,
848853
Constants.TIMBRE_TRANSFORMATION_VIGOROUS,
849854
Constants.TIMBRE_TRANSFORMATION_DEEP,
850855
Constants.TIMBRE_TRANSFORMATION_MELLOW,
@@ -865,4 +870,72 @@ public class Annotations {
865870
@Retention(RetentionPolicy.SOURCE)
866871
public @interface AgoraAudienceLatencyLevelType {
867872
}
873+
874+
@IntDef({
875+
Constants.TRANSPORT_TYPE_NONE_PROXY,
876+
Constants.TRANSPORT_TYPE_UDP_PROXY,
877+
Constants.TRANSPORT_TYPE_TCP_PROXY,
878+
})
879+
@Retention(RetentionPolicy.SOURCE)
880+
public @interface AgoraCloudProxyType {
881+
}
882+
883+
@IntDef({
884+
AgoraLogLevel.LOG_LEVEL_NONE,
885+
AgoraLogLevel.LOG_LEVEL_INFO,
886+
AgoraLogLevel.LOG_LEVEL_WARN,
887+
AgoraLogLevel.LOG_LEVEL_ERROR,
888+
AgoraLogLevel.LOG_LEVEL_FATAL,
889+
})
890+
@Retention(RetentionPolicy.SOURCE)
891+
public @interface AgoraLogLevel {
892+
int LOG_LEVEL_NONE = 0;
893+
int LOG_LEVEL_INFO = 1;
894+
int LOG_LEVEL_WARN = 2;
895+
int LOG_LEVEL_ERROR = 4;
896+
int LOG_LEVEL_FATAL = 8;
897+
}
898+
899+
@IntDef({
900+
Constants.CAPTURE_BRIGHTNESS_LEVEL_INVALID,
901+
Constants.CAPTURE_BRIGHTNESS_LEVEL_NORMAL,
902+
Constants.CAPTURE_BRIGHTNESS_LEVEL_BRIGHT,
903+
Constants.CAPTURE_BRIGHTNESS_LEVEL_DARK,
904+
})
905+
public @interface AgoraCaptureBrightnessLevelType {
906+
}
907+
908+
@IntDef({
909+
IRtcEngineEventHandler.UploadErrorReason.UPLOAD_SUCCESS,
910+
IRtcEngineEventHandler.UploadErrorReason.UPLOAD_NET_ERROR,
911+
IRtcEngineEventHandler.UploadErrorReason.UPLOAD_SERVER_ERROR,
912+
})
913+
public @interface AgoraUploadErrorReason {
914+
}
915+
916+
@IntDef({
917+
IRtcEngineEventHandler.ExperienceQuality.EXPERIENCE_GOOD,
918+
IRtcEngineEventHandler.ExperienceQuality.EXPERIENCE_BAD,
919+
})
920+
public @interface AgoraExperienceQualityType {
921+
}
922+
923+
@IntDef({
924+
IRtcEngineEventHandler.ExperiencePoorReason.EXPERIENCE_REASON_NONE,
925+
IRtcEngineEventHandler.ExperiencePoorReason.REMOTE_NETWORK_QUALITY_POOR,
926+
IRtcEngineEventHandler.ExperiencePoorReason.LOCAL_NETWORK_QUALITY_POOR,
927+
IRtcEngineEventHandler.ExperiencePoorReason.WIRELESS_SIGNAL_POOR,
928+
IRtcEngineEventHandler.ExperiencePoorReason.WIFI_BLUETOOTH_COEXIST,
929+
})
930+
public @interface AgoraExperiencePoorReason {
931+
}
932+
933+
@IntDef({
934+
Constants.SR_STATE_REASON_SUCCESS,
935+
Constants.SR_STATE_REASON_STREAM_OVER_LIMITATION,
936+
Constants.SR_STATE_REASON_USER_COUNT_OVER_LIMITATION,
937+
Constants.SR_STATE_REASON_DEVICE_NOT_SUPPORTED,
938+
})
939+
public @interface AgoraSuperResolutionStateReason {
940+
}
868941
}

BeanCovertor.kt

+30-1
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package io.agora.rtc.base
22

33
import android.graphics.Color
4+
import io.agora.rtc.RtcEngineConfig
45
import io.agora.rtc.internal.EncryptionConfig
56
import io.agora.rtc.internal.LastmileProbeConfig
67
import io.agora.rtc.live.LiveInjectStreamConfig
78
import io.agora.rtc.live.LiveTranscoding
89
import io.agora.rtc.live.LiveTranscoding.TranscodingUser
910
import io.agora.rtc.models.ChannelMediaOptions
1011
import io.agora.rtc.models.ClientRoleOptions
12+
import io.agora.rtc.models.DataStreamConfig
1113
import io.agora.rtc.video.*
1214

1315
fun mapToVideoDimensions(map: Map<*, *>): VideoEncoderConfiguration.VideoDimensions {
@@ -162,7 +164,11 @@ fun mapToCameraCapturerConfiguration(map: Map<*, *>): CameraCapturerConfiguratio
162164
return CameraCapturerConfiguration(
163165
intToCapturerOutputPreference((map["preference"] as Number).toInt()),
164166
intToCameraDirection((map["cameraDirection"] as Number).toInt())
165-
)
167+
).apply {
168+
dimensions = CameraCapturerConfiguration.CaptureDimensions()
169+
(map["captureWidth"] as? Number)?.toInt()?.let { dimensions.width = it }
170+
(map["captureHeight"] as? Number)?.toInt()?.let { dimensions.height = it }
171+
}
166172
}
167173

168174
fun mapToChannelMediaOptions(map: Map<*, *>): ChannelMediaOptions {
@@ -172,6 +178,14 @@ fun mapToChannelMediaOptions(map: Map<*, *>): ChannelMediaOptions {
172178
}
173179
}
174180

181+
fun mapToRtcEngineConfig(map: Map<*, *>): RtcEngineConfig {
182+
return RtcEngineConfig().apply {
183+
mAppId = map["appId"] as String
184+
(map["areaCode"] as? Number)?.toInt()?.let { mAreaCode = it }
185+
(map["logConfig"] as? Map<*, *>)?.let { mLogConfig = mapToLogConfig(it) }
186+
}
187+
}
188+
175189
fun mapToEncryptionConfig(map: Map<*, *>): EncryptionConfig {
176190
return EncryptionConfig().apply {
177191
(map["encryptionMode"] as? Number)?.let { encryptionMode = intToEncryptionMode(it.toInt()) }
@@ -184,3 +198,18 @@ fun mapToClientRoleOptions(map: Map<*, *>): ClientRoleOptions {
184198
(map["audienceLatencyLevel"] as? Number)?.let { audienceLatencyLevel = it.toInt() }
185199
}
186200
}
201+
202+
fun mapToLogConfig(map: Map<*, *>): RtcEngineConfig.LogConfig {
203+
return RtcEngineConfig.LogConfig().apply {
204+
(map["filePath"] as? String)?.let { filePath = it }
205+
(map["fileSize"] as? Number)?.let { fileSize = it.toInt() }
206+
(map["level"] as? Number)?.let { level = it.toInt() }
207+
}
208+
}
209+
210+
fun mapToDataStreamConfig(map: Map<*, *>): DataStreamConfig {
211+
return DataStreamConfig().apply {
212+
(map["syncWithAudio"] as? Boolean)?.let { syncWithAudio = it }
213+
(map["ordered"] as? Boolean)?.let { ordered = it }
214+
}
215+
}

Extensions.kt

+5-2
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,9 @@ fun RemoteAudioStats.toMap(): Map<String, Any?> {
7070
"totalFrozenTime" to totalFrozenTime,
7171
"frozenRate" to frozenRate,
7272
"totalActiveTime" to totalActiveTime,
73-
"publishDuration" to publishDuration
73+
"publishDuration" to publishDuration,
74+
"qoeQuality" to qoeQuality,
75+
"qualityChangedReason" to qualityChangedReason
7476
)
7577
}
7678

@@ -89,7 +91,8 @@ fun LocalVideoStats.toMap(): Map<String, Any?> {
8991
"encodedFrameCount" to encodedFrameCount,
9092
"codecType" to codecType,
9193
"txPacketLossRate" to txPacketLossRate,
92-
"captureFrameRate" to captureFrameRate
94+
"captureFrameRate" to captureFrameRate,
95+
"captureBrightnessLevel" to captureBrightnessLevel
9396
)
9497
}
9598

MediaObserver.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import java.util.concurrent.atomic.AtomicInteger
88
class MediaObserver(
99
private val emit: (data: Map<String, Any?>?) -> Unit
1010
) : IMetadataObserver {
11-
private var maxMetadataSize = AtomicInteger(0)
11+
private var maxMetadataSize = AtomicInteger(1024)
1212
private var metadataList = Collections.synchronizedList<String>(mutableListOf())
1313

1414
fun addMetadata(metadata: String) {

RtcChannel.kt

+28-28
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.agora.rtc.base
22

3-
import io.agora.rtc.Constants
43
import io.agora.rtc.IMetadataObserver
54
import io.agora.rtc.RtcChannel
65
import io.agora.rtc.RtcEngine
@@ -42,6 +41,7 @@ class IRtcChannel {
4241

4342
fun muteAllRemoteAudioStreams(params: Map<String, *>, callback: Callback)
4443

44+
@Deprecated("")
4545
fun setDefaultMuteAllRemoteAudioStreams(params: Map<String, *>, callback: Callback)
4646
}
4747

@@ -50,7 +50,10 @@ class IRtcChannel {
5050

5151
fun muteAllRemoteVideoStreams(params: Map<String, *>, callback: Callback)
5252

53+
@Deprecated("")
5354
fun setDefaultMuteAllRemoteVideoStreams(params: Map<String, *>, callback: Callback)
55+
56+
fun enableRemoteSuperResolution(params: Map<String, *>, callback: Callback)
5457
}
5558

5659
interface RtcVoicePositionInterface {
@@ -94,8 +97,10 @@ class IRtcChannel {
9497
}
9598

9699
interface RtcEncryptionInterface {
100+
@Deprecated("")
97101
fun setEncryptionSecret(params: Map<String, *>, callback: Callback)
98102

103+
@Deprecated("")
99104
fun setEncryptionMode(params: Map<String, *>, callback: Callback)
100105

101106
fun enableEncryption(params: Map<String, *>, callback: Callback)
@@ -141,11 +146,7 @@ class RtcChannelManager(
141146
}
142147

143148
override fun destroy(params: Map<String, *>, callback: Callback) {
144-
var code: Int? = -Constants.ERR_NOT_INITIALIZED
145-
this[params["channelId"] as String]?.let {
146-
code = rtcChannelMap.remove(it.channelId())?.destroy()
147-
}
148-
callback.code(code)
149+
callback.code(rtcChannelMap.remove(params["channelId"] as String)?.destroy())
149150
}
150151

151152
override fun setClientRole(params: Map<String, *>, callback: Callback) {
@@ -217,6 +218,10 @@ class RtcChannelManager(
217218
callback.code(this[params["channelId"] as String]?.setDefaultMuteAllRemoteVideoStreams(params["muted"] as Boolean))
218219
}
219220

221+
override fun enableRemoteSuperResolution(params: Map<String, *>, callback: Callback) {
222+
callback.code(this[params["channelId"] as String]?.enableRemoteSuperResolution((params["uid"] as Number).toInt(), params["enable"] as Boolean))
223+
}
224+
220225
override fun setRemoteVoicePosition(params: Map<String, *>, callback: Callback) {
221226
callback.code(this[params["channelId"] as String]?.setRemoteVoicePosition((params["uid"] as Number).toInt(), (params["pan"] as Number).toDouble(), (params["gain"] as Number).toDouble()))
222227
}
@@ -258,24 +263,22 @@ class RtcChannelManager(
258263
}
259264

260265
override fun registerMediaMetadataObserver(params: Map<String, *>, callback: Callback) {
261-
var code = -Constants.ERR_NOT_INITIALIZED
262-
this[params["channelId"] as String]?.let {
263-
val mediaObserver = MediaObserver { data ->
264-
emit(RtcChannelEvents.MetadataReceived, data?.toMutableMap()?.apply { put("channelId", it.channelId()) })
265-
}
266-
code = it.registerMediaMetadataObserver(mediaObserver, IMetadataObserver.VIDEO_METADATA)
267-
if (code == 0) mediaObserverMap[it.channelId()] = mediaObserver
266+
val channelId = params["channelId"] as String
267+
val mediaObserver = MediaObserver { data ->
268+
emit(RtcChannelEvents.MetadataReceived, data?.toMutableMap()?.apply { put("channelId", channelId) })
269+
}
270+
callback.code(this[channelId]?.registerMediaMetadataObserver(mediaObserver, IMetadataObserver.VIDEO_METADATA)) {
271+
mediaObserverMap[channelId] = mediaObserver
272+
Unit
268273
}
269-
callback.code(code)
270274
}
271275

272276
override fun unregisterMediaMetadataObserver(params: Map<String, *>, callback: Callback) {
273-
var code = -Constants.ERR_NOT_INITIALIZED
274-
this[params["channelId"] as String]?.let {
275-
code = it.registerMediaMetadataObserver(null, IMetadataObserver.VIDEO_METADATA)
276-
if (code == 0) mediaObserverMap.remove(it.channelId())
277+
val channelId = params["channelId"] as String
278+
callback.code(this[channelId]?.registerMediaMetadataObserver(null, IMetadataObserver.VIDEO_METADATA)) {
279+
mediaObserverMap.remove(channelId)
280+
Unit
277281
}
278-
callback.code(code)
279282
}
280283

281284
override fun setMaxMetadataSize(params: Map<String, *>, callback: Callback) {
@@ -318,18 +321,15 @@ class RtcChannelManager(
318321
}
319322

320323
override fun createDataStream(params: Map<String, *>, callback: Callback) {
321-
var code = -Constants.ERR_NOT_INITIALIZED
322-
this[params["channelId"] as String]?.let {
323-
code = it.createDataStream(params["reliable"] as Boolean, params["ordered"] as Boolean)
324+
val channel = this[params["channelId"] as String]
325+
(params["config"] as? Map<*, *>)?.let { config ->
326+
callback.code(channel?.createDataStream(mapToDataStreamConfig(config))) { it }
327+
return@createDataStream
324328
}
325-
callback.code(code) { it }
329+
callback.code(channel?.createDataStream(params["reliable"] as Boolean, params["ordered"] as Boolean)) { it }
326330
}
327331

328332
override fun sendStreamMessage(params: Map<String, *>, callback: Callback) {
329-
var code = -Constants.ERR_NOT_INITIALIZED
330-
this[params["channelId"] as String]?.let {
331-
code = it.sendStreamMessage((params["streamId"] as Number).toInt(), (params["message"] as String).toByteArray())
332-
}
333-
callback.code(code)
333+
callback.code(this[params["channelId"] as String]?.sendStreamMessage((params["streamId"] as Number).toInt(), (params["message"] as String).toByteArray()))
334334
}
335335
}

RtcChannelEvent.kt

+7-1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class RtcChannelEvents {
4242
const val AudioSubscribeStateChanged = "AudioSubscribeStateChanged"
4343
const val VideoSubscribeStateChanged = "VideoSubscribeStateChanged"
4444
const val RtmpStreamingEvent = "RtmpStreamingEvent"
45+
const val UserSuperResolutionEnabled = "UserSuperResolutionEnabled"
4546

4647
fun toMap(): Map<String, String> {
4748
return hashMapOf(
@@ -79,7 +80,8 @@ class RtcChannelEvents {
7980
"VideoPublishStateChanged" to VideoPublishStateChanged,
8081
"AudioSubscribeStateChanged" to AudioSubscribeStateChanged,
8182
"VideoSubscribeStateChanged" to VideoSubscribeStateChanged,
82-
"RtmpStreamingEvent" to RtmpStreamingEvent
83+
"RtmpStreamingEvent" to RtmpStreamingEvent,
84+
"UserSuperResolutionEnabled" to UserSuperResolutionEnabled
8385
)
8486
}
8587
}
@@ -236,4 +238,8 @@ class RtcChannelEventHandler(
236238
override fun onRtmpStreamingEvent(rtcChannel: RtcChannel?, url: String?, @Annotations.AgoraRtmpStreamingEvent errCode: Int) {
237239
callback(RtcChannelEvents.RtmpStreamingEvent, rtcChannel, url, errCode)
238240
}
241+
242+
override fun onUserSuperResolutionEnabled(rtcChannel: RtcChannel?, uid: Int, enabled: Boolean, @Annotations.AgoraSuperResolutionStateReason reason: Int) {
243+
callback(RtcChannelEvents.UserSuperResolutionEnabled, rtcChannel, uid, enabled, reason)
244+
}
239245
}

0 commit comments

Comments
 (0)