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 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)