media/libraries/exoplayer
tonihei 5822d683ea Ensure output format is updated in sync with stream changes.
MediaCodecRenderer currently has two independent paths to trigger
events at stream changes:
 1. Detection of the last output buffer of the old stream to trigger
    onProcessedStreamChange and setting the new output stream offset.
 2. Detection of the first input buffer of the new stream to trigger
    onOutputFormatChanged.
Both events are identical for most media. However, there are two
problematic cases:
  A. (1) happens after (2). This may happen if the declared media
     duration is shorter than the actual last sample timestamp.
  B. (2) is too late and there are output samples between (1) and (2).
     This can happen if the new media outputs samples with a timestamp
     less than the first input timestamp.

This can be made more robust by:
 - Keeping a separate formatQueue for each stream to avoid case A.
 - Force outputting the first format after a stream change to
   avoid case B.

Issue: google/ExoPlayer#8594

PiperOrigin-RevId: 512586838
(cherry picked from commit 3970343846)
2023-02-28 18:02:43 +00:00
..
src Ensure output format is updated in sync with stream changes. 2023-02-28 18:02:43 +00:00
build.gradle Fix instrumentation tests not working via Gradle 2022-09-20 15:25:38 +00:00
lint-baseline.xml Add lint baseline for spurious API-level warnings 2022-06-17 10:08:37 +01:00
proguard-rules.txt Remove FfmpegVideoRenderer from 2.18.0 release 2022-05-30 17:58:14 +00:00
README.md Add javadoc links to README files 2023-01-25 18:01:21 +00:00

ExoPlayer module

This module provides ExoPlayer, the Player implementation for local media playback on Android.

Getting the module

The easiest way to get the module is to add it as a gradle dependency:

implementation 'androidx.media3:media3-exoplayer:1.X.X'

where 1.X.X is the version, which must match the version of the other media modules being used.

Alternatively, you can clone this GitHub project and depend on the module locally. Instructions for doing this can be found in the top level README.