Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
xuning
/
livekitAndroidXuningTest
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
David Zhao
2021-04-05 23:37:36 -0700
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
c4c089b8f263b72b8e31274ea124102f8a63b90c
c4c089b8
1 parent
faf6b399
separate onJoin and onICEConnected to eliminate race conditions. clean up after …
…tracks upon disconnect
隐藏空白字符变更
内嵌
并排对比
正在显示
7 个修改的文件
包含
33 行增加
和
21 行删除
.idea/runConfigurations.xml
livekit-android-sdk/src/main/java/io/livekit/android/room/PublisherTransportObserver.kt
livekit-android-sdk/src/main/java/io/livekit/android/room/RTCClient.kt
livekit-android-sdk/src/main/java/io/livekit/android/room/RTCEngine.kt
livekit-android-sdk/src/main/java/io/livekit/android/room/Room.kt
livekit-android-sdk/src/main/java/io/livekit/android/room/track/LocalVideoTrack.kt
livekit-android-sdk/src/main/java/io/livekit/android/room/track/VideoTrack.kt
.idea/runConfigurations.xml
已删除
100644 → 0
查看文件 @
faf6b39
<?xml version="1.0" encoding="UTF-8"?>
<project
version=
"4"
>
<component
name=
"RunConfigurationProducerService"
>
<option
name=
"ignoredProducers"
>
<set>
<option
value=
"org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer"
/>
<option
value=
"org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer"
/>
<option
value=
"org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer"
/>
</set>
</option>
</component>
</project>
\ No newline at end of file
livekit-android-sdk/src/main/java/io/livekit/android/room/PublisherTransportObserver.kt
查看文件 @
c4c089b
...
...
@@ -25,6 +25,7 @@ class PublisherTransportObserver(
Timber.v { "onIceConnection new state: $newState" }
if (state == PeerConnection.IceConnectionState.CONNECTED && !engine.iceConnected) {
engine.iceConnected = true
engine.listener?.onICEConnected()
} else if (state == PeerConnection.IceConnectionState.FAILED) {
// when we publish tracks, some WebRTC versions will send out disconnected events periodically
engine.iceConnected = false
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/RTCClient.kt
查看文件 @
c4c089b
...
...
@@ -221,8 +221,7 @@ constructor(
}
if (!sent) {
Timber.d { "error sending request: $request" }
throw IllegalStateException()
Timber.e { "error sending request: $request" }
}
}
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/RTCEngine.kt
查看文件 @
c4c089b
...
...
@@ -107,6 +107,7 @@ constructor(
interface Listener {
fun onJoin(response: LivekitRtc.JoinResponse)
fun onICEConnected()
fun onAddTrack(track: MediaStreamTrack, streams: Array<out MediaStream>)
// fun onPublishLocalTrack(cid: String, track: LivekitModels.TrackInfo)
fun onAddDataChannel(channel: DataChannel)
...
...
@@ -136,7 +137,6 @@ constructor(
}
override fun onJoin(info: LivekitRtc.JoinResponse) {
val iceServers = mutableListOf<PeerConnection.IceServer>()
for(serverInfo in info.iceServersList){
val username = serverInfo.username ?: ""
...
...
@@ -161,7 +161,6 @@ constructor(
Timber.e{" $it"}
}
}
listener?.onJoin(info)
val rtcConfig = PeerConnection.RTCConfiguration(iceServers).apply {
sdpSemantics = PeerConnection.SdpSemantics.UNIFIED_PLAN
...
...
@@ -194,6 +193,7 @@ constructor(
client.sendOffer(sdpOffer)
}
listener?.onJoin(info)
}
override fun onAnswer(sessionDescription: SessionDescription) {
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/Room.kt
查看文件 @
c4c089b
...
...
@@ -66,7 +66,6 @@ constructor(
}
fun disconnect() {
engine.close()
handleDisconnect()
}
...
...
@@ -138,6 +137,10 @@ constructor(
}
private fun handleDisconnect() {
for (track in localParticipant?.tracks.values) {
track.track?.stop()
}
engine.close()
state = State.DISCONNECTED
listener?.onDisconnect(this, null)
}
...
...
@@ -175,7 +178,9 @@ constructor(
getOrCreateRemoteParticipant(it.sid, it)
}
}
}
override fun onICEConnected() {
state = State.CONNECTED
connectContinuation?.resume(Unit)
connectContinuation = null
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/track/LocalVideoTrack.kt
查看文件 @
c4c089b
...
...
@@ -20,6 +20,11 @@ class LocalVideoTrack(
capturer.startCapture(400, 400, 30)
}
override fun stop() {
capturer.stopCapture()
super.stop()
}
companion object {
internal fun createTrack(
peerConnectionFactory: PeerConnectionFactory,
...
...
@@ -45,7 +50,6 @@ class LocalVideoTrack(
)
}
private fun createVideoCapturer(context: Context): VideoCapturer? {
val videoCapturer: VideoCapturer? = if (Camera2Enumerator.isSupported(context)) {
createCameraCapturer(Camera2Enumerator(context))
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/track/VideoTrack.kt
查看文件 @
c4c089b
...
...
@@ -5,7 +5,8 @@ import org.webrtc.VideoSink
import org.webrtc.VideoTrack
open class VideoTrack(name: String, override val rtcTrack: VideoTrack) :
MediaTrack(name, LivekitModels.TrackType.VIDEO, rtcTrack){
MediaTrack(name, LivekitModels.TrackType.VIDEO, rtcTrack) {
private val sinks: MutableList<VideoSink> = ArrayList();
var enabled: Boolean
get() = rtcTrack.enabled()
...
...
@@ -13,7 +14,21 @@ open class VideoTrack(name: String, override val rtcTrack: VideoTrack) :
rtcTrack.setEnabled(value)
}
fun addRenderer(renderer: VideoSink) = rtcTrack.addSink(renderer)
fun addRenderer(renderer: VideoSink) {
sinks.add(renderer)
rtcTrack.addSink(renderer)
}
fun removeRenderer(renderer: VideoSink) = rtcTrack.addSink(renderer)
fun removeRenderer(renderer: VideoSink) {
sinks.remove(renderer)
rtcTrack.addSink(renderer)
}
override fun stop() {
for (sink in sinks) {
rtcTrack.removeSink(sink)
}
sinks.clear()
super.stop()
}
}
...
...
请
注册
或
登录
后发表评论