From 71fe551beb62c94ca1d5a62fe139a79be38e89f6 Mon Sep 17 00:00:00 2001 From: xyoye Date: Mon, 5 Feb 2024 16:20:16 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=85=B6=E5=AE=83=E6=8F=90=E4=BA=A4:=20?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=964.2.0=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildSrc/src/main/java/Versions.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildSrc/src/main/java/Versions.kt b/buildSrc/src/main/java/Versions.kt index 79ab3b166..ac004a925 100644 --- a/buildSrc/src/main/java/Versions.kt +++ b/buildSrc/src/main/java/Versions.kt @@ -3,6 +3,6 @@ object Versions { const val compileSdkVersion = 33 const val minSdkVersion = 21 const val targetSdkVersion = 29 - const val versionCode = 57 - const val versionName = "4.1.0" + const val versionCode = 58 + const val versionName = "4.2.0" } \ No newline at end of file From a8e1dcc1ea810b487150c6790b57acca3875c8b3 Mon Sep 17 00:00:00 2001 From: xyoye Date: Tue, 6 Feb 2024 11:52:13 +0800 Subject: [PATCH 2/2] =?UTF-8?q?Bug=E4=BF=AE=E5=A4=8D:=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?ExoPlayer=E8=BD=A8=E9=81=93=E9=80=89=E6=8B=A9=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data_component/bean/VideoTrackBean.kt | 7 ++-- .../player/kernel/impl/exo/ExoVideoPlayer.kt | 33 ++++++++++--------- .../xyoye/player/wrapper/ControlWrapper.kt | 2 +- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/data_component/src/main/java/com/xyoye/data_component/bean/VideoTrackBean.kt b/data_component/src/main/java/com/xyoye/data_component/bean/VideoTrackBean.kt index ca449f8f2..60aa1d0fa 100644 --- a/data_component/src/main/java/com/xyoye/data_component/bean/VideoTrackBean.kt +++ b/data_component/src/main/java/com/xyoye/data_component/bean/VideoTrackBean.kt @@ -24,12 +24,15 @@ data class VideoTrackBean( val selected: Boolean = false, // 是否是禁用轨道 - val disable: Boolean = false + val disable: Boolean = false, + + // 是否是内部轨道 + val internal: Boolean = false ) { companion object { fun internal(id: String, name: String, type: TrackType, selected: Boolean): VideoTrackBean { - return VideoTrackBean(id = id, name = name, type = type, selected = selected) + return VideoTrackBean(id = id, name = name, type = type, selected = selected, internal = true) } fun subtitle(subtitlePath: String): VideoTrackBean { diff --git a/player_component/src/main/java/com/xyoye/player/kernel/impl/exo/ExoVideoPlayer.kt b/player_component/src/main/java/com/xyoye/player/kernel/impl/exo/ExoVideoPlayer.kt index 444d79754..ef2eda624 100644 --- a/player_component/src/main/java/com/xyoye/player/kernel/impl/exo/ExoVideoPlayer.kt +++ b/player_component/src/main/java/com/xyoye/player/kernel/impl/exo/ExoVideoPlayer.kt @@ -220,27 +220,30 @@ class ExoVideoPlayer(private val mContext: Context) : AbstractVideoPlayer(), Pla override fun getTracks(type: TrackType): List { val exoTrackType = getExoTrackType(type) ?: return emptyList() - return exoplayer.currentTracks.groups - .filter { it.type == exoTrackType } - .flatMap { - mapByLength(it.length) { index -> - val trackFormat = it.getTrackFormat(index) - val name = trackNameProvider.getTrackName(trackFormat) - val selected = it.isTrackSelected(index) - VideoTrackBean.internal(index.toString(), name, type, selected) - } + return exoplayer.currentTracks.groups.flatMapIndexed { groupIndex: Int, group: Tracks.Group -> + if (group.type != exoTrackType) { + return@flatMapIndexed emptyList() + } + mapByLength(group.length) { trackIndex -> + val trackFormat = group.getTrackFormat(trackIndex) + val name = trackNameProvider.getTrackName(trackFormat) + val selected = group.isTrackSelected(trackIndex) + val id = "$groupIndex-$trackIndex" + VideoTrackBean.internal(id, name, type, selected) } + } } override fun selectTrack(track: VideoTrackBean) { val exoTrackType = getExoTrackType(track.type) ?: return - val trackId = track.id?.toIntOrNull() ?: return - val override = exoplayer.currentTracks.groups - .firstOrNull { it.type == exoTrackType } - ?.mediaTrackGroup - ?.let { TrackSelectionOverride(it, trackId) } - ?: return + val trackIds = track.id?.split("-") ?: return + val groupIndex = trackIds.getOrNull(0)?.toInt() ?: return + val trackIndex = trackIds.getOrNull(1)?.toInt() ?: return + + val override = exoplayer.currentTracks.groups.getOrNull(groupIndex)?.let { + TrackSelectionOverride(it.mediaTrackGroup, trackIndex) + } ?: return mTrackSelector.parameters = TrackSelectionParameters.Builder(mContext) .setTrackTypeDisabled(exoTrackType, false) diff --git a/player_component/src/main/java/com/xyoye/player/wrapper/ControlWrapper.kt b/player_component/src/main/java/com/xyoye/player/wrapper/ControlWrapper.kt index 060769d7d..61503663f 100644 --- a/player_component/src/main/java/com/xyoye/player/wrapper/ControlWrapper.kt +++ b/player_component/src/main/java/com/xyoye/player/wrapper/ControlWrapper.kt @@ -150,7 +150,7 @@ class ControlWrapper( // 如果视频播放器支持添加轨道,则选中播放器轨道,并取消控制器中同类型轨道的选中 // 否则由支持轨道的控制器选中,并取消播放器中同类型轨道的选中 val trackType = track.type - if (mVideoPlayer.supportAddTrack(trackType)) { + if (track.internal || mVideoPlayer.supportAddTrack(trackType)) { mVideoPlayer.selectTrack(track) mSubtitleController.deselectTrack(trackType) mDanmuController.deselectTrack(trackType)