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-03-22 22:56:19 -0700
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
2f43f9d774c183f81e8dcd0ad2927531d378822e
2f43f9d7
1 parent
3195dc3d
Docs pass
显示空白字符变更
内嵌
并排对比
正在显示
15 个修改的文件
包含
104 行增加
和
27 行删除
livekit-android-sdk/build.gradle
livekit-android-sdk/src/main/java/io/livekit/android/ConnectOptions.kt
livekit-android-sdk/src/main/java/io/livekit/android/LiveKit.kt
livekit-android-sdk/src/main/java/io/livekit/android/room/IceCandidateJSON.kt
livekit-android-sdk/src/main/java/io/livekit/android/room/PeerConnectionTransport.kt
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/SubscriberTransportObserver.kt
livekit-android-sdk/src/main/java/io/livekit/android/room/participant/LocalParticipant.kt
livekit-android-sdk/src/main/java/io/livekit/android/room/participant/Participant.kt
livekit-android-sdk/src/main/java/io/livekit/android/room/participant/RemoteParticipant.kt
livekit-android-sdk/src/main/java/io/livekit/android/room/track/LocalVideoTrack.kt
sample-app/src/main/java/io/livekit/android/sample/MainActivity.kt
livekit-android-sdk/build.gradle
查看文件 @
2f43f9d
...
...
@@ -65,7 +65,7 @@ dokkaHtml {
skipEmptyPackages
.
set
(
true
)
includeNonPublic
.
set
(
false
)
includes
.
from
(
"module.md"
)
displayName
.
set
(
"SDK"
)
sourceLink
{
localDirectory
.
set
(
file
(
"src/main/java"
))
...
...
@@ -75,6 +75,16 @@ dokkaHtml {
// Suffix which is used to append the line number to the URL. Use #L for GitHub
remoteLineSuffix
.
set
(
"#L"
)
}
perPackageOption
{
matchingRegex
.
set
(
".*\\.dagger.*"
)
suppress
.
set
(
true
)
}
perPackageOption
{
matchingRegex
.
set
(
".*\\.util.*"
)
suppress
.
set
(
true
)
}
}
}
}
...
...
livekit-android-sdk/src/main/java/io/livekit/android/ConnectOptions.kt
查看文件 @
2f43f9d
...
...
@@ -2,7 +2,6 @@ package io.livekit.android
data class ConnectOptions(
val isSecure: Boolean = true,
val sendAudio: Boolean = true,
val sendVideo: Boolean = true,
)
\ No newline at end of file
...
...
livekit-android-sdk/src/main/java/io/livekit/android/LiveKit.kt
查看文件 @
2f43f9d
...
...
@@ -11,6 +11,11 @@ import org.webrtc.PeerConnectionFactory
class LiveKit {
companion object {
/**
* Connect to a LiveKit room
* @param url URL to LiveKit server (i.e. ws://mylivekitdeploy.io)
* @param listener Listener to Room events. LiveKit interactions take place with these callbacks
*/
suspend fun connect(
appContext: Context,
url: String,
...
...
@@ -26,7 +31,7 @@ class LiveKit {
val room = component.roomFactory()
.create(options)
room.listener = listener
room.connect(url, token
, options.isSecure
)
room.connect(url, token)
val localParticipant = room.localParticipant
if (localParticipant != null) {
...
...
@@ -54,7 +59,7 @@ class LiveKit {
context: Context,
rootEglBase: EglBase,
): LocalVideoTrack {
return LocalVideoTrack.
t
rack(
return LocalVideoTrack.
createT
rack(
peerConnectionFactory,
context,
true,
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/IceCandidateJSON.kt
查看文件 @
2f43f9d
...
...
@@ -2,5 +2,8 @@ package io.livekit.android.room
import kotlinx.serialization.Serializable
/**
* @suppress
*/
@Serializable
data class IceCandidateJSON(val candidate: String, val sdpMLineIndex: Int, val sdpMid: String?)
\ No newline at end of file
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/PeerConnectionTransport.kt
查看文件 @
2f43f9d
...
...
@@ -5,6 +5,9 @@ import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import org.webrtc.*
/**
* @suppress
*/
class PeerConnectionTransport
@AssistedInject
constructor(
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/PublisherTransportObserver.kt
查看文件 @
2f43f9d
...
...
@@ -4,6 +4,9 @@ import com.github.ajalt.timberkt.Timber
import livekit.LivekitRtc
import org.webrtc.*
/**
* @suppress
*/
class PublisherTransportObserver(
private val engine: RTCEngine
) : PeerConnection.Observer {
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/RTCClient.kt
查看文件 @
2f43f9d
...
...
@@ -21,6 +21,9 @@ import org.webrtc.SessionDescription
import javax.inject.Inject
import javax.inject.Named
/**
* @suppress
*/
class RTCClient
@Inject
constructor(
...
...
@@ -38,13 +41,10 @@ constructor(
var listener: Listener? = null
fun join(
host
: String,
url
: String,
token: String,
isSecure: Boolean,
) {
val protocol = if (isSecure) "wss" else "ws"
val wsUrlString = "$protocol://$host/rtc?access_token=$token"
val wsUrlString = "$url/rtc?access_token=$token"
Timber.i { "connecting to $wsUrlString" }
val request = Request.Builder()
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/RTCEngine.kt
查看文件 @
2f43f9d
...
...
@@ -20,7 +20,9 @@ import kotlin.coroutines.Continuation
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine
/**
* @suppress
*/
class RTCEngine
@Inject
constructor(
...
...
@@ -70,8 +72,8 @@ constructor(
)
}
fun join(url: String, token: String, isSecure: Boolean) {
client.join(url, token, isSecure)
fun join(url: String, token: String) {
client.join(url, token)
}
suspend fun addTrack(cid: Track.Cid, name: String, kind: LivekitModels.TrackType): LivekitModels.TrackInfo {
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/Room.kt
查看文件 @
2f43f9d
...
...
@@ -57,12 +57,12 @@ constructor(
get() = mutableActiveSpeakers
private var connectContinuation: Continuation<Unit>? = null
suspend fun connect(url: String, token: String
, isSecure: Boolean
) {
suspend fun connect(url: String, token: String) {
if (localParticipant != null) {
Timber.d { "Attempting to connect to room when already connected." }
return
}
engine.join(url, token
, isSecure
)
engine.join(url, token)
return suspendCoroutine { connectContinuation = it }
}
...
...
@@ -132,11 +132,18 @@ constructor(
listener?.onActiveSpeakersChanged(speakers, this)
}
/**
* @suppress
*/
@AssistedFactory
interface Factory {
fun create(connectOptions: ConnectOptions): Room
}
/**
* Room Listener, this class provides callbacks that clients should override.
*
*/
interface Listener {
fun onConnect(room: Room) {}
fun onDisconnect(room: Room, error: Exception?) {}
...
...
@@ -150,6 +157,9 @@ constructor(
fun onActiveSpeakersChanged(speakers: List<Participant>, room: Room) {}
}
/**
* @suppress
*/
override fun onJoin(response: LivekitRtc.JoinResponse) {
Timber.v { "engine did join, version: ${response.serverVersion}" }
...
...
@@ -181,6 +191,9 @@ constructor(
listener?.onConnect(this)
}
/**
* @suppress
*/
override fun onAddTrack(track: MediaStreamTrack, streams: Array<out MediaStream>) {
if (streams.count() < 0) {
Timber.i { "add track with empty streams?" }
...
...
@@ -193,6 +206,9 @@ constructor(
participant.addSubscribedMediaTrack(track, trackSid)
}
/**
* @suppress
*/
override fun onAddDataChannel(channel: DataChannel) {
val unpackedTrackLabel = channel.unpackedTrackLabel()
val (participantSid, trackSid, name) = unpackedTrackLabel
...
...
@@ -200,10 +216,15 @@ constructor(
participant.addSubscribedDataTrack(channel, trackSid, name)
}
/**
* @suppress
*/
override fun onPublishLocalTrack(cid: Track.Cid, track: LivekitModels.TrackInfo) {
}
/**
* @suppress
*/
override fun onUpdateParticipants(updates: List<LivekitModels.ParticipantInfo>) {
for (info in updates) {
val participantSid = Participant.Sid(info.sid)
...
...
@@ -225,19 +246,32 @@ constructor(
}
}
/**
* @suppress
*/
override fun onUpdateSpeakers(speakers: List<LivekitRtc.SpeakerInfo>) {
handleSpeakerUpdate(speakers)
}
/**
* @suppress
*/
override fun onDisconnect(reason: String) {
Timber.v { "engine did disconnect: $reason" }
listener?.onDisconnect(this, null)
}
/**
* @suppress
*/
override fun onFailToConnect(error: Exception) {
listener?.onFailedToConnect(this, error)
}
/**
* @suppress
* // TODO(@dl): can this be moved out of Room/SDK?
*/
fun initVideoRenderer(viewRenderer: SurfaceViewRenderer) {
viewRenderer.init(eglBase.eglBaseContext, null)
viewRenderer.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT)
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/SubscriberTransportObserver.kt
查看文件 @
2f43f9d
...
...
@@ -4,6 +4,9 @@ import com.github.ajalt.timberkt.Timber
import livekit.LivekitRtc
import org.webrtc.*
/**
* @suppress
*/
class SubscriberTransportObserver(
private val engine: RTCEngine
) : PeerConnection.Observer {
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/participant/LocalParticipant.kt
查看文件 @
2f43f9d
...
...
@@ -10,6 +10,10 @@ import java.util.*
class LocalParticipant(sid: Sid, name: String? = null) :
Participant(sid, name) {
/**
* @suppress
*/
constructor(info: LivekitModels.ParticipantInfo, engine: RTCEngine) : this(
Sid(info.sid),
info.identity
...
...
@@ -18,8 +22,6 @@ class LocalParticipant(sid: Sid, name: String? = null) :
this.engine = engine
}
private val streamId = UUID.randomUUID().toString()
val localAudioTrackPublications
get() = audioTracks.values.toList()
val localVideoTrackPublications
...
...
@@ -30,6 +32,9 @@ class LocalParticipant(sid: Sid, name: String? = null) :
var engine: RTCEngine? = null
val listener: Listener? = null
/**
* @suppress
*/
fun updateFromInfo(info: LivekitModels.ParticipantInfo) {
sid = Sid(info.sid)
name = info.identity
...
...
@@ -55,7 +60,7 @@ class LocalParticipant(sid: Sid, name: String? = null) :
engine.addTrack(cid = Track.Cid(cid), name = track.name, kind = LivekitModels.TrackType.AUDIO)
val transInit = RtpTransceiver.RtpTransceiverInit(
RtpTransceiver.RtpTransceiverDirection.SEND_ONLY,
listOf(
streamI
d)
listOf(
this.sid.si
d)
)
val transceiver =
engine.publisher.peerConnection.addTransceiver(track.rtcTrack, transInit)
...
...
@@ -92,7 +97,7 @@ class LocalParticipant(sid: Sid, name: String? = null) :
engine.addTrack(cid = Track.Cid(cid), name = track.name, kind = LivekitModels.TrackType.VIDEO)
val transInit = RtpTransceiver.RtpTransceiverInit(
RtpTransceiver.RtpTransceiverDirection.SEND_ONLY,
listOf(
streamI
d)
listOf(
this.sid.si
d)
)
val transceiver =
engine.publisher.peerConnection.addTransceiver(track.rtcTrack, transInit)
...
...
@@ -166,7 +171,6 @@ class LocalParticipant(sid: Sid, name: String? = null) :
}
fun unpublishDataTrack(track: LocalDataTrack) {
val sid = track.sid ?: run {
Timber.d { "this track was never published." }
return
...
...
@@ -202,7 +206,6 @@ class LocalParticipant(sid: Sid, name: String? = null) :
}
interface Listener {
fun onPublishAudioTrack(track: LocalAudioTrack)
fun onFailToPublishAudioTrack(exception: Exception)
fun onPublishVideoTrack(track: LocalVideoTrack)
...
...
@@ -211,5 +214,4 @@ class LocalParticipant(sid: Sid, name: String? = null) :
fun onFailToPublishDataTrack(exception: Exception)
//fun onNetworkQualityLevelChange
}
}
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/participant/Participant.kt
查看文件 @
2f43f9d
...
...
@@ -19,6 +19,9 @@ open class Participant(var sid: Sid, name: String? = null) {
var dataTracks = mutableMapOf<Track.Sid, TrackPublication>()
private set
/**
* @suppress
*/
fun addTrack(publication: TrackPublication) {
tracks[publication.trackSid] = publication
when (publication) {
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/participant/RemoteParticipant.kt
查看文件 @
2f43f9d
...
...
@@ -16,7 +16,9 @@ import java.nio.ByteBuffer
class RemoteParticipant(
sid: Sid, name: String? = null
) : Participant(sid, name), RemoteDataTrack.Listener {
/**
* @suppress
*/
constructor(info: LivekitModels.ParticipantInfo) : this(Sid(info.sid), info.identity) {
updateFromInfo(info)
}
...
...
@@ -40,6 +42,9 @@ class RemoteParticipant(
fun getTrackPublication(sid: Track.Sid): RemoteTrackPublication? =
tracks[sid] as? RemoteTrackPublication
/**
* @suppress
*/
fun updateFromInfo(info: LivekitModels.ParticipantInfo) {
val hadInfo = hasInfo
sid = Sid(info.sid)
...
...
@@ -85,6 +90,9 @@ class RemoteParticipant(
}
}
/**
* @suppress
*/
fun addSubscribedMediaTrack(rtcTrack: MediaStreamTrack, sid: Track.Sid, triesLeft: Int = 20) {
val publication = getTrackPublication(sid)
val track: Track = when (val kind = rtcTrack.kind()) {
...
...
@@ -136,6 +144,9 @@ class RemoteParticipant(
}
}
/**
* @suppress
*/
fun addSubscribedDataTrack(rtcTrack: DataChannel, sid: Track.Sid, name: String) {
val track = RemoteDataTrack(sid, name, rtcTrack)
var publication = getTrackPublication(sid) as? RemoteDataTrackPublication
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/track/LocalVideoTrack.kt
查看文件 @
2f43f9d
...
...
@@ -19,7 +19,7 @@ class LocalVideoTrack(
var sid: Sid? = null
companion object {
internal fun
t
rack(
internal fun
createT
rack(
peerConnectionFactory: PeerConnectionFactory,
context: Context,
enabled: Boolean,
...
...
@@ -83,6 +83,5 @@ class LocalVideoTrack(
}
return null
}
}
}
\ No newline at end of file
...
...
sample-app/src/main/java/io/livekit/android/sample/MainActivity.kt
查看文件 @
2f43f9d
...
...
@@ -71,8 +71,8 @@ class MainActivity : AppCompatActivity() {
}
companion object {
val URL = SpannableStringBuilder("
192.168.11.2
:7880")
val URL = SpannableStringBuilder("
ws://192.168.91.198
:7880")
val TOKEN =
SpannableStringBuilder("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MTg
2MjY0NDAsImlzcyI6IkFQSXdMZWFoN2c0ZnVMWURZQUplYUtzU0UiLCJqdGkiOiJwaG9uZSIsIm5iZiI6MTYxNjAzNDQ0MCwidmlkZW8iOnsicm9vbSI6Im15cm9vbSIsInJvb21Kb2luIjp0cnVlfX0.QWN0B_DO8eSP2sJivnr_QzBud_sdIgJeWDQGQz67DvY
")
SpannableStringBuilder("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MTg
yMDg0NTAsImlzcyI6IkFQSU1teGlMOHJxdUt6dFpFb1pKVjlGYiIsImp0aSI6ImZvcnRoIiwibmJmIjoxNjE1NjE2NDUwLCJ2aWRlbyI6eyJyb29tIjoibXlyb29tIiwicm9vbUpvaW4iOnRydWV9fQ.nu-fOZA-TPFvzleyXk2Zz9b5lFApCXV1npUAexttXQA
")
}
}
\ No newline at end of file
...
...
请
注册
或
登录
后发表评论