正在显示
11 个修改的文件
包含
23 行增加
和
56 行删除
| @@ -18,7 +18,7 @@ buildscript { | @@ -18,7 +18,7 @@ buildscript { | ||
| 18 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" | 18 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" |
| 19 | classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version" | 19 | classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version" |
| 20 | classpath "org.jetbrains.dokka:dokka-gradle-plugin:$dokka_version" | 20 | classpath "org.jetbrains.dokka:dokka-gradle-plugin:$dokka_version" |
| 21 | - classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.15' | 21 | + classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18' |
| 22 | classpath "io.codearte.gradle.nexus:gradle-nexus-staging-plugin:0.30.0" | 22 | classpath "io.codearte.gradle.nexus:gradle-nexus-staging-plugin:0.30.0" |
| 23 | // NOTE: Do not place your application dependencies here; they belong | 23 | // NOTE: Do not place your application dependencies here; they belong |
| 24 | // in the individual module build.gradle files | 24 | // in the individual module build.gradle files |
| @@ -61,7 +61,7 @@ ext { | @@ -61,7 +61,7 @@ ext { | ||
| 61 | junitJupiter : "5.5.0", | 61 | junitJupiter : "5.5.0", |
| 62 | coroutines : "1.6.0", | 62 | coroutines : "1.6.0", |
| 63 | lint : "30.0.1", | 63 | lint : "30.0.1", |
| 64 | - protobuf : "3.15.1", | 64 | + protobuf : "3.19.4", |
| 65 | ] | 65 | ] |
| 66 | generated = [ | 66 | generated = [ |
| 67 | protoSrc: "$projectDir/protocol", | 67 | protoSrc: "$projectDir/protocol", |
| @@ -62,6 +62,7 @@ protobuf { | @@ -62,6 +62,7 @@ protobuf { | ||
| 62 | all().each { task -> | 62 | all().each { task -> |
| 63 | task.builtins { | 63 | task.builtins { |
| 64 | java { | 64 | java { |
| 65 | + option "lite" | ||
| 65 | } | 66 | } |
| 66 | } | 67 | } |
| 67 | } | 68 | } |
| @@ -108,8 +109,7 @@ dependencies { | @@ -108,8 +109,7 @@ dependencies { | ||
| 108 | api "com.squareup.okhttp3:okhttp:4.9.1" | 109 | api "com.squareup.okhttp3:okhttp:4.9.1" |
| 109 | implementation "androidx.annotation:annotation:1.3.0" | 110 | implementation "androidx.annotation:annotation:1.3.0" |
| 110 | implementation "androidx.core:core:${versions.androidx_core}" | 111 | implementation "androidx.core:core:${versions.androidx_core}" |
| 111 | - implementation "com.google.protobuf:protobuf-java:${versions.protobuf}" | ||
| 112 | - implementation "com.google.protobuf:protobuf-java-util:${versions.protobuf}" | 112 | + implementation "com.google.protobuf:protobuf-javalite:${versions.protobuf}" |
| 113 | implementation "androidx.compose.ui:ui:$compose_version" | 113 | implementation "androidx.compose.ui:ui:$compose_version" |
| 114 | 114 | ||
| 115 | implementation 'com.google.dagger:dagger:2.38' | 115 | implementation 'com.google.dagger:dagger:2.38' |
| @@ -42,3 +42,5 @@ | @@ -42,3 +42,5 @@ | ||
| 42 | -keepclasseswithmembers class io.livekit.android.** { # <-- change package name to your app's | 42 | -keepclasseswithmembers class io.livekit.android.** { # <-- change package name to your app's |
| 43 | kotlinx.serialization.KSerializer serializer(...); | 43 | kotlinx.serialization.KSerializer serializer(...); |
| 44 | } | 44 | } |
| 45 | + | ||
| 46 | +-keep class * extends com.google.protobuf.GeneratedMessageLite { *; } |
| @@ -22,8 +22,6 @@ object InjectionNames { | @@ -22,8 +22,6 @@ object InjectionNames { | ||
| 22 | */ | 22 | */ |
| 23 | internal const val DISPATCHER_UNCONFINED = "dispatcher_unconfined" | 23 | internal const val DISPATCHER_UNCONFINED = "dispatcher_unconfined" |
| 24 | 24 | ||
| 25 | - internal const val SIGNAL_JSON_ENABLED = "signal_json_enabled" | ||
| 26 | - | ||
| 27 | internal const val OPTIONS_VIDEO_HW_ACCEL = "options_video_hw_accel" | 25 | internal const val OPTIONS_VIDEO_HW_ACCEL = "options_video_hw_accel" |
| 28 | 26 | ||
| 29 | // Overrides | 27 | // Overrides |
| 1 | package io.livekit.android.dagger | 1 | package io.livekit.android.dagger |
| 2 | 2 | ||
| 3 | -import com.google.protobuf.util.JsonFormat | ||
| 4 | import dagger.Module | 3 | import dagger.Module |
| 5 | import dagger.Provides | 4 | import dagger.Provides |
| 6 | import dagger.Reusable | 5 | import dagger.Reusable |
| 7 | import kotlinx.serialization.json.Json | 6 | import kotlinx.serialization.json.Json |
| 8 | -import javax.inject.Named | ||
| 9 | 7 | ||
| 10 | @Module | 8 | @Module |
| 11 | object JsonFormatModule { | 9 | object JsonFormatModule { |
| 12 | @Provides | 10 | @Provides |
| 13 | - fun protobufJsonFormatParser(): JsonFormat.Parser { | ||
| 14 | - return JsonFormat.parser() | ||
| 15 | - } | ||
| 16 | - | ||
| 17 | - @Provides | ||
| 18 | - fun protobufJsonFormatPrinter(): JsonFormat.Printer { | ||
| 19 | - return JsonFormat.printer() | ||
| 20 | - } | ||
| 21 | - | ||
| 22 | - @Provides | ||
| 23 | @Reusable | 11 | @Reusable |
| 24 | fun kotlinSerializationJson(): Json = | 12 | fun kotlinSerializationJson(): Json = |
| 25 | Json { | 13 | Json { |
| 26 | ignoreUnknownKeys = true | 14 | ignoreUnknownKeys = true |
| 27 | } | 15 | } |
| 28 | 16 | ||
| 29 | - @Provides | ||
| 30 | - @Named(InjectionNames.SIGNAL_JSON_ENABLED) | ||
| 31 | - fun signalJsonEnabled(): Boolean = false | ||
| 32 | } | 17 | } |
| 1 | package io.livekit.android.dagger | 1 | package io.livekit.android.dagger |
| 2 | 2 | ||
| 3 | import android.content.Context | 3 | import android.content.Context |
| 4 | +import androidx.annotation.Nullable | ||
| 4 | import dagger.BindsInstance | 5 | import dagger.BindsInstance |
| 5 | import dagger.Component | 6 | import dagger.Component |
| 6 | import io.livekit.android.room.Room | 7 | import io.livekit.android.room.Room |
| 7 | import okhttp3.OkHttpClient | 8 | import okhttp3.OkHttpClient |
| 8 | import org.webrtc.EglBase | 9 | import org.webrtc.EglBase |
| 9 | import org.webrtc.PeerConnectionFactory | 10 | import org.webrtc.PeerConnectionFactory |
| 10 | -import javax.annotation.Nullable | ||
| 11 | import javax.inject.Named | 11 | import javax.inject.Named |
| 12 | import javax.inject.Singleton | 12 | import javax.inject.Singleton |
| 13 | 13 |
| 1 | package io.livekit.android.dagger | 1 | package io.livekit.android.dagger |
| 2 | 2 | ||
| 3 | +import androidx.annotation.Nullable | ||
| 3 | import dagger.Module | 4 | import dagger.Module |
| 4 | import dagger.Provides | 5 | import dagger.Provides |
| 5 | import okhttp3.OkHttpClient | 6 | import okhttp3.OkHttpClient |
| 6 | import okhttp3.WebSocket | 7 | import okhttp3.WebSocket |
| 7 | -import javax.annotation.Nullable | ||
| 8 | import javax.inject.Named | 8 | import javax.inject.Named |
| 9 | import javax.inject.Singleton | 9 | import javax.inject.Singleton |
| 10 | 10 |
| 1 | package io.livekit.android.room | 1 | package io.livekit.android.room |
| 2 | 2 | ||
| 3 | import android.os.SystemClock | 3 | import android.os.SystemClock |
| 4 | +import com.google.protobuf.ByteString | ||
| 4 | import io.livekit.android.ConnectOptions | 5 | import io.livekit.android.ConnectOptions |
| 5 | import io.livekit.android.dagger.InjectionNames | 6 | import io.livekit.android.dagger.InjectionNames |
| 6 | import io.livekit.android.room.participant.ParticipantTrackPermission | 7 | import io.livekit.android.room.participant.ParticipantTrackPermission |
| @@ -682,7 +683,7 @@ internal constructor( | @@ -682,7 +683,7 @@ internal constructor( | ||
| 682 | if (buffer == null) { | 683 | if (buffer == null) { |
| 683 | return | 684 | return |
| 684 | } | 685 | } |
| 685 | - val dp = LivekitModels.DataPacket.parseFrom(buffer.data) | 686 | + val dp = LivekitModels.DataPacket.parseFrom(ByteString.copyFrom(buffer.data)) |
| 686 | when (dp.valueCase) { | 687 | when (dp.valueCase) { |
| 687 | LivekitModels.DataPacket.ValueCase.SPEAKER -> { | 688 | LivekitModels.DataPacket.ValueCase.SPEAKER -> { |
| 688 | listener?.onActiveSpeakersUpdate(dp.speaker.speakersList) | 689 | listener?.onActiveSpeakersUpdate(dp.speaker.speakersList) |
| 1 | package io.livekit.android.room | 1 | package io.livekit.android.room |
| 2 | 2 | ||
| 3 | -import com.google.protobuf.util.JsonFormat | ||
| 4 | import com.vdurmont.semver4j.Semver | 3 | import com.vdurmont.semver4j.Semver |
| 5 | import io.livekit.android.ConnectOptions | 4 | import io.livekit.android.ConnectOptions |
| 6 | import io.livekit.android.dagger.InjectionNames | 5 | import io.livekit.android.dagger.InjectionNames |
| @@ -38,12 +37,8 @@ class SignalClient | @@ -38,12 +37,8 @@ class SignalClient | ||
| 38 | @Inject | 37 | @Inject |
| 39 | constructor( | 38 | constructor( |
| 40 | private val websocketFactory: WebSocket.Factory, | 39 | private val websocketFactory: WebSocket.Factory, |
| 41 | - private val fromJsonProtobuf: JsonFormat.Parser, | ||
| 42 | - private val toJsonProtobuf: JsonFormat.Printer, | ||
| 43 | private val json: Json, | 40 | private val json: Json, |
| 44 | private val okHttpClient: OkHttpClient, | 41 | private val okHttpClient: OkHttpClient, |
| 45 | - @Named(InjectionNames.SIGNAL_JSON_ENABLED) | ||
| 46 | - private val useJson: Boolean, | ||
| 47 | @Named(InjectionNames.DISPATCHER_IO) | 42 | @Named(InjectionNames.DISPATCHER_IO) |
| 48 | private val ioDispatcher: CoroutineDispatcher, | 43 | private val ioDispatcher: CoroutineDispatcher, |
| 49 | ) : WebSocketListener() { | 44 | ) : WebSocketListener() { |
| @@ -197,11 +192,7 @@ constructor( | @@ -197,11 +192,7 @@ constructor( | ||
| 197 | } | 192 | } |
| 198 | 193 | ||
| 199 | override fun onMessage(webSocket: WebSocket, text: String) { | 194 | override fun onMessage(webSocket: WebSocket, text: String) { |
| 200 | - val signalResponseBuilder = LivekitRtc.SignalResponse.newBuilder() | ||
| 201 | - fromJsonProtobuf.merge(text, signalResponseBuilder) | ||
| 202 | - val response = signalResponseBuilder.build() | ||
| 203 | - | ||
| 204 | - handleSignalResponse(response) | 195 | + LKLog.w { "received JSON message, unsupported in this version." } |
| 205 | } | 196 | } |
| 206 | 197 | ||
| 207 | override fun onMessage(webSocket: WebSocket, bytes: ByteString) { | 198 | override fun onMessage(webSocket: WebSocket, bytes: ByteString) { |
| @@ -444,14 +435,8 @@ constructor( | @@ -444,14 +435,8 @@ constructor( | ||
| 444 | LKLog.w { "not connected, could not send request $request" } | 435 | LKLog.w { "not connected, could not send request $request" } |
| 445 | return | 436 | return |
| 446 | } | 437 | } |
| 447 | - val sent: Boolean | ||
| 448 | - if (useJson) { | ||
| 449 | - val message = toJsonProtobuf.print(request) | ||
| 450 | - sent = currentWs?.send(message) ?: false | ||
| 451 | - } else { | ||
| 452 | val message = request.toByteArray().toByteString() | 438 | val message = request.toByteArray().toByteString() |
| 453 | - sent = currentWs?.send(message) ?: false | ||
| 454 | - } | 439 | + val sent = currentWs?.send(message) ?: false |
| 455 | 440 | ||
| 456 | if (!sent) { | 441 | if (!sent) { |
| 457 | LKLog.e { "error sending request: $request" } | 442 | LKLog.e { "error sending request: $request" } |
| @@ -463,7 +448,7 @@ constructor( | @@ -463,7 +448,7 @@ constructor( | ||
| 463 | 448 | ||
| 464 | if (!isConnected) { | 449 | if (!isConnected) { |
| 465 | // Only handle joins if not connected. | 450 | // Only handle joins if not connected. |
| 466 | - if (response.hasJoin()) { | 451 | + if (response.join != null) { |
| 467 | isConnected = true | 452 | isConnected = true |
| 468 | startRequestQueue() | 453 | startRequestQueue() |
| 469 | try { | 454 | try { |
| @@ -473,7 +458,7 @@ constructor( | @@ -473,7 +458,7 @@ constructor( | ||
| 473 | } | 458 | } |
| 474 | joinContinuation?.resumeWith(Result.success(Either.Left(response.join))) | 459 | joinContinuation?.resumeWith(Result.success(Either.Left(response.join))) |
| 475 | } else { | 460 | } else { |
| 476 | - LKLog.e { "Received response while not connected. ${toJsonProtobuf.print(response)}" } | 461 | + LKLog.e { "Received response while not connected. $response" } |
| 477 | } | 462 | } |
| 478 | return | 463 | return |
| 479 | } | 464 | } |
| 1 | package io.livekit.android.room | 1 | package io.livekit.android.room |
| 2 | 2 | ||
| 3 | -import com.google.protobuf.util.JsonFormat | ||
| 4 | import io.livekit.android.BaseTest | 3 | import io.livekit.android.BaseTest |
| 5 | import io.livekit.android.mock.MockWebSocketFactory | 4 | import io.livekit.android.mock.MockWebSocketFactory |
| 6 | import io.livekit.android.mock.TestData | 5 | import io.livekit.android.mock.TestData |
| @@ -38,10 +37,7 @@ class SignalClientTest : BaseTest() { | @@ -38,10 +37,7 @@ class SignalClientTest : BaseTest() { | ||
| 38 | wsFactory = MockWebSocketFactory() | 37 | wsFactory = MockWebSocketFactory() |
| 39 | client = SignalClient( | 38 | client = SignalClient( |
| 40 | wsFactory, | 39 | wsFactory, |
| 41 | - JsonFormat.parser(), | ||
| 42 | - JsonFormat.printer(), | ||
| 43 | Json, | 40 | Json, |
| 44 | - useJson = false, | ||
| 45 | okHttpClient = okHttpClient, | 41 | okHttpClient = okHttpClient, |
| 46 | ioDispatcher = coroutineRule.dispatcher | 42 | ioDispatcher = coroutineRule.dispatcher |
| 47 | ) | 43 | ) |
| @@ -221,8 +217,8 @@ class SignalClientTest : BaseTest() { | @@ -221,8 +217,8 @@ class SignalClientTest : BaseTest() { | ||
| 221 | const val EXAMPLE_URL = "ws://www.example.com" | 217 | const val EXAMPLE_URL = "ws://www.example.com" |
| 222 | 218 | ||
| 223 | val JOIN = with(LivekitRtc.SignalResponse.newBuilder()) { | 219 | val JOIN = with(LivekitRtc.SignalResponse.newBuilder()) { |
| 224 | - join = with(joinBuilder) { | ||
| 225 | - room = with(roomBuilder) { | 220 | + join = with(LivekitRtc.JoinResponse.newBuilder()) { |
| 221 | + room = with(LivekitModels.Room.newBuilder()) { | ||
| 226 | name = "roomname" | 222 | name = "roomname" |
| 227 | sid = "room_sid" | 223 | sid = "room_sid" |
| 228 | build() | 224 | build() |
| @@ -236,7 +232,7 @@ class SignalClientTest : BaseTest() { | @@ -236,7 +232,7 @@ class SignalClientTest : BaseTest() { | ||
| 236 | } | 232 | } |
| 237 | 233 | ||
| 238 | val OFFER = with(LivekitRtc.SignalResponse.newBuilder()) { | 234 | val OFFER = with(LivekitRtc.SignalResponse.newBuilder()) { |
| 239 | - offer = with(offerBuilder) { | 235 | + offer = with(LivekitRtc.SessionDescription.newBuilder()) { |
| 240 | sdp = "remote_offer" | 236 | sdp = "remote_offer" |
| 241 | type = "offer" | 237 | type = "offer" |
| 242 | build() | 238 | build() |
| @@ -245,8 +241,8 @@ class SignalClientTest : BaseTest() { | @@ -245,8 +241,8 @@ class SignalClientTest : BaseTest() { | ||
| 245 | } | 241 | } |
| 246 | 242 | ||
| 247 | val ROOM_UPDATE = with(LivekitRtc.SignalResponse.newBuilder()) { | 243 | val ROOM_UPDATE = with(LivekitRtc.SignalResponse.newBuilder()) { |
| 248 | - roomUpdate = with(roomUpdateBuilder) { | ||
| 249 | - room = with(roomBuilder) { | 244 | + roomUpdate = with(LivekitRtc.RoomUpdate.newBuilder()) { |
| 245 | + room = with(LivekitModels.Room.newBuilder()) { | ||
| 250 | metadata = "metadata" | 246 | metadata = "metadata" |
| 251 | build() | 247 | build() |
| 252 | } | 248 | } |
| @@ -256,7 +252,7 @@ class SignalClientTest : BaseTest() { | @@ -256,7 +252,7 @@ class SignalClientTest : BaseTest() { | ||
| 256 | } | 252 | } |
| 257 | 253 | ||
| 258 | val LOCAL_TRACK_PUBLISHED = with(LivekitRtc.SignalResponse.newBuilder()) { | 254 | val LOCAL_TRACK_PUBLISHED = with(LivekitRtc.SignalResponse.newBuilder()) { |
| 259 | - trackPublished = with(trackPublishedBuilder) { | 255 | + trackPublished = with(LivekitRtc.TrackPublishedResponse.newBuilder()) { |
| 260 | cid = "local_cid" | 256 | cid = "local_cid" |
| 261 | track = TestData.LOCAL_AUDIO_TRACK | 257 | track = TestData.LOCAL_AUDIO_TRACK |
| 262 | build() | 258 | build() |
| @@ -306,7 +302,7 @@ class SignalClientTest : BaseTest() { | @@ -306,7 +302,7 @@ class SignalClientTest : BaseTest() { | ||
| 306 | 302 | ||
| 307 | 303 | ||
| 308 | val CONNECTION_QUALITY = with(LivekitRtc.SignalResponse.newBuilder()) { | 304 | val CONNECTION_QUALITY = with(LivekitRtc.SignalResponse.newBuilder()) { |
| 309 | - connectionQuality = with(connectionQualityBuilder) { | 305 | + connectionQuality = with(LivekitRtc.ConnectionQualityUpdate.newBuilder()) { |
| 310 | addUpdates(with(LivekitRtc.ConnectionQualityInfo.newBuilder()) { | 306 | addUpdates(with(LivekitRtc.ConnectionQualityInfo.newBuilder()) { |
| 311 | participantSid = JOIN.join.participant.sid | 307 | participantSid = JOIN.join.participant.sid |
| 312 | quality = LivekitModels.ConnectionQuality.EXCELLENT | 308 | quality = LivekitModels.ConnectionQuality.EXCELLENT |
| @@ -345,7 +341,7 @@ class SignalClientTest : BaseTest() { | @@ -345,7 +341,7 @@ class SignalClientTest : BaseTest() { | ||
| 345 | build() | 341 | build() |
| 346 | } | 342 | } |
| 347 | val LEAVE = with(LivekitRtc.SignalResponse.newBuilder()) { | 343 | val LEAVE = with(LivekitRtc.SignalResponse.newBuilder()) { |
| 348 | - leave = with(leaveBuilder) { | 344 | + leave = with(LivekitRtc.LeaveRequest.newBuilder()) { |
| 349 | build() | 345 | build() |
| 350 | } | 346 | } |
| 351 | build() | 347 | build() |
| @@ -40,7 +40,7 @@ dependencies { | @@ -40,7 +40,7 @@ dependencies { | ||
| 40 | api "androidx.lifecycle:lifecycle-runtime-ktx:${versions.androidx_lifecycle}" | 40 | api "androidx.lifecycle:lifecycle-runtime-ktx:${versions.androidx_lifecycle}" |
| 41 | api "androidx.lifecycle:lifecycle-viewmodel-ktx:${versions.androidx_lifecycle}" | 41 | api "androidx.lifecycle:lifecycle-viewmodel-ktx:${versions.androidx_lifecycle}" |
| 42 | api "androidx.lifecycle:lifecycle-common-java8:${versions.androidx_lifecycle}" | 42 | api "androidx.lifecycle:lifecycle-common-java8:${versions.androidx_lifecycle}" |
| 43 | - api "com.google.protobuf:protobuf-java:${versions.protobuf}" | 43 | + api "com.google.protobuf:protobuf-javalite:${versions.protobuf}" |
| 44 | api project(":livekit-android-sdk") | 44 | api project(":livekit-android-sdk") |
| 45 | implementation 'androidx.preference:preference-ktx:1.1.1' | 45 | implementation 'androidx.preference:preference-ktx:1.1.1' |
| 46 | // debugImplementation because LeakCanary should only run in debug builds. | 46 | // debugImplementation because LeakCanary should only run in debug builds. |
-
请 注册 或 登录 后发表评论