make MediaSource creation be based on the trackselection algorithm
This commit is contained in:
parent
632407fa69
commit
f643c032a2
|
@ -35,6 +35,7 @@ import androidx.media3.datasource.DefaultHttpDataSource
|
||||||
import androidx.media3.datasource.HttpDataSource
|
import androidx.media3.datasource.HttpDataSource
|
||||||
import androidx.media3.exoplayer.ExoPlayer
|
import androidx.media3.exoplayer.ExoPlayer
|
||||||
import androidx.media3.exoplayer.source.MediaSource
|
import androidx.media3.exoplayer.source.MediaSource
|
||||||
|
import androidx.media3.exoplayer.source.MergingMediaSource
|
||||||
import androidx.media3.exoplayer.source.ProgressiveMediaSource
|
import androidx.media3.exoplayer.source.ProgressiveMediaSource
|
||||||
import androidx.media3.session.MediaController
|
import androidx.media3.session.MediaController
|
||||||
import androidx.media3.session.SessionToken
|
import androidx.media3.session.SessionToken
|
||||||
|
@ -327,7 +328,7 @@ class NewPlayerImpl(
|
||||||
.setMediaId(uniqueId.toString())
|
.setMediaId(uniqueId.toString())
|
||||||
.setUri(dataStream.streamUri)
|
.setUri(dataStream.streamUri)
|
||||||
|
|
||||||
if(dataStream.mimeType != null) {
|
if (dataStream.mimeType != null) {
|
||||||
mediaItemBuilder.setMimeType(dataStream.mimeType)
|
mediaItemBuilder.setMimeType(dataStream.mimeType)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -345,14 +346,35 @@ class NewPlayerImpl(
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@OptIn(UnstableApi::class)
|
||||||
private suspend
|
private suspend
|
||||||
fun toMediaSource(item: String, playMode: PlayMode): MediaSource {
|
fun toMediaSource(item: String, playMode: PlayMode): MediaSource {
|
||||||
val availableStreams = repository.getAvailableStreamVariants(item)
|
val availableStreamVariants = repository.getAvailableStreamVariants(item)
|
||||||
//var selectedStream = availableStreams[availableStreams.size / 2]
|
val selectedStreamVariant = StreamSelect.selectStream(
|
||||||
|
item,
|
||||||
|
playMode,
|
||||||
|
availableStreamVariants,
|
||||||
|
preferredVideoVariants,
|
||||||
|
prefearedAudioVariants,
|
||||||
|
preferredStreamLanguage
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
return toMediaSource(item, selectedStream)
|
return when (selectedStreamVariant) {
|
||||||
|
is StreamSelect.SingleSelection -> toMediaSource(
|
||||||
|
item,
|
||||||
|
selectedStreamVariant.streamVariant
|
||||||
|
)
|
||||||
|
|
||||||
|
is StreamSelect.MultiSelection -> MergingMediaSource(
|
||||||
|
toMediaSource(
|
||||||
|
item,
|
||||||
|
selectedStreamVariant.videoStream
|
||||||
|
), toMediaSource(item, selectedStreamVariant.audioStream)
|
||||||
|
)
|
||||||
|
|
||||||
|
else -> throw NewPlayerException("Unknown Stream selection type: Serious Programming error. :${selectedStreamVariant.javaClass}")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun launchJobAndCollectError(task: suspend () -> Unit) =
|
private fun launchJobAndCollectError(task: suspend () -> Unit) =
|
||||||
|
|
Loading…
Reference in New Issue