Package com.google.android.exoplayer2.source

## Interface MediaSourceEventListener

- All Known Subinterfaces:
    `AnalyticsCollector`
  All Known Implementing Classes:
    `DefaultAnalyticsCollector`, `ServerSideAdInsertionMediaSource`

      public interface MediaSourceEventListener

  Interface for callbacks to be notified of `MediaSource` events.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Interface | Description
    --- | --- | ---
    `static class` | `MediaSourceEventListener.EventDispatcher` | Dispatches events to `MediaSourceEventListeners`.

  - ### Method Summary

    All Methods Instance Methods Default Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `default void` | `onDownstreamFormatChanged​(int windowIndex, MediaSource.MediaPeriodId mediaPeriodId, MediaLoadData mediaLoadData)` | Called when a downstream format change occurs (i.e.
    `default void` | `onLoadCanceled​(int windowIndex, MediaSource.MediaPeriodId mediaPeriodId, LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData)` | Called when a load is canceled.
    `default void` | `onLoadCompleted​(int windowIndex, MediaSource.MediaPeriodId mediaPeriodId, LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData)` | Called when a load ends.
    `default void` | `onLoadError​(int windowIndex, MediaSource.MediaPeriodId mediaPeriodId, LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData, IOException error, boolean wasCanceled)` | Called when a load error occurs.
    `default void` | `onLoadStarted​(int windowIndex, MediaSource.MediaPeriodId mediaPeriodId, LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData)` | Called when a load begins.
    `default void` | `onUpstreamDiscarded​(int windowIndex, MediaSource.MediaPeriodId mediaPeriodId, MediaLoadData mediaLoadData)` | Called when data is removed from the back of a media buffer, typically so that it can be re-buffered in a different format.

- - ### Method Detail

    - #### onLoadStarted

          default void onLoadStarted​(int windowIndex,
                                     @Nullable
                                     MediaSource.MediaPeriodId mediaPeriodId,
                                     LoadEventInfo loadEventInfo,
                                     MediaLoadData mediaLoadData)

      Called when a load begins.
      Parameters:
        `windowIndex` - The window index in the timeline of the media source this load belongs to.
        `mediaPeriodId` - The `MediaSource.MediaPeriodId` this load belongs to. Null if the load does not belong to a specific media period.
        `loadEventInfo` - The `LoadEventInfo` corresponding to the event. The value of `LoadEventInfo.uri` won't reflect potential redirection yet and `LoadEventInfo.responseHeaders` will be empty.
        `mediaLoadData` - The `MediaLoadData` defining the data being loaded.

    - #### onLoadCompleted

          default void onLoadCompleted​(int windowIndex,
                                       @Nullable
                                       MediaSource.MediaPeriodId mediaPeriodId,
                                       LoadEventInfo loadEventInfo,
                                       MediaLoadData mediaLoadData)

      Called when a load ends.
      Parameters:
        `windowIndex` - The window index in the timeline of the media source this load belongs to.
        `mediaPeriodId` - The `MediaSource.MediaPeriodId` this load belongs to. Null if the load does not belong to a specific media period.
        `loadEventInfo` - The `LoadEventInfo` corresponding to the event. The values of `LoadEventInfo.elapsedRealtimeMs` and `LoadEventInfo.bytesLoaded` are relative to the corresponding `onLoadStarted(int, MediaPeriodId, LoadEventInfo, MediaLoadData)` event.
        `mediaLoadData` - The `MediaLoadData` defining the data being loaded.

    - #### onLoadCanceled

          default void onLoadCanceled​(int windowIndex,
                                      @Nullable
                                      MediaSource.MediaPeriodId mediaPeriodId,
                                      LoadEventInfo loadEventInfo,
                                      MediaLoadData mediaLoadData)

      Called when a load is canceled.
      Parameters:
        `windowIndex` - The window index in the timeline of the media source this load belongs to.
        `mediaPeriodId` - The `MediaSource.MediaPeriodId` this load belongs to. Null if the load does not belong to a specific media period.
        `loadEventInfo` - The `LoadEventInfo` corresponding to the event. The values of `LoadEventInfo.elapsedRealtimeMs` and `LoadEventInfo.bytesLoaded` are relative to the corresponding `onLoadStarted(int, MediaPeriodId, LoadEventInfo, MediaLoadData)` event.
        `mediaLoadData` - The `MediaLoadData` defining the data being loaded.

    - #### onLoadError

          default void onLoadError​(int windowIndex,
                                   @Nullable
                                   MediaSource.MediaPeriodId mediaPeriodId,
                                   LoadEventInfo loadEventInfo,
                                   MediaLoadData mediaLoadData,
                                   IOException error,
                                   boolean wasCanceled)

      Called when a load error occurs.

      The error may or may not have resulted in the load being canceled, as indicated by the `wasCanceled` parameter. If the load was canceled, `onLoadCanceled(int, com.google.android.exoplayer2.source.MediaSource.MediaPeriodId, com.google.android.exoplayer2.source.LoadEventInfo, com.google.android.exoplayer2.source.MediaLoadData)` will not be called in addition to this method.

      This method being called does not indicate that playback has failed, or that it will fail. The player may be able to recover from the error. Hence applications should not implement this method to display a user visible error or initiate an application level retry. `Player.Listener.onPlayerError(com.google.android.exoplayer2.PlaybackException)` is the appropriate place to implement such behavior. This method is called to provide the application with an opportunity to log the error if it wishes to do so.

      Parameters:
        `windowIndex` - The window index in the timeline of the media source this load belongs to.
        `mediaPeriodId` - The `MediaSource.MediaPeriodId` this load belongs to. Null if the load does not belong to a specific media period.
        `loadEventInfo` - The `LoadEventInfo` corresponding to the event. The values of `LoadEventInfo.elapsedRealtimeMs` and `LoadEventInfo.bytesLoaded` are relative to the corresponding `onLoadStarted(int, MediaPeriodId, LoadEventInfo, MediaLoadData)` event.
        `mediaLoadData` - The `MediaLoadData` defining the data being loaded.
        `error` - The load error.
        `wasCanceled` - Whether the load was canceled as a result of the error.

    - #### onUpstreamDiscarded

          default void onUpstreamDiscarded​(int windowIndex,
                                           MediaSource.MediaPeriodId mediaPeriodId,
                                           MediaLoadData mediaLoadData)

      Called when data is removed from the back of a media buffer, typically so that it can be re-buffered in a different format.
      Parameters:
        `windowIndex` - The window index in the timeline of the media source this load belongs to.
        `mediaPeriodId` - The `MediaSource.MediaPeriodId` the media belongs to.
        `mediaLoadData` - The `MediaLoadData` defining the media being discarded.

    - #### onDownstreamFormatChanged

          default void onDownstreamFormatChanged​(int windowIndex,
                                                 @Nullable
                                                 MediaSource.MediaPeriodId mediaPeriodId,
                                                 MediaLoadData mediaLoadData)

      Called when a downstream format change occurs (i.e. when the format of the media being read from one or more `SampleStream`s provided by the source changes).
      Parameters:
        `windowIndex` - The window index in the timeline of the media source this load belongs to.
        `mediaPeriodId` - The `MediaSource.MediaPeriodId` the media belongs to.
        `mediaLoadData` - The `MediaLoadData` defining the newly selected downstream data.