playback: specify audio extractors only
Only specify audio extractors to reduce APK size.
This commit is contained in:
parent
458f2a5d84
commit
8b6545ca10
3 changed files with 24 additions and 9 deletions
|
@ -102,9 +102,7 @@ dependencies {
|
||||||
|
|
||||||
// --- THIRD PARTY ---
|
// --- THIRD PARTY ---
|
||||||
|
|
||||||
// Exoplayer
|
// Exoplayer (Vendored)
|
||||||
// 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.
|
|
||||||
implementation project(":exoplayer-library-core")
|
implementation project(":exoplayer-library-core")
|
||||||
implementation project(":exoplayer-extension-ffmpeg")
|
implementation project(":exoplayer-extension-ffmpeg")
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,14 @@ import com.google.android.exoplayer2.audio.AudioAttributes
|
||||||
import com.google.android.exoplayer2.audio.AudioCapabilities
|
import com.google.android.exoplayer2.audio.AudioCapabilities
|
||||||
import com.google.android.exoplayer2.audio.MediaCodecAudioRenderer
|
import com.google.android.exoplayer2.audio.MediaCodecAudioRenderer
|
||||||
import com.google.android.exoplayer2.ext.ffmpeg.FfmpegAudioRenderer
|
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.mediacodec.MediaCodecSelector
|
||||||
import com.google.android.exoplayer2.source.DefaultMediaSourceFactory
|
import com.google.android.exoplayer2.source.DefaultMediaSourceFactory
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
@ -115,8 +122,20 @@ class PlaybackService :
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
|
|
||||||
// Enable constant bitrate seeking so that certain MP3s/AACs are seekable
|
// Define our own extractors so we can exclude non-audio parsers.
|
||||||
val extractorsFactory = DefaultExtractorsFactory().setConstantBitrateSeekingEnabled(true)
|
// 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
|
// Since Auxio is a music player, only specify an audio renderer to save
|
||||||
// battery/apk size/cache size
|
// battery/apk size/cache size
|
||||||
val audioRenderer = RenderersFactory { handler, _, audioListener, _, _ ->
|
val audioRenderer = RenderersFactory { handler, _, audioListener, _, _ ->
|
||||||
|
@ -170,7 +189,7 @@ class PlaybackService :
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
|
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) {
|
if (intent.action == Intent.ACTION_MEDIA_BUTTON) {
|
||||||
mediaSessionComponent.handleMediaButtonIntent(intent)
|
mediaSessionComponent.handleMediaButtonIntent(intent)
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,5 @@ org.gradle.jvmargs=-Xmx2048m
|
||||||
android.useAndroidX=true
|
android.useAndroidX=true
|
||||||
# Automatically convert third-party libraries to use AndroidX
|
# Automatically convert third-party libraries to use AndroidX
|
||||||
android.enableJetifier=true
|
android.enableJetifier=true
|
||||||
# Stop ExoPlayer AARs from being mangled
|
|
||||||
android.enableDexingArtifactTransform=false
|
|
||||||
# Kotlin code style for this project: "official" or "obsolete":
|
# Kotlin code style for this project: "official" or "obsolete":
|
||||||
kotlin.code.style=official
|
kotlin.code.style=official
|
||||||
|
|
Loading…
Reference in a new issue