77 lines
3.9 KiB
Markdown
77 lines
3.9 KiB
Markdown
---
|
||
title: Battery consumption
|
||
---
|
||
|
||
## How important is battery consumption due to media playback? ##
|
||
|
||
Avoiding unnecessary battery consumption is an important aspect of developing a
|
||
good Android application. Media playback can be a major cause of battery drain,
|
||
however its importance for a particular app heavily depends on its usage
|
||
patterns. If an app is only used to play small amounts of media each day, then
|
||
the corresponding battery consumption will only be a small percentage of the
|
||
total consumption of the device. In such it makes sense to prioritize feature
|
||
set and reliability over optimizing for battery when selecting which player to
|
||
use. On the other hand, if an app is often used to play large amounts of media
|
||
each day, then optimizing for battery consumption should be weighted more
|
||
heavily when choosing between a number of viable options.
|
||
|
||
## How power efficient is ExoPlayer? ##
|
||
|
||
The diverse nature of the Android device and media content ecosystems means that
|
||
it’s difficult to make widely applicable statements about ExoPlayer’s battery
|
||
consumption, and in particular how it compares with Android’s MediaPlayer API.
|
||
Both absolute and relative performance vary by hardware, Android version and the
|
||
media being played. Hence the information provided below should be treated as
|
||
guidance only.
|
||
|
||
### Video playback ###
|
||
|
||
For video playback, our measurements show that ExoPlayer and MediaPlayer draw
|
||
similar amounts of power. The power required for the display and decoding the
|
||
video stream are the same in both cases, and these account for most of the power
|
||
consumed during playback.
|
||
|
||
Regardless of which media player is used, choosing between `SurfaceView` and
|
||
`TextureView` for output can have a significant impact on power consumption.
|
||
`SurfaceView` is more power efficient, with `TextureView` increasing total power
|
||
draw during video playback by as much as 30% on some devices. `SurfaceView`
|
||
should therefore be preferred where possible. Read more about choosing between
|
||
`SurfaceView` and `TextureView`
|
||
[here]({{ site.baseurl }}/ui-components.html#choosing-a-surface-type).
|
||
|
||
Below are some power consumption measurements for playing 1080p and 480p video
|
||
on Pixel 2, measured using a [Monsoon power monitor][]. As mentioned above,
|
||
these numbers should not be used to draw general conclusions about power
|
||
consumption across the Android device and media content ecosystems.
|
||
|
||
| | MediaPlayer | ExoPlayer |
|
||
|-------------------|:-----------:|:----------|
|
||
| SurfaceView 1080p | 202 mAh | 214 mAh |
|
||
| TextureView 1080p | 219 mAh | 221 mAh |
|
||
| SurfaceView 480p | 194 mAh | 207 mAh |
|
||
| TextureView 480p | 212 mAh | 215 mAh |
|
||
|
||
### Audio playback ###
|
||
|
||
For short audio playbacks or playbacks when the screen is on, using ExoPlayer
|
||
does not have a significant impact on power compared to using MediaPlayer.
|
||
|
||
For long playbacks with the screen off, ExoPlayer's audio offload mode needs to
|
||
be used or ExoPlayer may consume significantly more power than MediaPlayer.
|
||
Audio offload allows audio processing to be offloaded from the CPU to a
|
||
dedicated signal processor. It is used by default by MediaPlayer but not
|
||
ExoPlayer. ExoPlayer introduced support for audio offload in 2.12 as an
|
||
experimental feature. See `DefaultRenderersFactory.setEnableAudioOffload` and
|
||
`ExoPlayer.experimentalSetOffloadSchedulingEnabled` for more details on how
|
||
to enable it.
|
||
|
||
Due to SDK API limitations, ExoPlayer's audio offload mode is only available on
|
||
devices running Android 10 and above. MediaPlayer can use audio offload on
|
||
devices running earlier versions of Android. Whether the increased robustness,
|
||
flexibility and feature set that ExoPlayer provides over MediaPlayer is worth
|
||
the increased power consumption for audio only use cases on older devices is
|
||
something an app developer must decide, taking their requirements and app usage
|
||
patterns into account.
|
||
|
||
[Monsoon power monitor]: https://www.msoon.com/battery-configuration
|