diff --git a/new-player/src/main/java/net/newpipe/newplayer/MediaRepository.kt b/new-player/src/main/java/net/newpipe/newplayer/MediaRepository.kt index 758f39d..3238884 100644 --- a/new-player/src/main/java/net/newpipe/newplayer/MediaRepository.kt +++ b/new-player/src/main/java/net/newpipe/newplayer/MediaRepository.kt @@ -23,7 +23,6 @@ package net.newpipe.newplayer import android.net.Uri import androidx.media3.common.MediaMetadata import androidx.media3.common.PlaybackException -import net.newpipe.newplayer.utils.Thumbnail data class Chapter(val chapterStartInMs: Long, val chapterTitle: String?, val thumbnail: Uri?) @@ -34,16 +33,21 @@ enum class StreamType { DYNAMIC } -data class StreamVariant( +data class Stream( + val streamUri: Uri, + val identifier: String, val streamType: StreamType, val language: String?, - val streamVariantIdentifier: String + val mimeType: String? = null, ) { override fun equals(other: Any?) = - other is StreamVariant + other is Stream + && other.streamUri == streamUri && other.streamType == streamType && other.language == language - && other.streamVariantIdentifier == streamVariantIdentifier + && other.identifier == identifier + && other.mimeType == mimeType + } data class RepoMetaInfo( @@ -51,9 +55,9 @@ data class RepoMetaInfo( val pullsDataFromNetwrok: Boolean ) -data class Stream( - val streamUri: Uri, - val mimeType: String? = null +data class Subtitle( + val uri: Uri, + val identifier: String ) interface MediaRepository { @@ -62,11 +66,9 @@ interface MediaRepository { suspend fun getMetaInfo(item: String): MediaMetadata - suspend fun getAvailableStreamVariants(item: String): List - suspend fun getStream(item: String, streamVariantSelector: StreamVariant): Stream + suspend fun getStreams(item: String): List - suspend fun getAvailableSubtitleVariants(item: String): List - suspend fun getSubtitle(item: String, variant: String): Uri + suspend fun getSubtitles(item: String): List suspend fun getPreviewThumbnails(item: String): HashMap? suspend fun getChapters(item: String): List diff --git a/new-player/src/main/java/net/newpipe/newplayer/utils/MediaSourceBuilder.kt b/new-player/src/main/java/net/newpipe/newplayer/utils/MediaSourceBuilder.kt index 23632dd..e873ff2 100644 --- a/new-player/src/main/java/net/newpipe/newplayer/utils/MediaSourceBuilder.kt +++ b/new-player/src/main/java/net/newpipe/newplayer/utils/MediaSourceBuilder.kt @@ -25,10 +25,6 @@ class MediaSourceBuilder( suspend fun buildMediaSource(item: String) { val availableStreamVariants = repository.getAvailableStreamVariants(item) - - val tracks: Tracks? = null - MergingMediaSource - } @OptIn(UnstableApi::class) diff --git a/test-app/src/main/java/net/newpipe/newplayer/testapp/TestMediaRepository.kt b/test-app/src/main/java/net/newpipe/newplayer/testapp/TestMediaRepository.kt index 7a7a3c5..95f6a38 100644 --- a/test-app/src/main/java/net/newpipe/newplayer/testapp/TestMediaRepository.kt +++ b/test-app/src/main/java/net/newpipe/newplayer/testapp/TestMediaRepository.kt @@ -11,7 +11,7 @@ import net.newpipe.newplayer.MediaRepository import net.newpipe.newplayer.RepoMetaInfo import net.newpipe.newplayer.Stream import net.newpipe.newplayer.StreamType -import net.newpipe.newplayer.StreamVariant +import net.newpipe.newplayer.Subtitle import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response @@ -62,81 +62,63 @@ class TestMediaRepository(val context: Context) : MediaRepository { else -> throw Exception("Unknown stream: $item") } - override suspend fun getAvailableStreamVariants(item: String): List = + + override suspend fun getStreams(item: String) = when (item) { "6502" -> listOf( - StreamVariant( + Stream( + streamUri = Uri.parse(context.getString(R.string.ccc_6502_video)), + mimeType = null, streamType = StreamType.AUDIO_AND_VIDEO, language = "Deutsch", - streamVariantIdentifier = "576p", - ), + identifier = "576p", + ) ) "portrait" -> listOf( - StreamVariant( + Stream( + streamUri = Uri.parse(context.getString(R.string.portrait_video_example)), + mimeType = null, streamType = StreamType.AUDIO_AND_VIDEO, language = null, - streamVariantIdentifier = "720p", - ), + identifier = "720p", + ) ) "imu" -> listOf( - StreamVariant( - streamType = StreamType.AUDIO_AND_VIDEO, - language = "Deutsch", - streamVariantIdentifier = "1080p", - ), - StreamVariant( - streamType = StreamType.AUDIO_AND_VIDEO, - language = "Deutsch", - streamVariantIdentifier = "576p", - ) - ) - - else -> throw Exception("Unknown stream: $item") - } - - override suspend fun getAvailableSubtitleVariants(item: String): List { - TODO("Not yet implemented") - } - - - override suspend fun getStream(item: String, streamVariantSelector: StreamVariant) = - when (item) { - "6502" -> Stream( - streamUri = Uri.parse(context.getString(R.string.ccc_6502_video)), - mimeType = null - ) - - "portrait" -> Stream( - streamUri = Uri.parse(context.getString(R.string.portrait_video_example)), - mimeType = null - ) - - "imu" -> when (streamVariantSelector.streamVariantIdentifier) { - "1080p" -> Stream( + Stream( streamUri = Uri.parse(context.getString(R.string.ccc_imu_1080_mp4)), - mimeType = null - ) + mimeType = null, + streamType = StreamType.AUDIO_AND_VIDEO, + language = "Deutsch", + identifier = "1080p", + ), - "576p" -> Stream( + Stream( streamUri = Uri.parse(context.getString(R.string.ccc_imu_576_mp4)), - mimeType = null + mimeType = null, + streamType = StreamType.AUDIO_AND_VIDEO, + language = "Deutsch", + identifier = "576p" ) + ) - else -> throw Exception("Unknown stream selector for $item: $streamVariantSelector") - } - - else -> throw Exception("Unknown stream: $item") + else -> throw Exception("Unknown item: $item") + } + + + override suspend fun getSubtitles(item: String) = + when (item) { + "imu" -> listOf( + Subtitle( + Uri.parse(context.getString(R.string.ccc_imu_subtitles)), + "english" + ) + ) + + else -> emptyList() } - override suspend fun getSubtitle(item: String, variant: String) = - Uri.parse( - when (item) { - "imu" -> context.getString(R.string.ccc_imu_subtitles) - else -> "" - } - ) override suspend fun getPreviewThumbnails(item: String): HashMap? { val templateUrl = when (item) {