mirror of
https://github.com/jellyfin/jellyfin-androidtv.git
synced 2026-10-16 12:51:53 +02:00
Split "playback/exoplayer" Gradle module into two (#3781)
* Split media3-session to own Gradle module * Rename playback.exoplayer to playback.media3-exoplayer * Use submodule for media3
This commit is contained in:
@@ -92,8 +92,9 @@ val versionTxt by tasks.registering {
|
||||
dependencies {
|
||||
// Jellyfin
|
||||
implementation(projects.playback.core)
|
||||
implementation(projects.playback.exoplayer)
|
||||
implementation(projects.playback.jellyfin)
|
||||
implementation(projects.playback.media3.exoplayer)
|
||||
implementation(projects.playback.media3.session)
|
||||
implementation(projects.preference)
|
||||
implementation(libs.jellyfin.apiclient)
|
||||
implementation(libs.jellyfin.sdk) {
|
||||
|
||||
@@ -17,10 +17,11 @@ import org.jellyfin.androidtv.ui.playback.RewritePlaybackLauncher
|
||||
import org.jellyfin.androidtv.ui.playback.VideoQueueManager
|
||||
import org.jellyfin.androidtv.ui.playback.rewrite.RewriteMediaManager
|
||||
import org.jellyfin.playback.core.playbackManager
|
||||
import org.jellyfin.playback.exoplayer.ExoPlayerOptions
|
||||
import org.jellyfin.playback.exoplayer.exoPlayerPlugin
|
||||
import org.jellyfin.playback.exoplayer.session.MediaSessionOptions
|
||||
import org.jellyfin.playback.jellyfin.jellyfinPlugin
|
||||
import org.jellyfin.playback.media3.exoplayer.ExoPlayerOptions
|
||||
import org.jellyfin.playback.media3.exoplayer.exoPlayerPlugin
|
||||
import org.jellyfin.playback.media3.session.MediaSessionOptions
|
||||
import org.jellyfin.playback.media3.session.media3SessionPlugin
|
||||
import org.jellyfin.sdk.api.client.ApiClient
|
||||
import org.koin.android.ext.koin.androidContext
|
||||
import org.koin.core.scope.Scope
|
||||
@@ -58,18 +59,21 @@ fun Scope.createPlaybackManager() = playbackManager(androidContext()) {
|
||||
NotificationManagerCompat.from(get()).createNotificationChannel(channel)
|
||||
}
|
||||
|
||||
val api = get<ApiClient>()
|
||||
val exoPlayerOptions = ExoPlayerOptions(
|
||||
httpConnectTimeout = api.httpClientOptions.connectTimeout,
|
||||
httpReadTimeout = api.httpClientOptions.requestTimeout
|
||||
)
|
||||
install(exoPlayerPlugin(get(), exoPlayerOptions))
|
||||
|
||||
val mediaSessionOptions = MediaSessionOptions(
|
||||
channelId = notificationChannelId,
|
||||
notificationId = 1,
|
||||
iconSmall = R.drawable.app_icon_foreground,
|
||||
openIntent = pendingIntent,
|
||||
)
|
||||
val api = get<ApiClient>()
|
||||
val exoPlayerOptions = ExoPlayerOptions(
|
||||
httpConnectTimeout = api.httpClientOptions.connectTimeout,
|
||||
httpReadTimeout = api.httpClientOptions.requestTimeout
|
||||
)
|
||||
install(exoPlayerPlugin(get(), mediaSessionOptions, exoPlayerOptions))
|
||||
install(media3SessionPlugin(get(), mediaSessionOptions))
|
||||
|
||||
install(jellyfinPlugin(get()))
|
||||
|
||||
// Options
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
package org.jellyfin.playback.exoplayer
|
||||
|
||||
import android.content.Context
|
||||
import org.jellyfin.playback.core.plugin.playbackPlugin
|
||||
import org.jellyfin.playback.exoplayer.session.MediaSessionOptions
|
||||
import org.jellyfin.playback.exoplayer.session.MediaSessionService
|
||||
|
||||
fun exoPlayerPlugin(
|
||||
androidContext: Context,
|
||||
mediaSessionOptions: MediaSessionOptions,
|
||||
exoPlayerOptions: ExoPlayerOptions = ExoPlayerOptions(),
|
||||
) = playbackPlugin {
|
||||
provide(ExoPlayerBackend(androidContext, exoPlayerOptions))
|
||||
provide(MediaSessionService(androidContext, mediaSessionOptions))
|
||||
}
|
||||
@@ -37,7 +37,6 @@ dependencies {
|
||||
implementation(libs.androidx.media3.exoplayer.hls)
|
||||
implementation(libs.jellyfin.androidx.media3.ffmpeg.decoder)
|
||||
implementation(libs.androidx.media3.ui)
|
||||
implementation(libs.androidx.media3.session)
|
||||
|
||||
// Logging
|
||||
implementation(libs.timber)
|
||||
@@ -0,0 +1 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.jellyfin.playback.exoplayer
|
||||
package org.jellyfin.playback.media3.exoplayer
|
||||
|
||||
import android.media.audiofx.LoudnessEnhancer
|
||||
import timber.log.Timber
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
package org.jellyfin.playback.exoplayer
|
||||
package org.jellyfin.playback.media3.exoplayer
|
||||
|
||||
import android.app.ActivityManager
|
||||
import android.content.Context
|
||||
@@ -33,8 +33,8 @@ import org.jellyfin.playback.core.queue.QueueEntry
|
||||
import org.jellyfin.playback.core.support.PlaySupportReport
|
||||
import org.jellyfin.playback.core.ui.PlayerSubtitleView
|
||||
import org.jellyfin.playback.core.ui.PlayerSurfaceView
|
||||
import org.jellyfin.playback.exoplayer.support.getPlaySupportReport
|
||||
import org.jellyfin.playback.exoplayer.support.toFormats
|
||||
import org.jellyfin.playback.media3.exoplayer.support.getPlaySupportReport
|
||||
import org.jellyfin.playback.media3.exoplayer.support.toFormats
|
||||
import timber.log.Timber
|
||||
import kotlin.time.Duration
|
||||
import kotlin.time.Duration.Companion.milliseconds
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.jellyfin.playback.exoplayer
|
||||
package org.jellyfin.playback.media3.exoplayer
|
||||
|
||||
import kotlin.time.Duration
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package org.jellyfin.playback.media3.exoplayer
|
||||
|
||||
import android.content.Context
|
||||
import org.jellyfin.playback.core.plugin.playbackPlugin
|
||||
|
||||
fun exoPlayerPlugin(
|
||||
androidContext: Context,
|
||||
exoPlayerOptions: ExoPlayerOptions = ExoPlayerOptions(),
|
||||
) = playbackPlugin {
|
||||
provide(ExoPlayerBackend(androidContext, exoPlayerOptions))
|
||||
}
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.jellyfin.playback.exoplayer.mapping
|
||||
package org.jellyfin.playback.media3.exoplayer.mapping
|
||||
|
||||
import androidx.annotation.OptIn
|
||||
import androidx.media3.common.MimeTypes
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.jellyfin.playback.exoplayer.mapping
|
||||
package org.jellyfin.playback.media3.exoplayer.mapping
|
||||
|
||||
import androidx.annotation.OptIn
|
||||
import androidx.media3.common.MimeTypes
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.jellyfin.playback.exoplayer.mapping
|
||||
package org.jellyfin.playback.media3.exoplayer.mapping
|
||||
|
||||
import androidx.annotation.OptIn
|
||||
import androidx.media3.common.MimeTypes
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.jellyfin.playback.exoplayer.support
|
||||
package org.jellyfin.playback.media3.exoplayer.support
|
||||
|
||||
import androidx.annotation.OptIn
|
||||
import androidx.media3.common.util.UnstableApi
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.jellyfin.playback.exoplayer.support
|
||||
package org.jellyfin.playback.media3.exoplayer.support
|
||||
|
||||
import androidx.annotation.OptIn
|
||||
import androidx.media3.common.util.UnstableApi
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.jellyfin.playback.exoplayer.support
|
||||
package org.jellyfin.playback.media3.exoplayer.support
|
||||
|
||||
import androidx.annotation.OptIn
|
||||
import androidx.media3.common.Format
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.jellyfin.playback.exoplayer.support
|
||||
package org.jellyfin.playback.media3.exoplayer.support
|
||||
|
||||
import androidx.annotation.OptIn
|
||||
import androidx.media3.common.C
|
||||
+4
-4
@@ -1,4 +1,4 @@
|
||||
package org.jellyfin.playback.exoplayer.support
|
||||
package org.jellyfin.playback.media3.exoplayer.support
|
||||
|
||||
import androidx.annotation.OptIn
|
||||
import androidx.media3.common.C
|
||||
@@ -8,9 +8,9 @@ import androidx.media3.common.util.UnstableApi
|
||||
import org.jellyfin.playback.core.mediastream.MediaStream
|
||||
import org.jellyfin.playback.core.mediastream.MediaStreamAudioTrack
|
||||
import org.jellyfin.playback.core.mediastream.MediaStreamVideoTrack
|
||||
import org.jellyfin.playback.exoplayer.mapping.getFfmpegAudioMimeType
|
||||
import org.jellyfin.playback.exoplayer.mapping.getFfmpegContainerMimeType
|
||||
import org.jellyfin.playback.exoplayer.mapping.getFfmpegVideoMimeType
|
||||
import org.jellyfin.playback.media3.exoplayer.mapping.getFfmpegAudioMimeType
|
||||
import org.jellyfin.playback.media3.exoplayer.mapping.getFfmpegContainerMimeType
|
||||
import org.jellyfin.playback.media3.exoplayer.mapping.getFfmpegVideoMimeType
|
||||
|
||||
@OptIn(UnstableApi::class)
|
||||
private val PCM_CODECS = mapOf(
|
||||
@@ -0,0 +1,48 @@
|
||||
plugins {
|
||||
id("com.android.library")
|
||||
kotlin("android")
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "org.jellyfin.playback.media3.session"
|
||||
compileSdk = 34
|
||||
|
||||
defaultConfig {
|
||||
minSdk = 21
|
||||
}
|
||||
|
||||
lint {
|
||||
lintConfig = file("$rootDir/android-lint.xml")
|
||||
abortOnError = false
|
||||
}
|
||||
|
||||
testOptions.unitTests.all {
|
||||
it.useJUnitPlatform()
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
// Jellyfin
|
||||
implementation(projects.playback.core)
|
||||
|
||||
// Kotlin
|
||||
implementation(libs.kotlinx.coroutines)
|
||||
implementation(libs.kotlinx.coroutines.guava)
|
||||
|
||||
// AndroidX
|
||||
implementation(libs.androidx.core)
|
||||
|
||||
// media3
|
||||
implementation(libs.androidx.media3.session)
|
||||
|
||||
// Logging
|
||||
implementation(libs.timber)
|
||||
|
||||
// Compatibility (desugaring)
|
||||
coreLibraryDesugaring(libs.android.desugar)
|
||||
|
||||
// Testing
|
||||
testImplementation(libs.kotest.runner.junit5)
|
||||
testImplementation(libs.kotest.assertions)
|
||||
testImplementation(libs.mockk)
|
||||
}
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
|
||||
<application>
|
||||
<service
|
||||
android:name="org.jellyfin.playback.exoplayer.session.AndroidMediaService"
|
||||
android:name="org.jellyfin.playback.media3.session.AndroidMediaService"
|
||||
android:exported="true"
|
||||
android:foregroundServiceType="mediaPlayback"
|
||||
tools:ignore="ExportedService">
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.jellyfin.playback.exoplayer.session
|
||||
package org.jellyfin.playback.media3.session
|
||||
|
||||
import androidx.media3.session.MediaSession
|
||||
import androidx.media3.session.MediaSessionService
|
||||
@@ -0,0 +1,11 @@
|
||||
package org.jellyfin.playback.media3.session
|
||||
|
||||
import android.content.Context
|
||||
import org.jellyfin.playback.core.plugin.playbackPlugin
|
||||
|
||||
fun media3SessionPlugin(
|
||||
androidContext: Context,
|
||||
options: MediaSessionOptions
|
||||
) = playbackPlugin {
|
||||
provide(MediaSessionService(androidContext, options))
|
||||
}
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.jellyfin.playback.exoplayer.session
|
||||
package org.jellyfin.playback.media3.session
|
||||
|
||||
import android.app.PendingIntent
|
||||
import androidx.annotation.DrawableRes
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.jellyfin.playback.exoplayer.session
|
||||
package org.jellyfin.playback.media3.session
|
||||
|
||||
import android.os.Looper
|
||||
import androidx.annotation.OptIn
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.jellyfin.playback.exoplayer.session
|
||||
package org.jellyfin.playback.media3.session
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Looper
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.jellyfin.playback.exoplayer.session
|
||||
package org.jellyfin.playback.media3.session
|
||||
|
||||
import androidx.core.net.toUri
|
||||
import androidx.media3.common.MediaItem
|
||||
+2
-1
@@ -7,8 +7,9 @@ include(":app")
|
||||
|
||||
// Modules
|
||||
include(":playback:core")
|
||||
include(":playback:exoplayer")
|
||||
include(":playback:jellyfin")
|
||||
include(":playback:media3:exoplayer")
|
||||
include(":playback:media3:session")
|
||||
include(":preference")
|
||||
|
||||
pluginManagement {
|
||||
|
||||
Reference in New Issue
Block a user