Use dedicated audio renderer

Use a dedicated audio renderer to shrink APK size, and possible reduce battery/cache usage.
This commit is contained in:
OxygenCobalt 2020-12-25 21:39:49 -07:00
parent 600aa2d6f1
commit 501e40b2bf
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47

View file

@ -20,9 +20,13 @@ import com.google.android.exoplayer2.C
import com.google.android.exoplayer2.ExoPlaybackException
import com.google.android.exoplayer2.MediaItem
import com.google.android.exoplayer2.Player
import com.google.android.exoplayer2.Renderer
import com.google.android.exoplayer2.RenderersFactory
import com.google.android.exoplayer2.SimpleExoPlayer
import com.google.android.exoplayer2.audio.AudioAttributes
import com.google.android.exoplayer2.audio.MediaCodecAudioRenderer
import com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector
import com.google.android.exoplayer2.mediacodec.MediaCodecSelector
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
@ -54,9 +58,7 @@ import org.oxycblt.auxio.settings.SettingsManager
* @author OxygenCobalt
*/
class PlaybackService : Service(), Player.EventListener, PlaybackStateManager.Callback, SettingsManager.Callback {
private val player: SimpleExoPlayer by lazy {
SimpleExoPlayer.Builder(applicationContext).build()
}
private val player: SimpleExoPlayer by lazy { newPlayer() }
private val playbackManager = PlaybackStateManager.getInstance()
private val settingsManager = SettingsManager.getInstance()
@ -332,6 +334,20 @@ class PlaybackService : Service(), Player.EventListener, PlaybackStateManager.Ca
// --- OTHER FUNCTIONS ---
/**
* Create the [SimpleExoPlayer] instance.
*/
private fun newPlayer(): SimpleExoPlayer {
// Since Auxio is a music player, only specify an audio renderer to save battery & cache space.
val audioRenderer = RenderersFactory { handler, vidListener, audioListener, textOutput, metadataOutput ->
arrayOf<Renderer>(
MediaCodecAudioRenderer(this, MediaCodecSelector.DEFAULT, handler, audioListener)
)
}
return SimpleExoPlayer.Builder(this, audioRenderer).build()
}
/**
* Restore the [SimpleExoPlayer] state, if the service was destroyed while [PlaybackStateManager] persisted.
*/