From fc16bf9e8b0a1a3f8dfbdc5dad8004ed107cc5e7 Mon Sep 17 00:00:00 2001 From: chrisk325 Date: Sun, 5 Apr 2026 13:25:06 +0530 Subject: [PATCH] adjust audio track info logic --- .../features/player/PlayerEngine.android.kt | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/composeApp/src/androidMain/kotlin/com/nuvio/app/features/player/PlayerEngine.android.kt b/composeApp/src/androidMain/kotlin/com/nuvio/app/features/player/PlayerEngine.android.kt index c218f3a1..da7858af 100644 --- a/composeApp/src/androidMain/kotlin/com/nuvio/app/features/player/PlayerEngine.android.kt +++ b/composeApp/src/androidMain/kotlin/com/nuvio/app/features/player/PlayerEngine.android.kt @@ -41,6 +41,7 @@ import androidx.media3.ui.AspectRatioFrameLayout import androidx.media3.ui.PlayerView import androidx.media3.ui.SubtitleView import androidx.media3.ui.CaptionStyleCompat +import com.nuvio.app.features.trailer.YoutubeChunkedDataSourceFactory import kotlinx.coroutines.delay import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job @@ -49,6 +50,7 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.net.HttpURLConnection import java.net.URL +import java.util.Locale private const val TAG = "NuvioPlayer" @@ -111,7 +113,7 @@ actual fun PlatformPlayerSurface( .setTsExtractorTimestampSearchBytes(1500 * TsExtractor.TS_PACKET_SIZE) val mediaSourceFactory = DefaultMediaSourceFactory( - PlatformPlaybackDataSourceFactory.create(defaultRequestHeaders = sanitizedSourceHeaders), + YoutubeChunkedDataSourceFactory(defaultRequestHeaders = sanitizedSourceHeaders), extractorsFactory, ) @@ -434,11 +436,38 @@ private fun ExoPlayer.extractAudioTracks(): List { for (group in currentTracks.groups) { if (group.type != C.TRACK_TYPE_AUDIO) continue val format = group.mediaTrackGroup.getFormat(0) + val channelLabel = when { + format.channelCount == 1 -> "Mono" + format.channelCount == 2 -> "Stereo" + format.channelCount == 6 -> "5.1" + format.channelCount == 8 -> "7.1" + format.channelCount > 0 -> "${format.channelCount}ch" + else -> null + } + val mime = format.sampleMimeType?.lowercase() + val codecLabel = when { + mime == null -> null + mime.contains("eac3-joc") -> "Dolby Atmos" + mime.contains("truehd") && format.channelCount >= 8 -> "Dolby Atmos" + mime.contains("truehd") -> "Dolby TrueHD" + mime.contains("eac3") -> "Dolby Digital Plus" + mime.contains("ac3") -> "Dolby Digital" + mime.contains("opus") -> "Opus" + mime.contains("aac") -> "AAC" + mime.contains("dts-hd") -> "DTS-HD" + mime.contains("dts") -> "DTS" + else -> null + } + val resolvedLanguage = format.language?.let { lang -> Locale(lang).displayLanguage.takeIf { name -> name.isNotBlank() && name != lang } } + val baseName = format.label?.takeIf { it.isNotBlank() } ?: resolvedLanguage ?: format.language ?: "Track ${idx + 1}" + val suffix = listOfNotNull(channelLabel, codecLabel) + .joinToString(" ") + .let { if (it.isNotBlank()) " ($it)" else "" } tracks.add( AudioTrack( index = idx, id = format.id ?: idx.toString(), - label = format.label ?: "", + label = "$baseName$suffix", language = format.language, isSelected = group.isSelected, )