David Liu

publish and unpublish events for local participant

... ... @@ -76,7 +76,7 @@ constructor(
}
val lp = localParticipantFactory.create(response.participant)
lp.listener = this
lp.internalListener = this
localParticipant = lp
if (response.otherParticipantsList.isNotEmpty()) {
response.otherParticipantsList.forEach {
... ... @@ -366,7 +366,7 @@ constructor(
listener?.onFailedToConnect(this, error)
}
//------------------------------- RemoteParticipant.Listener --------------------------------//
//------------------------------- ParticipantListener --------------------------------//
/**
* This is called for both Local and Remote participants
* @suppress
... ... @@ -402,6 +402,20 @@ constructor(
/**
* @suppress
*/
override fun onTrackPublished(publication: LocalTrackPublication, participant: LocalParticipant) {
listener?.onTrackPublished(publication, participant, this)
}
/**
* @suppress
*/
override fun onTrackUnpublished(publication: LocalTrackPublication, participant: LocalParticipant) {
listener?.onTrackUnpublished(publication, participant, this)
}
/**
* @suppress
*/
override fun onTrackSubscribed(track: Track, publication: RemoteTrackPublication, participant: RemoteParticipant) {
listener?.onTrackSubscribed(track, publication, participant, this)
}
... ... @@ -531,6 +545,16 @@ interface RoomListener {
fun onTrackUnpublished(publication: TrackPublication, participant: RemoteParticipant, room: Room) {}
/**
* When a new track is published to room after the local participant has joined.
*/
fun onTrackPublished(publication: LocalTrackPublication, participant: LocalParticipant, room: Room) {}
/**
* [LocalParticipant] has unpublished a track
*/
fun onTrackUnpublished(publication: LocalTrackPublication, participant: LocalParticipant, room: Room) {}
/**
* The [LocalParticipant] has subscribed to a new track. This event will always fire as
* long as new tracks are ready for use.
*/
... ...
... ... @@ -34,7 +34,9 @@ internal constructor(
}
private val localTrackPublications
get() = tracks.values.toList()
get() = tracks.values
.mapNotNull { it as? LocalTrackPublication }
.toList()
/**
* Creates an audio track, recording audio through the microphone with the given [options].
... ... @@ -133,6 +135,7 @@ internal constructor(
val publication = LocalTrackPublication(trackInfo, track, this)
addTrackPublication(publication)
publishListener?.onPublishSuccess(publication)
internalListener?.onTrackPublished(publication, this)
}
suspend fun publishVideoTrack(
... ... @@ -180,6 +183,7 @@ internal constructor(
val publication = LocalTrackPublication(trackInfo, track, this)
addTrackPublication(publication)
publishListener?.onPublishSuccess(publication)
internalListener?.onTrackPublished(publication, this)
}
private fun computeVideoEncodings(
... ... @@ -282,7 +286,8 @@ internal constructor(
when (publication.kind) {
Track.Kind.AUDIO -> audioTracks.remove(sid)
Track.Kind.VIDEO -> videoTracks.remove(sid)
else -> {}
else -> {
}
}
val senders = engine.publisher.peerConnection.senders ?: return
for (sender in senders) {
... ... @@ -292,6 +297,7 @@ internal constructor(
}
}
track.stop()
internalListener?.onTrackUnpublished(publication, this)
}
/**
... ...
... ... @@ -123,6 +123,17 @@ interface ParticipantListener {
fun onTrackUnmuted(publication: TrackPublication, participant: Participant) {}
// local participants
/**
* When a new track is published by the local participant.
*/
fun onTrackPublished(publication: LocalTrackPublication, participant: LocalParticipant) {}
/**
* A [LocalParticipant] has unpublished a track
*/
fun onTrackUnpublished(publication: LocalTrackPublication, participant: LocalParticipant) {}
// remote participants
/**
* When a new track is published to room after the local participant has joined.
... ...