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 Liu
2021-11-18 18:07:54 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
e040874eebda8ba34c568c4d6e79e977a2731c01
e040874e
1 parent
274af5f1
display identities and no video indicator
显示空白字符变更
内嵌
并排对比
正在显示
7 个修改的文件
包含
123 行增加
和
18 行删除
.idea/codeStyles/Project.xml
sample-app/src/main/java/io/livekit/android/sample/CallActivity.kt
sample-app/src/main/java/io/livekit/android/sample/ParticipantItem.kt
sample-app/src/main/res/layout/call_activity.xml
sample-app/src/main/res/layout/participant_item.xml
sample-app/src/main/res/values/colors.xml
sample-app/src/main/res/values/dimens.xml
.idea/codeStyles/Project.xml
查看文件 @
e040874
...
...
@@ -117,6 +117,7 @@
</codeStyleSettings>
<codeStyleSettings
language=
"kotlin"
>
<option
name=
"CODE_STYLE_DEFAULTS"
value=
"KOTLIN_OFFICIAL"
/>
<option
name=
"RIGHT_MARGIN"
value=
"120"
/>
</codeStyleSettings>
</code_scheme>
</component>
\ No newline at end of file
...
...
sample-app/src/main/java/io/livekit/android/sample/CallActivity.kt
查看文件 @
e040874
...
...
@@ -5,6 +5,7 @@ import android.media.AudioManager
import android.media.projection.MediaProjectionManager
import android.os.Bundle
import android.os.Parcelable
import android.view.View
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
...
...
@@ -72,7 +73,7 @@ class CallActivity : AppCompatActivity() {
// speaker view setup
viewModel.room.take(1).observe(this) { room ->
room.initVideoRenderer(binding.speakerView)
room.initVideoRenderer(binding.speakerVi
deoVi
ew)
viewModel.activeSpeaker
.scan(Pair<Participant?, Participant?>(null, null)) { pair, participant ->
// old participant is first
...
...
@@ -83,13 +84,19 @@ class CallActivity : AppCompatActivity() {
oldSpeaker?.videoTracks
?.values
?.forEach { trackPublication ->
(trackPublication.track as? VideoTrack)?.removeRenderer(binding.speakerView)
(trackPublication.track as? VideoTrack)?.removeRenderer(binding.speakerVi
deoVi
ew)
}
binding.identityText.text = newSpeaker?.identity
val videoTrack = newSpeaker?.videoTracks?.values
?.firstOrNull()
?.track as? VideoTrack
videoTrack?.addRenderer(binding.speakerView)
if (videoTrack != null) {
videoTrack.addRenderer(binding.speakerVideoView)
binding.speakerVideoView.visibility = View.VISIBLE
} else {
binding.speakerVideoView.visibility = View.INVISIBLE
}
}
}
...
...
@@ -156,7 +163,7 @@ class CallActivity : AppCompatActivity() {
super.onDestroy()
// Release video views
binding.speakerView.release()
binding.speakerVi
deoVi
ew.release()
// Undo audio mode changes
val audioManager = getSystemService(AUDIO_SERVICE) as AudioManager
...
...
sample-app/src/main/java/io/livekit/android/sample/ParticipantItem.kt
查看文件 @
e040874
...
...
@@ -14,10 +14,9 @@ import io.livekit.android.sample.databinding.ParticipantItemBinding
class ParticipantItem(
val room: Room,
val participant: Participant
) :
BindableItem<ParticipantItemBinding>() {
) : BindableItem<ParticipantItemBinding>() {
private var
videoBound = false
private var
boundVideoTrack: VideoTrack? = null
override fun initializeViewBinding(view: View): ParticipantItemBinding {
val binding = ParticipantItemBinding.bind(view)
...
...
@@ -26,8 +25,7 @@ class ParticipantItem(
}
override fun bind(viewBinding: ParticipantItemBinding, position: Int) {
viewBinding.run {
viewBinding.identityText.text = participant.identity
participant.listener = object : ParticipantListener {
override fun onTrackSubscribed(
track: Track,
...
...
@@ -53,25 +51,25 @@ class ParticipantItem(
setupVideoIfNeeded(existingTrack, viewBinding)
}
}
}
private fun getVideoTrack(): VideoTrack? {
return participant.getTrackPublication(Track.Source.CAMERA)?.track as? VideoTrack
}
internal fun setupVideoIfNeeded(videoTrack: VideoTrack, viewBinding: ParticipantItemBinding) {
if (
videoBound
) {
if (
boundVideoTrack != null
) {
return
}
videoBound = true
boundVideoTrack = videoTrack
Timber.v { "adding renderer to $videoTrack" }
videoTrack.addRenderer(viewBinding.renderer)
}
override fun unbind(viewHolder: GroupieViewHolder<ParticipantItemBinding>) {
super.unbind(viewHolder)
videoBound = false
boundVideoTrack?.removeRenderer(viewHolder.binding.renderer)
boundVideoTrack = null
}
override fun getLayout(): Int = R.layout.participant_item
...
...
sample-app/src/main/res/layout/call_activity.xml
查看文件 @
e040874
...
...
@@ -4,15 +4,64 @@
android:layout_height=
"match_parent"
android:keepScreenOn=
"true"
>
<
io.livekit.android.renderer.TextureViewRenderer
<
FrameLayout
android:id=
"@+id/speaker_view"
android:layout_width=
"0dp"
android:layout_height=
"0dp"
android:background=
"@color/no_video_background"
app:layout_constraintBottom_toTopOf=
"@id/audience_row"
app:layout_constraintTop_toTopOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
>
<ImageView
android:layout_width=
"120dp"
android:layout_height=
"120dp"
android:layout_gravity=
"center"
android:src=
"@drawable/outline_videocam_off_24"
app:tint=
"@color/no_video_participant"
/>
<io.livekit.android.renderer.TextureViewRenderer
android:id=
"@+id/speaker_video_view"
android:layout_width=
"0dp"
android:layout_height=
"0dp"
app:layout_constraintBottom_toTopOf=
"@id/audience_row"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
</FrameLayout>
<FrameLayout
android:id=
"@+id/identity_bar"
android:layout_width=
"0dp"
android:layout_height=
"30dp"
android:background=
"#80000000"
app:layout_constraintBottom_toBottomOf=
"@id/speaker_view"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
/>
<ImageView
android:id=
"@+id/mute_indicator"
android:layout_width=
"24dp"
android:layout_height=
"24dp"
android:layout_marginEnd=
"@dimen/identity_bar_padding"
android:src=
"@drawable/outline_mic_off_24"
app:layout_constraintBottom_toBottomOf=
"@id/identity_bar"
app:layout_constraintEnd_toEndOf=
"@id/identity_bar"
app:layout_constraintTop_toTopOf=
"@id/identity_bar"
app:tint=
"#BB0000"
/>
<TextView
android:id=
"@+id/identity_text"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/identity_bar_padding"
android:ellipsize=
"end"
app:layout_constraintBottom_toBottomOf=
"@id/identity_bar"
app:layout_constraintEnd_toStartOf=
"@id/mute_indicator"
app:layout_constraintStart_toStartOf=
"@id/identity_bar"
app:layout_constraintTop_toTopOf=
"@id/identity_bar"
/>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/audience_row"
android:layout_width=
"match_parent"
...
...
sample-app/src/main/res/layout/participant_item.xml
查看文件 @
e040874
...
...
@@ -2,13 +2,60 @@
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
>
android:layout_height=
"match_parent"
android:background=
"@color/no_video_background"
>
<io.livekit.android.renderer.TextureViewRenderer
android:id=
"@+id/renderer"
<FrameLayout
android:layout_width=
"0dp"
android:layout_height=
"match_parent"
app:layout_constraintDimensionRatio=
"1:1"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
android:background=
"@color/no_video_background"
app:layout_constraintTop_toTopOf=
"parent"
>
<ImageView
android:layout_width=
"60dp"
android:layout_height=
"60dp"
android:layout_gravity=
"center"
android:src=
"@drawable/outline_videocam_off_24"
app:tint=
"@color/no_video_participant"
/>
<io.livekit.android.renderer.TextureViewRenderer
android:id=
"@+id/renderer"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
/>
</FrameLayout>
<FrameLayout
android:id=
"@+id/identity_bar"
android:layout_width=
"0dp"
android:layout_height=
"30dp"
android:background=
"#80000000"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
/>
<ImageView
android:id=
"@+id/mute_indicator"
android:layout_width=
"24dp"
android:layout_height=
"24dp"
android:layout_marginEnd=
"@dimen/identity_bar_padding"
android:src=
"@drawable/outline_mic_off_24"
app:layout_constraintBottom_toBottomOf=
"@id/identity_bar"
app:layout_constraintEnd_toEndOf=
"@id/identity_bar"
app:layout_constraintTop_toTopOf=
"@id/identity_bar"
app:tint=
"#BB0000"
android:visibility=
"gone"
/>
<TextView
android:id=
"@+id/identity_text"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/identity_bar_padding"
android:ellipsize=
"end"
app:layout_constraintBottom_toBottomOf=
"@id/identity_bar"
app:layout_constraintEnd_toStartOf=
"@id/mute_indicator"
app:layout_constraintStart_toStartOf=
"@id/identity_bar"
app:layout_constraintTop_toTopOf=
"@id/identity_bar"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...
...
sample-app/src/main/res/values/colors.xml
查看文件 @
e040874
...
...
@@ -3,4 +3,6 @@
<color
name=
"colorPrimary"
>
#007DFF
</color>
<color
name=
"colorPrimaryDark"
>
#0058b3
</color>
<color
name=
"colorAccent"
>
#66b1ff
</color>
<color
name=
"no_video_participant"
>
#5A8BFF
</color>
<color
name=
"no_video_background"
>
#00153C
</color>
</resources>
...
...
sample-app/src/main/res/values/dimens.xml
查看文件 @
e040874
...
...
@@ -2,4 +2,5 @@
<resources>
<dimen
name=
"control_size"
>
40dp
</dimen>
<dimen
name=
"control_padding"
>
4dp
</dimen>
<dimen
name=
"identity_bar_padding"
>
4dp
</dimen>
</resources>
\ No newline at end of file
...
...
请
注册
或
登录
后发表评论