- Why can't I access local files in the demo app?
- Why does transformation fail on a specific device?
- Does Transformer support transforming (or recording) remote media
- Does Transformer support 8k input?
- How does Transformer relate to platform compatible media transcoding?
- How can I reduce transformation latency or increase throughput?
Why can't I access local files in the demo app?
Scoped storage enforcement from Android 11 (API level 30) prevents direct file system access. For manual testing during development, it's possible to access local files by adding the manage external storage permission in the demo app manifest:
Then grant the permission via adb:
adb shell appops set --uid androidx.media3.demo.transformer \ MANAGE_EXTERNAL_STORAGE allow
Why does transformation fail on a specific device?
Please file an issue on the Media3 issue tracker with enough information to reproduce the issue. Workarounds for device-specific issues can be added to the library to improve compatibility over time.
Does Transformer support transforming (or recording) remote media?
Transformer supports remote progressive streams, including media file containers like MP4.
In very poor network conditions, transformation may fail because buffering remote media for too long triggers checks in the muxer that are intended to identify that the pipeline is stuck. You can override the default behavior by changing the muxer configuration as follows:
TransformationRequest.Builder() .setMuxerFactory( DefaultMuxer.Factory(/* maxDelayBetweenSamplesMs= */C.TIME_UNSET))
new TransformationRequest.Builder() .setMuxerFactory( new DefaultMuxer.Factory(/* maxDelayBetweenSamplesMs= */ C.TIME_UNSET));
C.TIME_UNSET removes the timeout entirely, but if your app runs on
MediaCodec can get stuck you may want to set a larger non-zero
Does Transformer support 8k input?
Transformer is implemented in a format-agnostic way, so it doesn't limit handling of 8k video, but hardware capabilities on the device may mean that transformation can't succeed. For example, even on devices that can capture 8k, it might not be possible to decode and re-encode an 8k video due to exceeding the available hardware codec or RAM resources.
How does Transformer relate to platform compatible media transcoding?
Compatible media transcoding is an Android platform feature from Android 12 (API level 31) that converts media up to one minute in length into formats supported by the app. If you opt-in to using this feature, reading a media file in an incompatible format causes it to be transcoded on demand, and the result is cached for later read operations.
Transformer also supports format conversion, but it's available as a support library and the app has full control over the transcoding operation.
How can I reduce transformation latency or increase throughput?
Transformer relies on
MediaCodec for hardware-accelerated decoding and
encoding, and OpenGL for processing video frames. Based on our measurements on
typical devices, the limiting factor in Transformer's throughput is hardware
MediaCodec encoder throughput for use cases without heavyweight effects
processing. This is likely to impact other implementations in the same way. For
example, the platform compatible transcoding feature has similar performance to
The demo app's debug preview significantly reduces throughput, so turn off the preview feature when testing with a release build of the demo app to get a realistic idea of performance.