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:
Niels van Velzen
2024-07-22 07:52:31 +02:00
committed by GitHub
parent 0a4b4c1fd6
commit b2939bfe38
26 changed files with 110 additions and 49 deletions
+2 -1
View File
@@ -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,4 +1,4 @@
package org.jellyfin.playback.exoplayer
package org.jellyfin.playback.media3.exoplayer
import android.media.audiofx.LoudnessEnhancer
import timber.log.Timber
@@ -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,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,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,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,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,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,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,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,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
@@ -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(
+48
View File
@@ -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)
}
@@ -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,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,4 +1,4 @@
package org.jellyfin.playback.exoplayer.session
package org.jellyfin.playback.media3.session
import android.app.PendingIntent
import androidx.annotation.DrawableRes
@@ -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,4 +1,4 @@
package org.jellyfin.playback.exoplayer.session
package org.jellyfin.playback.media3.session
import android.content.Context
import android.os.Looper
@@ -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
View File
@@ -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 {