Rollback of b0abdade50
*** Original commit ***
Rollback of 08c5b1cb0a
*** Original commit ***
Wire up MediaMetricsListener and add configuration to disable it.
The listener will automatically forward diagnostics info to the
Android platform. ExoPlayer.Builder gets a new setter that allows
to disable this feature if required.
#...
***
PiperOrigin-RevId: 427131438
This commit is contained in:
parent
ddbd9512da
commit
8d9c4f4774
@ -43,6 +43,15 @@
|
||||
* Rename `DecoderCounters#inputBufferCount` to `queuedInputBufferCount`.
|
||||
* Make `SimpleExoPlayer.renderers` private. Renderers can be accessed via
|
||||
`ExoPlayer.getRenderer`.
|
||||
* Enable support for Android platform diagnostics via
|
||||
`MediaMetricsManager`. ExoPlayer will forward playback events and
|
||||
performance data to the platform, which helps to provide system
|
||||
performance and debugging information on the device. This data may also
|
||||
be collected by Google
|
||||
[if sharing usage and diagnostics data is enabled](https://support.google.com/accounts/answer/6078260)
|
||||
by the user of the device. Apps can opt-out of contributing to platform
|
||||
diagnostics for ExoPlayer with
|
||||
`ExoPlayer.Builder.setUsePlatformDiagnostics(false)`.
|
||||
* Android 12 compatibility:
|
||||
* Upgrade the Cast extension to depend on
|
||||
`com.google.android.gms:play-services-cast-framework:20.1.0`. Earlier
|
||||
|
@ -389,6 +389,7 @@ public interface ExoPlayer extends Player {
|
||||
/* package */ long releaseTimeoutMs;
|
||||
/* package */ long detachSurfaceTimeoutMs;
|
||||
/* package */ boolean pauseAtEndOfMediaItems;
|
||||
/* package */ boolean usePlatformDiagnostics;
|
||||
/* package */ boolean buildCalled;
|
||||
|
||||
/**
|
||||
@ -429,6 +430,7 @@ public interface ExoPlayer extends Player {
|
||||
* <li>{@code releaseTimeoutMs}: {@link #DEFAULT_RELEASE_TIMEOUT_MS}
|
||||
* <li>{@code detachSurfaceTimeoutMs}: {@link #DEFAULT_DETACH_SURFACE_TIMEOUT_MS}
|
||||
* <li>{@code pauseAtEndOfMediaItems}: {@code false}
|
||||
* <li>{@code usePlatformDiagnostics}: {@code true}
|
||||
* <li>{@link Clock}: {@link Clock#DEFAULT}
|
||||
* </ul>
|
||||
*
|
||||
@ -577,6 +579,7 @@ public interface ExoPlayer extends Player {
|
||||
clock = Clock.DEFAULT;
|
||||
releaseTimeoutMs = DEFAULT_RELEASE_TIMEOUT_MS;
|
||||
detachSurfaceTimeoutMs = DEFAULT_DETACH_SURFACE_TIMEOUT_MS;
|
||||
usePlatformDiagnostics = true;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -937,6 +940,27 @@ public interface ExoPlayer extends Player {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether the player reports diagnostics data to the Android platform.
|
||||
*
|
||||
* <p>If enabled, the player will use the {@link android.media.metrics.MediaMetricsManager} to
|
||||
* create a {@link android.media.metrics.PlaybackSession} and forward playback events and
|
||||
* performance data to this session. This helps to provide system performance and debugging
|
||||
* information for media playback on the device. This data may also be collected by Google <a
|
||||
* href="https://support.google.com/accounts/answer/6078260">if sharing usage and diagnostics
|
||||
* data is enabled</a> by the user of the device.
|
||||
*
|
||||
* @param usePlatformDiagnostics Whether the player reports diagnostics data to the Android
|
||||
* platform.
|
||||
* @return This builder.
|
||||
* @throws IllegalStateException If {@link #build()} has already been called.
|
||||
*/
|
||||
public Builder setUsePlatformDiagnostics(boolean usePlatformDiagnostics) {
|
||||
checkState(!buildCalled);
|
||||
this.usePlatformDiagnostics = usePlatformDiagnostics;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the {@link Clock} that will be used by the player. Should only be set for testing
|
||||
* purposes.
|
||||
|
@ -110,6 +110,7 @@ import com.google.android.exoplayer2.PlayerMessage.Target;
|
||||
import com.google.android.exoplayer2.Renderer.MessageType;
|
||||
import com.google.android.exoplayer2.analytics.AnalyticsCollector;
|
||||
import com.google.android.exoplayer2.analytics.AnalyticsListener;
|
||||
import com.google.android.exoplayer2.analytics.MediaMetricsListener;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.audio.AudioAttributes;
|
||||
import com.google.android.exoplayer2.audio.AudioRendererEventListener;
|
||||
@ -359,7 +360,11 @@ import java.util.concurrent.TimeoutException;
|
||||
playbackInfoUpdateHandler.post(() -> handlePlaybackInfo(playbackInfoUpdate));
|
||||
playbackInfo = PlaybackInfo.createDummy(emptyTrackSelectorResult);
|
||||
analyticsCollector.setPlayer(wrappingPlayer, applicationLooper);
|
||||
PlayerId playerId = Util.SDK_INT < 31 ? new PlayerId() : Api31.createPlayerId();
|
||||
PlayerId playerId =
|
||||
Util.SDK_INT < 31
|
||||
? new PlayerId()
|
||||
: Api31.registerMediaMetricsListener(
|
||||
applicationContext, /* player= */ this, builder.usePlatformDiagnostics);
|
||||
internalPlayer =
|
||||
new ExoPlayerImplInternal(
|
||||
renderers,
|
||||
@ -3045,9 +3050,17 @@ import java.util.concurrent.TimeoutException;
|
||||
private Api31() {}
|
||||
|
||||
@DoNotInline
|
||||
public static PlayerId createPlayerId() {
|
||||
// TODO: Create a MediaMetricsListener and obtain LogSessionId from it.
|
||||
return new PlayerId(LogSessionId.LOG_SESSION_ID_NONE);
|
||||
public static PlayerId registerMediaMetricsListener(
|
||||
Context context, ExoPlayerImpl player, boolean usePlatformDiagnostics) {
|
||||
@Nullable MediaMetricsListener listener = MediaMetricsListener.create(context);
|
||||
if (listener == null) {
|
||||
Log.w(TAG, "MediaMetricsService unavailable.");
|
||||
return new PlayerId(LogSessionId.LOG_SESSION_ID_NONE);
|
||||
}
|
||||
if (usePlatformDiagnostics) {
|
||||
player.addAnalyticsListener(listener);
|
||||
}
|
||||
return new PlayerId(listener.getLogSessionId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user