mirror of
https://github.com/zoriya/react-native-omni.git
synced 2026-08-16 02:44:51 +00:00
feat(tracks): add track indexes
This commit is contained in:
@@ -117,21 +117,13 @@ class EventMap(private val tracks: TrackProvider) : HybridOmniEventMapSpec(), Pl
|
||||
}
|
||||
|
||||
private fun selectedTrack(trackType: Int): Track? {
|
||||
val groups = player.currentTracks.groups.filter { it.type == trackType }
|
||||
for (group in groups) {
|
||||
val mediaGroup = group.mediaTrackGroup
|
||||
for (i in 0 until group.length) {
|
||||
if (!group.isTrackSelected(i)) continue
|
||||
val format = group.getTrackFormat(i)
|
||||
return Track(
|
||||
id = format.id ?: mediaGroup.id,
|
||||
label = format.label,
|
||||
language = format.language,
|
||||
selected = true
|
||||
)
|
||||
}
|
||||
val list = when (trackType) {
|
||||
TRACK_TYPE_VIDEO -> tracks.videos
|
||||
TRACK_TYPE_AUDIO -> tracks.audios
|
||||
TRACK_TYPE_TEXT -> tracks.subtitles
|
||||
else -> return null
|
||||
}
|
||||
return null
|
||||
return list.firstOrNull { it.selected }
|
||||
}
|
||||
|
||||
private fun getCurrentRendition(): Rendition? {
|
||||
@@ -265,9 +257,8 @@ class EventMap(private val tracks: TrackProvider) : HybridOmniEventMapSpec(), Pl
|
||||
selectedTrack(TRACK_TYPE_AUDIO)?.let { track ->
|
||||
onAudioTrackChangeListeners.forEach { it(track) }
|
||||
}
|
||||
selectedTrack(TRACK_TYPE_TEXT)?.let { track ->
|
||||
onSubtitleChangeListeners.forEach { it(track) }
|
||||
}
|
||||
val subtitle = selectedTrack(TRACK_TYPE_TEXT)
|
||||
onSubtitleChangeListeners.forEach { it(subtitle) }
|
||||
emitTracks()
|
||||
emitIsAutoQualityChange()
|
||||
emitRenditionChange()
|
||||
|
||||
@@ -451,13 +451,19 @@ class OmniPlayer(
|
||||
// when casting tracks are stripped of some metadata, recover it
|
||||
val castTracks = castMediaTracksById()
|
||||
|
||||
// external (sideloaded) subs aren't in the container, so their index is -1
|
||||
val sideloadedIds = source?.subtitles?.map { it.id }?.toHashSet().orEmpty()
|
||||
var index = 0
|
||||
|
||||
return groups.map { group ->
|
||||
val format = group.getTrackFormat(0)
|
||||
|
||||
val castTrackId = group.mediaTrackGroup.id.substringAfterLast("track=", "").toLongOrNull()
|
||||
val id = group.mediaTrackGroup.id
|
||||
val castTrackId = id.substringAfterLast("track=", "").toLongOrNull()
|
||||
val cast = castTracks[castTrackId]
|
||||
val sideloaded = trackType == C.TRACK_TYPE_TEXT && id in sideloadedIds
|
||||
Track(
|
||||
id = group.mediaTrackGroup.id,
|
||||
id = id,
|
||||
index = if (sideloaded) -1.0 else (index++).toDouble(),
|
||||
label = cast?.name ?: format.label,
|
||||
language = cast?.language ?: format.language,
|
||||
selected = group.isSelected
|
||||
|
||||
Reference in New Issue
Block a user