The MPEG-H module provides MpeghAudioRenderer, which uses the libmpegh native
library to decode MPEG-H audio.
Please note that while the code in this repository is licensed under Apache 2.0, using this module also requires building and including the Fraunhofer GitHub MPEG-H decoder which is licensed under the Fraunhofer GitHub MPEG-H decoder project.
To use the module you need to clone this GitHub project and depend on its modules locally. Instructions for doing this can be found in the top level README.
In addition, it's necessary to fetch libmpegh library as follows (starting at the root of your media3 check-out):
cd libraries/decoder_mpegh/src/main/jni && \
git clone https://github.com/Fraunhofer-IIS/mpeghdec.git \
--branch r3.0.2 \
--depth=1 \
libmpeghHaving followed these steps, gradle will build the module automatically when run on the command line or via Android Studio, using CMake and Ninja to configure and build mpeghdec and the module's JNI wrapper library.
We do not provide support for building this module on Windows, however it should be possible to follow the Linux instructions in Windows PowerShell.
Once you've followed the instructions above to check out, build and depend on
the module, the next step is to tell ExoPlayer to use MpeghAudioRenderer. How
you do this depends on which player API you're using:
- If you're passing a
DefaultRenderersFactorytoExoPlayer.Builder, you can enable using the module by setting theextensionRendererModeparameter of theDefaultRenderersFactoryconstructor toEXTENSION_RENDERER_MODE_ON. This will useMpeghAudioRendererfor playback ifMediaCodecAudioRendererdoesn't support the input format. PassEXTENSION_RENDERER_MODE_PREFERto giveMpeghAudioRendererpriority overMediaCodecAudioRenderer. - If you've subclassed
DefaultRenderersFactory, add aMpeghAudioRendererto the output list inbuildAudioRenderers. ExoPlayer will use the firstRendererin the list that supports the input media format. - If you've implemented your own
RenderersFactory, return aMpeghAudioRendererinstance fromcreateRenderers. ExoPlayer will use the firstRendererin the returned array that supports the input media format. - If you're using
ExoPlayer.Builder, pass aMpeghAudioRendererin the array ofRenderers. ExoPlayer will use the firstRendererin the list that supports the input media format.
Note: These instructions assume you're using DefaultTrackSelector. If you have
a custom track selector the choice of Renderer is up to your implementation,
so you need to make sure you are passing an MpeghAudioRenderer to the player,
then implement your own logic to use the renderer for a given track.