diff --git a/app/build.gradle b/app/build.gradle index a8d2378ff..809d26bde 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -102,9 +102,7 @@ dependencies { // --- THIRD PARTY --- - // Exoplayer - // WARNING: THE EXOPLAYER VERSION MUST BE KEPT IN LOCK-STEP WITH THE PRE-BUILD SCRIPT. - // IF NOT, VERY UNFRIENDLY BUILD FAILURES AND CRASHES MAY ENSUE. + // Exoplayer (Vendored) implementation project(":exoplayer-library-core") implementation project(":exoplayer-extension-ffmpeg") diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt index a42be58c3..a9a8f934b 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt @@ -35,7 +35,14 @@ import com.google.android.exoplayer2.audio.AudioAttributes import com.google.android.exoplayer2.audio.AudioCapabilities import com.google.android.exoplayer2.audio.MediaCodecAudioRenderer import com.google.android.exoplayer2.ext.ffmpeg.FfmpegAudioRenderer -import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory +import com.google.android.exoplayer2.extractor.ExtractorsFactory +import com.google.android.exoplayer2.extractor.flac.FlacExtractor +import com.google.android.exoplayer2.extractor.mkv.MatroskaExtractor +import com.google.android.exoplayer2.extractor.mp3.Mp3Extractor +import com.google.android.exoplayer2.extractor.mp4.Mp4Extractor +import com.google.android.exoplayer2.extractor.ogg.OggExtractor +import com.google.android.exoplayer2.extractor.ts.AdtsExtractor +import com.google.android.exoplayer2.extractor.wav.WavExtractor import com.google.android.exoplayer2.mediacodec.MediaCodecSelector import com.google.android.exoplayer2.source.DefaultMediaSourceFactory import dagger.hilt.android.AndroidEntryPoint @@ -115,8 +122,20 @@ class PlaybackService : override fun onCreate() { super.onCreate() - // Enable constant bitrate seeking so that certain MP3s/AACs are seekable - val extractorsFactory = DefaultExtractorsFactory().setConstantBitrateSeekingEnabled(true) + // Define our own extractors so we can exclude non-audio parsers. + // Ordering is derived from the DefaultExtractorsFactory's optimized ordering: + // https://docs.google.com/document/d/1w2mKaWMxfz2Ei8-LdxqbPs1VLe_oudB-eryXXw9OvQQ. + val extractorsFactory = ExtractorsFactory { + arrayOf( + FlacExtractor(), + WavExtractor(), + Mp4Extractor(), + OggExtractor(), + MatroskaExtractor(), + // Enable constant bitrate seeking so that certain MP3s/AACs are seekable + AdtsExtractor(AdtsExtractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING), + Mp3Extractor(Mp3Extractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING)) + } // Since Auxio is a music player, only specify an audio renderer to save // battery/apk size/cache size val audioRenderer = RenderersFactory { handler, _, audioListener, _, _ -> @@ -170,7 +189,7 @@ class PlaybackService : } override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int { - // Forward system media button sent by MediaButtonReciever to MediaSessionComponent + // Forward system media button sent by MediaButtonReceiver to MediaSessionComponent if (intent.action == Intent.ACTION_MEDIA_BUTTON) { mediaSessionComponent.handleMediaButtonIntent(intent) } diff --git a/gradle.properties b/gradle.properties index a69572161..9bb1cb21f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,7 +17,5 @@ org.gradle.jvmargs=-Xmx2048m android.useAndroidX=true # Automatically convert third-party libraries to use AndroidX android.enableJetifier=true -# Stop ExoPlayer AARs from being mangled -android.enableDexingArtifactTransform=false # Kotlin code style for this project: "official" or "obsolete": kotlin.code.style=official