mirror of
https://github.com/samsonjs/media.git
synced 2026-04-12 12:25:47 +00:00
Merge branch 'dev-v2' into rtsp-socket-factory
This commit is contained in:
commit
e158f9ab0e
120 changed files with 1931 additions and 1027 deletions
|
|
@ -2,7 +2,17 @@
|
|||
|
||||
### dev-v2 (not yet released)
|
||||
|
||||
### 2.16.1 (2021-11-11)
|
||||
* DRM:
|
||||
* Remove `playbackLooper` from `DrmSessionManager.(pre)acquireSession`.
|
||||
When a `DrmSessionManager` is used by an app in a custom `MediaSource`,
|
||||
the `playbackLooper` needs to be passed to `DrmSessionManager.setPlayer`
|
||||
instead.
|
||||
* IMA:
|
||||
* Add a method to `AdPlaybackState` to allow resetting an ad group so that
|
||||
it can be played again
|
||||
([#9615](https://github.com/google/ExoPlayer/issues/9615)).
|
||||
|
||||
### 2.16.1 (2021-11-18)
|
||||
|
||||
* Core Library:
|
||||
* Fix track selection issue where overriding one track group did not
|
||||
|
|
@ -10,18 +20,26 @@
|
|||
([#9675](https://github.com/google/ExoPlayer/issues/9675)).
|
||||
* Fix track selection issue where a mixture of non-empty and empty track
|
||||
overrides is not applied correctly
|
||||
([#9649](https://github.com/google/ExoPlayer/issues/9649).
|
||||
([#9649](https://github.com/google/ExoPlayer/issues/9649)).
|
||||
* Add protected method `DefaultRenderersFactory.getCodecAdapterFactory()`
|
||||
so that subclasses of `DefaultRenderersFactory` that override
|
||||
`buildVideoRenderers()` or `buildAudioRenderers()` can access the codec
|
||||
adapter factory and pass it to `MediaCodecRenderer` instances they
|
||||
create.
|
||||
* Propagate ICY header fields `name` and `genre` to
|
||||
`MediaMetadata.station` and `MediaMetadata.genre` respectively so that
|
||||
they reach the app via `Player.Listener.onMediaMetadataChanged()`
|
||||
([#9677](https://github.com/google/ExoPlayer/issues/9677)).
|
||||
* Remove null keys from `DefaultHttpDataSource#getResponseHeaders`.
|
||||
* Extractors:
|
||||
* WAV: Add support for RF64 streams
|
||||
([#9543](https://github.com/google/ExoPlayer/issues/9543).
|
||||
([#9543](https://github.com/google/ExoPlayer/issues/9543)).
|
||||
* DASH:
|
||||
* Add parsed essential and supplemental properties to the `Representation`
|
||||
([#9579](https://github.com/google/ExoPlayer/issues/9579)).
|
||||
* HLS:
|
||||
* Correctly populate `Format.label` for audio only HLS streams
|
||||
([#9608](https://github.com/google/ExoPlayer/issues/9608)).
|
||||
* RTSP
|
||||
* Provide a client API to override the `SocketFactory` used for any server
|
||||
connection ([#9606](https://github.com/google/ExoPlayer/pull/9606)).
|
||||
|
|
|
|||
|
|
@ -38,8 +38,7 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder;
|
|||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.ExoPlayer;
|
||||
import com.google.android.exoplayer2.MediaItem;
|
||||
import com.google.android.exoplayer2.ui.PlayerControlView;
|
||||
import com.google.android.exoplayer2.ui.PlayerView;
|
||||
import com.google.android.exoplayer2.ui.StyledPlayerView;
|
||||
import com.google.android.exoplayer2.util.Assertions;
|
||||
import com.google.android.exoplayer2.util.Util;
|
||||
import com.google.android.gms.cast.framework.CastButtonFactory;
|
||||
|
|
@ -53,8 +52,7 @@ import com.google.android.gms.dynamite.DynamiteModule;
|
|||
public class MainActivity extends AppCompatActivity
|
||||
implements OnClickListener, PlayerManager.Listener {
|
||||
|
||||
private PlayerView localPlayerView;
|
||||
private PlayerControlView castControlView;
|
||||
private StyledPlayerView playerView;
|
||||
private PlayerManager playerManager;
|
||||
private RecyclerView mediaQueueList;
|
||||
private MediaQueueListAdapter mediaQueueListAdapter;
|
||||
|
|
@ -83,10 +81,8 @@ public class MainActivity extends AppCompatActivity
|
|||
|
||||
setContentView(R.layout.main_activity);
|
||||
|
||||
localPlayerView = findViewById(R.id.local_player_view);
|
||||
localPlayerView.requestFocus();
|
||||
|
||||
castControlView = findViewById(R.id.cast_control_view);
|
||||
playerView = findViewById(R.id.player_view);
|
||||
playerView.requestFocus();
|
||||
|
||||
mediaQueueList = findViewById(R.id.sample_list);
|
||||
ItemTouchHelper helper = new ItemTouchHelper(new RecyclerViewCallback());
|
||||
|
|
@ -114,12 +110,7 @@ public class MainActivity extends AppCompatActivity
|
|||
return;
|
||||
}
|
||||
playerManager =
|
||||
new PlayerManager(
|
||||
/* listener= */ this,
|
||||
localPlayerView,
|
||||
castControlView,
|
||||
/* context= */ this,
|
||||
castContext);
|
||||
new PlayerManager(/* listener= */ this, this, playerView, /* context= */ castContext);
|
||||
mediaQueueList.setAdapter(mediaQueueListAdapter);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ package com.google.android.exoplayer2.castdemo;
|
|||
|
||||
import android.content.Context;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
import androidx.core.content.res.ResourcesCompat;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.ExoPlayer;
|
||||
import com.google.android.exoplayer2.MediaItem;
|
||||
|
|
@ -28,8 +28,9 @@ import com.google.android.exoplayer2.Timeline;
|
|||
import com.google.android.exoplayer2.TracksInfo;
|
||||
import com.google.android.exoplayer2.ext.cast.CastPlayer;
|
||||
import com.google.android.exoplayer2.ext.cast.SessionAvailabilityListener;
|
||||
import com.google.android.exoplayer2.ui.PlayerControlView;
|
||||
import com.google.android.exoplayer2.ui.PlayerView;
|
||||
import com.google.android.exoplayer2.ui.StyledPlayerControlView;
|
||||
import com.google.android.exoplayer2.ui.StyledPlayerView;
|
||||
import com.google.android.gms.cast.framework.CastContext;
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
|
@ -50,8 +51,8 @@ import java.util.ArrayList;
|
|||
void onUnsupportedTrack(int trackType);
|
||||
}
|
||||
|
||||
private final PlayerView localPlayerView;
|
||||
private final PlayerControlView castControlView;
|
||||
private final Context context;
|
||||
private final StyledPlayerView playerView;
|
||||
private final Player localPlayer;
|
||||
private final CastPlayer castPlayer;
|
||||
private final ArrayList<MediaItem> mediaQueue;
|
||||
|
|
@ -64,32 +65,25 @@ import java.util.ArrayList;
|
|||
/**
|
||||
* Creates a new manager for {@link ExoPlayer} and {@link CastPlayer}.
|
||||
*
|
||||
* @param listener A {@link Listener} for queue position changes.
|
||||
* @param localPlayerView The {@link PlayerView} for local playback.
|
||||
* @param castControlView The {@link PlayerControlView} to control remote playback.
|
||||
* @param context A {@link Context}.
|
||||
* @param listener A {@link Listener} for queue position changes.
|
||||
* @param playerView The {@link PlayerView} for playback.
|
||||
* @param castContext The {@link CastContext}.
|
||||
*/
|
||||
public PlayerManager(
|
||||
Listener listener,
|
||||
PlayerView localPlayerView,
|
||||
PlayerControlView castControlView,
|
||||
Context context,
|
||||
CastContext castContext) {
|
||||
Context context, Listener listener, StyledPlayerView playerView, CastContext castContext) {
|
||||
this.context = context;
|
||||
this.listener = listener;
|
||||
this.localPlayerView = localPlayerView;
|
||||
this.castControlView = castControlView;
|
||||
this.playerView = playerView;
|
||||
mediaQueue = new ArrayList<>();
|
||||
currentItemIndex = C.INDEX_UNSET;
|
||||
|
||||
localPlayer = new ExoPlayer.Builder(context).build();
|
||||
localPlayer.addListener(this);
|
||||
localPlayerView.setPlayer(localPlayer);
|
||||
|
||||
castPlayer = new CastPlayer(castContext);
|
||||
castPlayer.addListener(this);
|
||||
castPlayer.setSessionAvailabilityListener(this);
|
||||
castControlView.setPlayer(castPlayer);
|
||||
|
||||
setCurrentPlayer(castPlayer.isCastSessionAvailable() ? castPlayer : localPlayer);
|
||||
}
|
||||
|
|
@ -192,11 +186,7 @@ import java.util.ArrayList;
|
|||
* @return Whether the event was handled by the target view.
|
||||
*/
|
||||
public boolean dispatchKeyEvent(KeyEvent event) {
|
||||
if (currentPlayer == localPlayer) {
|
||||
return localPlayerView.dispatchKeyEvent(event);
|
||||
} else /* currentPlayer == castPlayer */ {
|
||||
return castControlView.dispatchKeyEvent(event);
|
||||
}
|
||||
return playerView.dispatchKeyEvent(event);
|
||||
}
|
||||
|
||||
/** Releases the manager and the players that it holds. */
|
||||
|
|
@ -205,7 +195,7 @@ import java.util.ArrayList;
|
|||
mediaQueue.clear();
|
||||
castPlayer.setSessionAvailabilityListener(null);
|
||||
castPlayer.release();
|
||||
localPlayerView.setPlayer(null);
|
||||
playerView.setPlayer(null);
|
||||
localPlayer.release();
|
||||
}
|
||||
|
||||
|
|
@ -270,13 +260,19 @@ import java.util.ArrayList;
|
|||
return;
|
||||
}
|
||||
|
||||
// View management.
|
||||
if (currentPlayer == localPlayer) {
|
||||
localPlayerView.setVisibility(View.VISIBLE);
|
||||
castControlView.hide();
|
||||
} else /* currentPlayer == castPlayer */ {
|
||||
localPlayerView.setVisibility(View.GONE);
|
||||
castControlView.show();
|
||||
playerView.setPlayer(currentPlayer);
|
||||
playerView.setControllerHideOnTouch(currentPlayer == localPlayer);
|
||||
if (currentPlayer == castPlayer) {
|
||||
playerView.setControllerShowTimeoutMs(0);
|
||||
playerView.showController();
|
||||
playerView.setDefaultArtwork(
|
||||
ResourcesCompat.getDrawable(
|
||||
context.getResources(),
|
||||
R.drawable.ic_baseline_cast_connected_400,
|
||||
/* theme= */ null));
|
||||
} else { // currentPlayer == localPlayer
|
||||
playerView.setControllerShowTimeoutMs(StyledPlayerControlView.DEFAULT_SHOW_TIMEOUT_MS);
|
||||
playerView.setDefaultArtwork(null);
|
||||
}
|
||||
|
||||
// Player state management.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
<!--
|
||||
~ Copyright 2021 The Android Open Source Project
|
||||
~
|
||||
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||
~ you may not use this file except in compliance with the License.
|
||||
~ You may obtain a copy of the License at
|
||||
~
|
||||
~ https://www.apache.org/licenses/LICENSE-2.0
|
||||
~
|
||||
~ Unless required by applicable law or agreed to in writing, software
|
||||
~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
~ See the License for the specific language governing permissions and
|
||||
~ limitations under the License.
|
||||
-->
|
||||
<vector android:height="400dp" android:tint="#FFFFFF"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="400dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M1,18v3h3c0,-1.66 -1.34,-3 -3,-3zM1,14v2c2.76,0 5,2.24 5,5h2c0,-3.87 -3.13,-7 -7,-7zM19,7L5,7v1.63c3.96,1.28 7.09,4.41 8.37,8.37L19,17L19,7zM1,10v2c4.97,0 9,4.03 9,9h2c0,-6.08 -4.93,-11 -11,-11zM21,3L3,3c-1.1,0 -2,0.9 -2,2v3h2L3,5h18v14h-7v2h7c1.1,0 2,-0.9 2,-2L23,5c0,-1.1 -0.9,-2 -2,-2z"/>
|
||||
</vector>
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
android:layout_height="match_parent"
|
||||
android:keepScreenOn="true">
|
||||
|
||||
<com.google.android.exoplayer2.ui.PlayerView android:id="@+id/local_player_view"
|
||||
<com.google.android.exoplayer2.ui.StyledPlayerView android:id="@+id/player_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
|
|
@ -50,11 +50,4 @@
|
|||
|
||||
</RelativeLayout>
|
||||
|
||||
<com.google.android.exoplayer2.ui.PlayerControlView android:id="@+id/cast_control_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
app:repeat_toggle_modes="all|one"
|
||||
app:show_timeout="-1"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
|
|
|||
|
|
@ -88,6 +88,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||
} catch (IOException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
program.use();
|
||||
GlUtil.Attribute[] attributes = program.getAttributes();
|
||||
for (GlUtil.Attribute attribute : attributes) {
|
||||
if (attribute.name.equals("a_position")) {
|
||||
|
|
@ -142,7 +143,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||
// Run the shader program.
|
||||
GlUtil.Uniform[] uniforms = checkNotNull(this.uniforms);
|
||||
GlUtil.Attribute[] attributes = checkNotNull(this.attributes);
|
||||
checkNotNull(program).use();
|
||||
for (GlUtil.Uniform uniform : uniforms) {
|
||||
switch (uniform.name) {
|
||||
case "tex_sampler_0":
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ import com.google.android.exoplayer2.drm.HttpMediaDrmCallback;
|
|||
import com.google.android.exoplayer2.source.MediaSource;
|
||||
import com.google.android.exoplayer2.source.ProgressiveMediaSource;
|
||||
import com.google.android.exoplayer2.source.dash.DashMediaSource;
|
||||
import com.google.android.exoplayer2.ui.PlayerView;
|
||||
import com.google.android.exoplayer2.ui.StyledPlayerView;
|
||||
import com.google.android.exoplayer2.upstream.DataSource;
|
||||
import com.google.android.exoplayer2.upstream.DefaultDataSource;
|
||||
import com.google.android.exoplayer2.upstream.DefaultHttpDataSource;
|
||||
|
|
@ -61,7 +61,7 @@ public final class MainActivity extends Activity {
|
|||
private static final String DRM_SCHEME_EXTRA = "drm_scheme";
|
||||
private static final String DRM_LICENSE_URL_EXTRA = "drm_license_url";
|
||||
|
||||
@Nullable private PlayerView playerView;
|
||||
@Nullable private StyledPlayerView playerView;
|
||||
@Nullable private VideoProcessingGLSurfaceView videoProcessingGLSurfaceView;
|
||||
|
||||
@Nullable private ExoPlayer player;
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
android:layout_height="match_parent"
|
||||
android:keepScreenOn="true">
|
||||
|
||||
<com.google.android.exoplayer2.ui.PlayerView
|
||||
<com.google.android.exoplayer2.ui.StyledPlayerView
|
||||
android:id="@+id/player_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
|
|||
|
|
@ -6820,7 +6820,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<tr id="i1101" class="rowColor">
|
||||
<td class="colFirst"><a href="com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.TrackSelectionOverride.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionOverrides.TrackSelectionOverride</a></td>
|
||||
<th class="colLast" scope="row">
|
||||
<div class="block">Forces the selection of <a href="com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.TrackSelectionOverride.html#trackIndexes"><code>TrackSelectionOverrides.TrackSelectionOverride.trackIndexes</code></a> for a <a href="com/google/android/exoplayer2/source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a>.</div>
|
||||
<div class="block">Forces the selection of <a href="com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.TrackSelectionOverride.html#trackIndices"><code>TrackSelectionOverrides.TrackSelectionOverride.trackIndices</code></a> for a <a href="com/google/android/exoplayer2/source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a>.</div>
|
||||
</th>
|
||||
</tr>
|
||||
<tr id="i1102" class="altColor">
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
catch(err) {
|
||||
}
|
||||
//-->
|
||||
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10};
|
||||
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10};
|
||||
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
|
||||
var altColor = "altColor";
|
||||
var rowColor = "rowColor";
|
||||
|
|
@ -368,12 +368,20 @@ implements <a href="RenderersFactory.html" title="interface in com.google.androi
|
|||
</tr>
|
||||
<tr id="i8" class="altColor">
|
||||
<td class="colFirst"><code><a href="DefaultRenderersFactory.html" title="class in com.google.android.exoplayer2">DefaultRenderersFactory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#experimentalSetImmediateCodecStartAfterFlushEnabled(boolean)">experimentalSetImmediateCodecStartAfterFlushEnabled</a></span>​(boolean enabled)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Enable calling <a href="https://developer.android.com/reference/android/media/MediaCodec.html#start()" title="class or interface in android.media" class="externalLink"><code>MediaCodec.start()</code></a> immediately after <a href="https://developer.android.com/reference/android/media/MediaCodec.html?is-external=true#flush()" title="class or interface in android.media" class="externalLink" target="_top"><code>MediaCodec.flush()</code></a> on the
|
||||
playback thread, when operating the codec in asynchronous mode.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i9" class="rowColor">
|
||||
<td class="colFirst"><code><a href="DefaultRenderersFactory.html" title="class in com.google.android.exoplayer2">DefaultRenderersFactory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#experimentalSetSynchronizeCodecInteractionsWithQueueingEnabled(boolean)">experimentalSetSynchronizeCodecInteractionsWithQueueingEnabled</a></span>​(boolean enabled)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Enable synchronizing codec interactions with asynchronous buffer queueing.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i9" class="rowColor">
|
||||
<tr id="i10" class="altColor">
|
||||
<td class="colFirst"><code><a href="DefaultRenderersFactory.html" title="class in com.google.android.exoplayer2">DefaultRenderersFactory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#forceDisableMediaCodecAsynchronousQueueing()">forceDisableMediaCodecAsynchronousQueueing</a></span>()</code></th>
|
||||
<td class="colLast">
|
||||
|
|
@ -381,7 +389,7 @@ implements <a href="RenderersFactory.html" title="interface in com.google.androi
|
|||
operating their <a href="https://developer.android.com/reference/android/media/MediaCodec.html" title="class or interface in android.media" class="externalLink" target="_top"><code>MediaCodec</code></a> in asynchronous mode and perform asynchronous queueing.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i10" class="altColor">
|
||||
<tr id="i11" class="rowColor">
|
||||
<td class="colFirst"><code><a href="DefaultRenderersFactory.html" title="class in com.google.android.exoplayer2">DefaultRenderersFactory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#forceEnableMediaCodecAsynchronousQueueing()">forceEnableMediaCodecAsynchronousQueueing</a></span>()</code></th>
|
||||
<td class="colLast">
|
||||
|
|
@ -389,7 +397,14 @@ implements <a href="RenderersFactory.html" title="interface in com.google.androi
|
|||
operate their <a href="https://developer.android.com/reference/android/media/MediaCodec.html" title="class or interface in android.media" class="externalLink" target="_top"><code>MediaCodec</code></a> in asynchronous mode and perform asynchronous queueing.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i11" class="rowColor">
|
||||
<tr id="i12" class="altColor">
|
||||
<td class="colFirst"><code>protected <a href="mediacodec/MediaCodecAdapter.Factory.html" title="interface in com.google.android.exoplayer2.mediacodec">MediaCodecAdapter.Factory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getCodecAdapterFactory()">getCodecAdapterFactory</a></span>()</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Returns the <a href="mediacodec/MediaCodecAdapter.Factory.html" title="interface in com.google.android.exoplayer2.mediacodec"><code>MediaCodecAdapter.Factory</code></a> that will be used when creating <a href="mediacodec/MediaCodecRenderer.html" title="class in com.google.android.exoplayer2.mediacodec"><code>MediaCodecRenderer</code></a> instances.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i13" class="rowColor">
|
||||
<td class="colFirst"><code><a href="DefaultRenderersFactory.html" title="class in com.google.android.exoplayer2">DefaultRenderersFactory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setAllowedVideoJoiningTimeMs(long)">setAllowedVideoJoiningTimeMs</a></span>​(long allowedVideoJoiningTimeMs)</code></th>
|
||||
<td class="colLast">
|
||||
|
|
@ -397,21 +412,21 @@ implements <a href="RenderersFactory.html" title="interface in com.google.androi
|
|||
playback.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i12" class="altColor">
|
||||
<tr id="i14" class="altColor">
|
||||
<td class="colFirst"><code><a href="DefaultRenderersFactory.html" title="class in com.google.android.exoplayer2">DefaultRenderersFactory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setEnableAudioFloatOutput(boolean)">setEnableAudioFloatOutput</a></span>​(boolean enableFloatOutput)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets whether floating point audio should be output when possible.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i13" class="rowColor">
|
||||
<tr id="i15" class="rowColor">
|
||||
<td class="colFirst"><code><a href="DefaultRenderersFactory.html" title="class in com.google.android.exoplayer2">DefaultRenderersFactory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setEnableAudioOffload(boolean)">setEnableAudioOffload</a></span>​(boolean enableOffload)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets whether audio should be played using the offload path.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i14" class="altColor">
|
||||
<tr id="i16" class="altColor">
|
||||
<td class="colFirst"><code><a href="DefaultRenderersFactory.html" title="class in com.google.android.exoplayer2">DefaultRenderersFactory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setEnableAudioTrackPlaybackParams(boolean)">setEnableAudioTrackPlaybackParams</a></span>​(boolean enableAudioTrackPlaybackParams)</code></th>
|
||||
<td class="colLast">
|
||||
|
|
@ -419,14 +434,14 @@ implements <a href="RenderersFactory.html" title="interface in com.google.androi
|
|||
23, rather than using application-level audio speed adjustment.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i15" class="rowColor">
|
||||
<tr id="i17" class="rowColor">
|
||||
<td class="colFirst"><code><a href="DefaultRenderersFactory.html" title="class in com.google.android.exoplayer2">DefaultRenderersFactory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setEnableDecoderFallback(boolean)">setEnableDecoderFallback</a></span>​(boolean enableDecoderFallback)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets whether to enable fallback to lower-priority decoders if decoder initialization fails.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i16" class="altColor">
|
||||
<tr id="i18" class="altColor">
|
||||
<td class="colFirst"><code><a href="DefaultRenderersFactory.html" title="class in com.google.android.exoplayer2">DefaultRenderersFactory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setExtensionRendererMode(int)">setExtensionRendererMode</a></span>​(int extensionRendererMode)</code></th>
|
||||
<td class="colLast">
|
||||
|
|
@ -434,7 +449,7 @@ implements <a href="RenderersFactory.html" title="interface in com.google.androi
|
|||
used.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i17" class="rowColor">
|
||||
<tr id="i19" class="rowColor">
|
||||
<td class="colFirst"><code><a href="DefaultRenderersFactory.html" title="class in com.google.android.exoplayer2">DefaultRenderersFactory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setMediaCodecSelector(com.google.android.exoplayer2.mediacodec.MediaCodecSelector)">setMediaCodecSelector</a></span>​(<a href="mediacodec/MediaCodecSelector.html" title="interface in com.google.android.exoplayer2.mediacodec">MediaCodecSelector</a> mediaCodecSelector)</code></th>
|
||||
<td class="colLast">
|
||||
|
|
@ -680,6 +695,28 @@ public DefaultRenderersFactory​(<a href="https://developer.android.co
|
|||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="experimentalSetImmediateCodecStartAfterFlushEnabled(boolean)">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>experimentalSetImmediateCodecStartAfterFlushEnabled</h4>
|
||||
<pre class="methodSignature">public <a href="DefaultRenderersFactory.html" title="class in com.google.android.exoplayer2">DefaultRenderersFactory</a> experimentalSetImmediateCodecStartAfterFlushEnabled​(boolean enabled)</pre>
|
||||
<div class="block">Enable calling <a href="https://developer.android.com/reference/android/media/MediaCodec.html#start()" title="class or interface in android.media" class="externalLink"><code>MediaCodec.start()</code></a> immediately after <a href="https://developer.android.com/reference/android/media/MediaCodec.html?is-external=true#flush()" title="class or interface in android.media" class="externalLink" target="_top"><code>MediaCodec.flush()</code></a> on the
|
||||
playback thread, when operating the codec in asynchronous mode. If disabled, <a href="https://developer.android.com/reference/android/media/MediaCodec.html#start()" title="class or interface in android.media" class="externalLink" target="_top"><code>MediaCodec.start()</code></a> will be called by the callback thread after pending callbacks are handled.
|
||||
|
||||
<p>By default, this feature is disabled.
|
||||
|
||||
<p>This method is experimental, and will be renamed or removed in a future release.</div>
|
||||
<dl>
|
||||
<dt><span class="paramLabel">Parameters:</span></dt>
|
||||
<dd><code>enabled</code> - Whether <a href="https://developer.android.com/reference/android/media/MediaCodec.html#start()" title="class or interface in android.media" class="externalLink" target="_top"><code>MediaCodec.start()</code></a> will be called on the playback thread
|
||||
immediately after <a href="https://developer.android.com/reference/android/media/MediaCodec.html#flush()" title="class or interface in android.media" class="externalLink" target="_top"><code>MediaCodec.flush()</code></a>.</dd>
|
||||
<dt><span class="returnLabel">Returns:</span></dt>
|
||||
<dd>This factory, for convenience.</dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="setEnableDecoderFallback(boolean)">
|
||||
<!-- -->
|
||||
</a>
|
||||
|
|
@ -988,7 +1025,7 @@ public DefaultRenderersFactory​(<a href="https://developer.android.co
|
|||
<a id="buildAudioSink(android.content.Context,boolean,boolean,boolean)">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockListLast">
|
||||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>buildAudioSink</h4>
|
||||
<pre class="methodSignature">@Nullable
|
||||
|
|
@ -1010,6 +1047,16 @@ protected <a href="audio/AudioSink.html" title="interface in com.google.and
|
|||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="getCodecAdapterFactory()">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockListLast">
|
||||
<li class="blockList">
|
||||
<h4>getCodecAdapterFactory</h4>
|
||||
<pre class="methodSignature">protected <a href="mediacodec/MediaCodecAdapter.Factory.html" title="interface in com.google.android.exoplayer2.mediacodec">MediaCodecAdapter.Factory</a> getCodecAdapterFactory()</pre>
|
||||
<div class="block">Returns the <a href="mediacodec/MediaCodecAdapter.Factory.html" title="interface in com.google.android.exoplayer2.mediacodec"><code>MediaCodecAdapter.Factory</code></a> that will be used when creating <a href="mediacodec/MediaCodecRenderer.html" title="class in com.google.android.exoplayer2.mediacodec"><code>MediaCodecRenderer</code></a> instances.</div>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
|
|
|||
|
|
@ -896,7 +896,8 @@ extends <a href="Player.html" title="interface in com.google.android.exoplayer2"
|
|||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>getPlayerError</h4>
|
||||
<pre class="methodSignature"><a href="ExoPlaybackException.html" title="class in com.google.android.exoplayer2">ExoPlaybackException</a> getPlayerError()</pre>
|
||||
<pre class="methodSignature">@Nullable
|
||||
<a href="ExoPlaybackException.html" title="class in com.google.android.exoplayer2">ExoPlaybackException</a> getPlayerError()</pre>
|
||||
<div class="block">Equivalent to <a href="Player.html#getPlayerError()"><code>Player.getPlayerError()</code></a>, except the exception is guaranteed to be an
|
||||
<a href="ExoPlaybackException.html" title="class in com.google.android.exoplayer2"><code>ExoPlaybackException</code></a>.</div>
|
||||
<dl>
|
||||
|
|
|
|||
|
|
@ -1113,7 +1113,7 @@ implements <a href="Player.html" title="interface in com.google.android.exoplaye
|
|||
<td class="colFirst"><code>void</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#stop()">stop</a></span>()</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Stops playback without resetting the player.</div>
|
||||
<div class="block">Stops playback without resetting the playlist.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i123" class="rowColor">
|
||||
|
|
@ -1595,7 +1595,10 @@ public void addListener​(<a href="Player.Listener.html" title="i
|
|||
<h4>prepare</h4>
|
||||
<pre class="methodSignature">public void prepare()</pre>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="Player.html#prepare()">Player</a></code></span></div>
|
||||
<div class="block">Prepares the player.</div>
|
||||
<div class="block">Prepares the player.
|
||||
|
||||
<p>This will move the player out of <a href="Player.html#STATE_IDLE"><code>idle state</code></a> and the player will start
|
||||
loading media and acquire resources needed for playback.</div>
|
||||
<dl>
|
||||
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
|
||||
<dd><code><a href="Player.html#prepare()">prepare</a></code> in interface <code><a href="Player.html" title="interface in com.google.android.exoplayer2">Player</a></code></dd>
|
||||
|
|
@ -2337,12 +2340,13 @@ public void seekToNextWindow()</pre>
|
|||
<h4>stop</h4>
|
||||
<pre class="methodSignature">public void stop()</pre>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="Player.html#stop()">Player</a></code></span></div>
|
||||
<div class="block">Stops playback without resetting the player. Use <a href="Player.html#pause()"><code>Player.pause()</code></a> rather than this method if
|
||||
<div class="block">Stops playback without resetting the playlist. Use <a href="Player.html#pause()"><code>Player.pause()</code></a> rather than this method if
|
||||
the intention is to pause playback.
|
||||
|
||||
<p>Calling this method will cause the playback state to transition to <a href="Player.html#STATE_IDLE"><code>Player.STATE_IDLE</code></a>. The
|
||||
player instance can still be used, and <a href="Player.html#release()"><code>Player.release()</code></a> must still be called on the player if
|
||||
it's no longer required.
|
||||
<p>Calling this method will cause the playback state to transition to <a href="Player.html#STATE_IDLE"><code>Player.STATE_IDLE</code></a> and
|
||||
the player will release the loaded media and resources required for playback. The player
|
||||
instance can still be used by calling <a href="Player.html#prepare()"><code>Player.prepare()</code></a> again, and <a href="Player.html#release()"><code>Player.release()</code></a> must
|
||||
still be called on the player if it's no longer required.
|
||||
|
||||
<p>Calling this method does not clear the playlist, reset the playback position or the playback
|
||||
error.</div>
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
catch(err) {
|
||||
}
|
||||
//-->
|
||||
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":42,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":42};
|
||||
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":42,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":42};
|
||||
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
|
||||
var altColor = "altColor";
|
||||
var rowColor = "rowColor";
|
||||
|
|
@ -387,54 +387,61 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html"
|
|||
</tr>
|
||||
<tr id="i29" class="rowColor">
|
||||
<td class="colFirst"><code><a href="MediaMetadata.Builder.html" title="class in com.google.android.exoplayer2">MediaMetadata.Builder</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setStation(java.lang.CharSequence)">setStation</a></span>​(<a href="https://developer.android.com/reference/java/lang/CharSequence.html" title="class or interface in java.lang" class="externalLink" target="_top">CharSequence</a> station)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the name of the station streaming the media.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i30" class="altColor">
|
||||
<td class="colFirst"><code><a href="MediaMetadata.Builder.html" title="class in com.google.android.exoplayer2">MediaMetadata.Builder</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setSubtitle(java.lang.CharSequence)">setSubtitle</a></span>​(<a href="https://developer.android.com/reference/java/lang/CharSequence.html" title="class or interface in java.lang" class="externalLink" target="_top">CharSequence</a> subtitle)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the subtitle.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i30" class="altColor">
|
||||
<tr id="i31" class="rowColor">
|
||||
<td class="colFirst"><code><a href="MediaMetadata.Builder.html" title="class in com.google.android.exoplayer2">MediaMetadata.Builder</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setTitle(java.lang.CharSequence)">setTitle</a></span>​(<a href="https://developer.android.com/reference/java/lang/CharSequence.html" title="class or interface in java.lang" class="externalLink" target="_top">CharSequence</a> title)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the title.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i31" class="rowColor">
|
||||
<tr id="i32" class="altColor">
|
||||
<td class="colFirst"><code><a href="MediaMetadata.Builder.html" title="class in com.google.android.exoplayer2">MediaMetadata.Builder</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setTotalDiscCount(java.lang.Integer)">setTotalDiscCount</a></span>​(<a href="https://developer.android.com/reference/java/lang/Integer.html" title="class or interface in java.lang" class="externalLink" target="_top">Integer</a> totalDiscCount)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the total number of discs.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i32" class="altColor">
|
||||
<tr id="i33" class="rowColor">
|
||||
<td class="colFirst"><code><a href="MediaMetadata.Builder.html" title="class in com.google.android.exoplayer2">MediaMetadata.Builder</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setTotalTrackCount(java.lang.Integer)">setTotalTrackCount</a></span>​(<a href="https://developer.android.com/reference/java/lang/Integer.html" title="class or interface in java.lang" class="externalLink" target="_top">Integer</a> totalTrackCount)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the total number of tracks.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i33" class="rowColor">
|
||||
<tr id="i34" class="altColor">
|
||||
<td class="colFirst"><code><a href="MediaMetadata.Builder.html" title="class in com.google.android.exoplayer2">MediaMetadata.Builder</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setTrackNumber(java.lang.Integer)">setTrackNumber</a></span>​(<a href="https://developer.android.com/reference/java/lang/Integer.html" title="class or interface in java.lang" class="externalLink" target="_top">Integer</a> trackNumber)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the track number.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i34" class="altColor">
|
||||
<tr id="i35" class="rowColor">
|
||||
<td class="colFirst"><code><a href="MediaMetadata.Builder.html" title="class in com.google.android.exoplayer2">MediaMetadata.Builder</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setUserRating(com.google.android.exoplayer2.Rating)">setUserRating</a></span>​(<a href="Rating.html" title="class in com.google.android.exoplayer2">Rating</a> userRating)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the user <a href="Rating.html" title="class in com.google.android.exoplayer2"><code>Rating</code></a>.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i35" class="rowColor">
|
||||
<tr id="i36" class="altColor">
|
||||
<td class="colFirst"><code><a href="MediaMetadata.Builder.html" title="class in com.google.android.exoplayer2">MediaMetadata.Builder</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setWriter(java.lang.CharSequence)">setWriter</a></span>​(<a href="https://developer.android.com/reference/java/lang/CharSequence.html" title="class or interface in java.lang" class="externalLink" target="_top">CharSequence</a> writer)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the writer.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i36" class="altColor">
|
||||
<tr id="i37" class="rowColor">
|
||||
<td class="colFirst"><code><a href="MediaMetadata.Builder.html" title="class in com.google.android.exoplayer2">MediaMetadata.Builder</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setYear(java.lang.Integer)">setYear</a></span>​(<a href="https://developer.android.com/reference/java/lang/Integer.html" title="class or interface in java.lang" class="externalLink" target="_top">Integer</a> year)</code></th>
|
||||
<td class="colLast">
|
||||
|
|
@ -861,6 +868,17 @@ public <a href="MediaMetadata.Builder.html" title="class in com.google.andr
|
|||
<div class="block">Sets the compilation.</div>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="setStation(java.lang.CharSequence)">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>setStation</h4>
|
||||
<pre class="methodSignature">public <a href="MediaMetadata.Builder.html" title="class in com.google.android.exoplayer2">MediaMetadata.Builder</a> setStation​(@Nullable
|
||||
<a href="https://developer.android.com/reference/java/lang/CharSequence.html" title="class or interface in java.lang" class="externalLink" target="_top">CharSequence</a> station)</pre>
|
||||
<div class="block">Sets the name of the station streaming the media.</div>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="setExtras(android.os.Bundle)">
|
||||
<!-- -->
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -548,54 +548,61 @@ implements <a href="Bundleable.html" title="interface in com.google.android.exop
|
|||
</tr>
|
||||
<tr class="rowColor">
|
||||
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/lang/CharSequence.html" title="class or interface in java.lang" class="externalLink" target="_top">CharSequence</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#station">station</a></span></code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Optional name of the station streaming the media.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/lang/CharSequence.html" title="class or interface in java.lang" class="externalLink" target="_top">CharSequence</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#subtitle">subtitle</a></span></code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Optional subtitle.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/lang/CharSequence.html" title="class or interface in java.lang" class="externalLink" target="_top">CharSequence</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#title">title</a></span></code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Optional title.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<tr class="altColor">
|
||||
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/lang/Integer.html" title="class or interface in java.lang" class="externalLink" target="_top">Integer</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#totalDiscCount">totalDiscCount</a></span></code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Optional total number of discs.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/lang/Integer.html" title="class or interface in java.lang" class="externalLink" target="_top">Integer</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#totalTrackCount">totalTrackCount</a></span></code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Optional total number of tracks.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<tr class="altColor">
|
||||
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/lang/Integer.html" title="class or interface in java.lang" class="externalLink" target="_top">Integer</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#trackNumber">trackNumber</a></span></code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Optional track number.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<td class="colFirst"><code><a href="Rating.html" title="class in com.google.android.exoplayer2">Rating</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#userRating">userRating</a></span></code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Optional user <a href="Rating.html" title="class in com.google.android.exoplayer2"><code>Rating</code></a>.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<tr class="altColor">
|
||||
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/lang/CharSequence.html" title="class or interface in java.lang" class="externalLink" target="_top">CharSequence</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#writer">writer</a></span></code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Optional writer.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/lang/Integer.html" title="class or interface in java.lang" class="externalLink" target="_top">Integer</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#year">year</a></span></code></th>
|
||||
<td class="colLast">
|
||||
|
|
@ -1421,6 +1428,17 @@ public final <a href="https://developer.android.com/reference/java/lang/Cha
|
|||
<div class="block">Optional compilation.</div>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="station">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>station</h4>
|
||||
<pre>@Nullable
|
||||
public final <a href="https://developer.android.com/reference/java/lang/CharSequence.html" title="class or interface in java.lang" class="externalLink" target="_top">CharSequence</a> station</pre>
|
||||
<div class="block">Optional name of the station streaming the media.</div>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="extras">
|
||||
<!-- -->
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -837,7 +837,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<td class="colFirst"><code>static int</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#STATE_IDLE">STATE_IDLE</a></span></code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">The player is idle, and must be <a href="#prepare()"><code>prepared</code></a> before it will play the media.</div>
|
||||
<div class="block">The player is idle, meaning it holds only limited resources.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
|
|
@ -1141,7 +1141,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getCurrentWindowIndex()">getCurrentWindowIndex</a></span>()</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
|
||||
<div class="deprecationComment">Use <a href="#getCurrentMediaItem()"><code>getCurrentMediaItem()</code></a> instead.</div>
|
||||
<div class="deprecationComment">Use <a href="#getCurrentMediaItemIndex()"><code>getCurrentMediaItemIndex()</code></a> instead.</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
@ -1803,7 +1803,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<td class="colFirst"><code>void</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#stop()">stop</a></span>()</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Stops playback without resetting the player.</div>
|
||||
<div class="block">Stops playback without resetting the playlist.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i122" class="altColor">
|
||||
|
|
@ -1840,7 +1840,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<li class="blockList">
|
||||
<h4>STATE_IDLE</h4>
|
||||
<pre>static final int STATE_IDLE</pre>
|
||||
<div class="block">The player is idle, and must be <a href="#prepare()"><code>prepared</code></a> before it will play the media.</div>
|
||||
<div class="block">The player is idle, meaning it holds only limited resources. The player must be <a href="#prepare()"><code>prepared</code></a> before it will play the media.</div>
|
||||
<dl>
|
||||
<dt><span class="seeLabel">See Also:</span></dt>
|
||||
<dd><a href="../../../../constant-values.html#com.google.android.exoplayer2.Player.STATE_IDLE">Constant Field Values</a></dd>
|
||||
|
|
@ -3371,7 +3371,10 @@ static final int COMMAND_SEEK_TO_WINDOW</pre>
|
|||
<li class="blockList">
|
||||
<h4>prepare</h4>
|
||||
<pre class="methodSignature">void prepare()</pre>
|
||||
<div class="block">Prepares the player.</div>
|
||||
<div class="block">Prepares the player.
|
||||
|
||||
<p>This will move the player out of <a href="#STATE_IDLE"><code>idle state</code></a> and the player will start
|
||||
loading media and acquire resources needed for playback.</div>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="getPlaybackState()">
|
||||
|
|
@ -3987,12 +3990,13 @@ void seekToNextWindow()</pre>
|
|||
<li class="blockList">
|
||||
<h4>stop</h4>
|
||||
<pre class="methodSignature">void stop()</pre>
|
||||
<div class="block">Stops playback without resetting the player. Use <a href="#pause()"><code>pause()</code></a> rather than this method if
|
||||
<div class="block">Stops playback without resetting the playlist. Use <a href="#pause()"><code>pause()</code></a> rather than this method if
|
||||
the intention is to pause playback.
|
||||
|
||||
<p>Calling this method will cause the playback state to transition to <a href="#STATE_IDLE"><code>STATE_IDLE</code></a>. The
|
||||
player instance can still be used, and <a href="#release()"><code>release()</code></a> must still be called on the player if
|
||||
it's no longer required.
|
||||
<p>Calling this method will cause the playback state to transition to <a href="#STATE_IDLE"><code>STATE_IDLE</code></a> and
|
||||
the player will release the loaded media and resources required for playback. The player
|
||||
instance can still be used by calling <a href="#prepare()"><code>prepare()</code></a> again, and <a href="#release()"><code>release()</code></a> must
|
||||
still be called on the player if it's no longer required.
|
||||
|
||||
<p>Calling this method does not clear the playlist, reset the playback position or the playback
|
||||
error.</div>
|
||||
|
|
@ -4196,7 +4200,7 @@ void stop​(boolean reset)</pre>
|
|||
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
|
||||
int getCurrentWindowIndex()</pre>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
|
||||
<div class="deprecationComment">Use <a href="#getCurrentMediaItem()"><code>getCurrentMediaItem()</code></a> instead.</div>
|
||||
<div class="deprecationComment">Use <a href="#getCurrentMediaItemIndex()"><code>getCurrentMediaItemIndex()</code></a> instead.</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
|
|||
|
|
@ -1374,7 +1374,7 @@ implements <a href="ExoPlayer.html" title="interface in com.google.android.exopl
|
|||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#stop()">stop</a></span>()</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
<div class="block">Stops playback without resetting the player.</div>
|
||||
<div class="block">Stops playback without resetting the playlist.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i131" class="rowColor">
|
||||
|
|
@ -2700,7 +2700,10 @@ public void retry()</pre>
|
|||
<pre class="methodSignature">public void prepare()</pre>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="Player.html#prepare()">Player</a></code></span></div>
|
||||
<div class="block">Prepares the player.</div>
|
||||
<div class="block">Prepares the player.
|
||||
|
||||
<p>This will move the player out of <a href="Player.html#STATE_IDLE"><code>idle state</code></a> and the player will start
|
||||
loading media and acquire resources needed for playback.</div>
|
||||
<dl>
|
||||
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
|
||||
<dd><code><a href="Player.html#prepare()">prepare</a></code> in interface <code><a href="Player.html" title="interface in com.google.android.exoplayer2">Player</a></code></dd>
|
||||
|
|
@ -3457,12 +3460,13 @@ public @com.google.android.exoplayer2.Player.RepeatMode int getRepeatM
|
|||
<pre class="methodSignature">public void stop()</pre>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="Player.html#stop()">Player</a></code></span></div>
|
||||
<div class="block">Stops playback without resetting the player. Use <a href="Player.html#pause()"><code>Player.pause()</code></a> rather than this method if
|
||||
<div class="block">Stops playback without resetting the playlist. Use <a href="Player.html#pause()"><code>Player.pause()</code></a> rather than this method if
|
||||
the intention is to pause playback.
|
||||
|
||||
<p>Calling this method will cause the playback state to transition to <a href="Player.html#STATE_IDLE"><code>Player.STATE_IDLE</code></a>. The
|
||||
player instance can still be used, and <a href="Player.html#release()"><code>Player.release()</code></a> must still be called on the player if
|
||||
it's no longer required.
|
||||
<p>Calling this method will cause the playback state to transition to <a href="Player.html#STATE_IDLE"><code>Player.STATE_IDLE</code></a> and
|
||||
the player will release the loaded media and resources required for playback. The player
|
||||
instance can still be used by calling <a href="Player.html#prepare()"><code>Player.prepare()</code></a> again, and <a href="Player.html#release()"><code>Player.release()</code></a> must
|
||||
still be called on the player if it's no longer required.
|
||||
|
||||
<p>Calling this method does not clear the playlist, reset the playback position or the playback
|
||||
error.</div>
|
||||
|
|
|
|||
|
|
@ -161,11 +161,25 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html"
|
|||
</tr>
|
||||
<tr class="rowColor">
|
||||
<td class="colFirst"><code>static int</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#DS64_FOURCC">DS64_FOURCC</a></span></code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Four character code for "ds64".</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<td class="colFirst"><code>static int</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#FMT_FOURCC">FMT_FOURCC</a></span></code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Four character code for "fmt ".</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<td class="colFirst"><code>static int</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#RF64_FOURCC">RF64_FOURCC</a></span></code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Four character code for "RF64".</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<td class="colFirst"><code>static int</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#RIFF_FOURCC">RIFF_FOURCC</a></span></code></th>
|
||||
|
|
@ -335,6 +349,34 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html"
|
|||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="RF64_FOURCC">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>RF64_FOURCC</h4>
|
||||
<pre>public static final int RF64_FOURCC</pre>
|
||||
<div class="block">Four character code for "RF64".</div>
|
||||
<dl>
|
||||
<dt><span class="seeLabel">See Also:</span></dt>
|
||||
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.audio.WavUtil.RF64_FOURCC">Constant Field Values</a></dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="DS64_FOURCC">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>DS64_FOURCC</h4>
|
||||
<pre>public static final int DS64_FOURCC</pre>
|
||||
<div class="block">Four character code for "ds64".</div>
|
||||
<dl>
|
||||
<dt><span class="seeLabel">See Also:</span></dt>
|
||||
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.audio.WavUtil.DS64_FOURCC">Constant Field Values</a></dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="TYPE_PCM">
|
||||
<!-- -->
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -807,7 +807,7 @@ extends <a href="../../BasePlayer.html" title="class in com.google.android.exopl
|
|||
<td class="colFirst"><code>void</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#stop()">stop</a></span>()</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Stops playback without resetting the player.</div>
|
||||
<div class="block">Stops playback without resetting the playlist.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i74" class="altColor">
|
||||
|
|
@ -1219,7 +1219,10 @@ public void removeListener​(<a href="../../Player.EventListener.
|
|||
<h4>prepare</h4>
|
||||
<pre class="methodSignature">public void prepare()</pre>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../Player.html#prepare()">Player</a></code></span></div>
|
||||
<div class="block">Prepares the player.</div>
|
||||
<div class="block">Prepares the player.
|
||||
|
||||
<p>This will move the player out of <a href="../../Player.html#STATE_IDLE"><code>idle state</code></a> and the player will start
|
||||
loading media and acquire resources needed for playback.</div>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="getPlaybackState()">
|
||||
|
|
@ -1408,12 +1411,13 @@ public <a href="../../PlaybackException.html" title="class in com.google.an
|
|||
<h4>stop</h4>
|
||||
<pre class="methodSignature">public void stop()</pre>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../Player.html#stop()">Player</a></code></span></div>
|
||||
<div class="block">Stops playback without resetting the player. Use <a href="../../Player.html#pause()"><code>Player.pause()</code></a> rather than this method if
|
||||
<div class="block">Stops playback without resetting the playlist. Use <a href="../../Player.html#pause()"><code>Player.pause()</code></a> rather than this method if
|
||||
the intention is to pause playback.
|
||||
|
||||
<p>Calling this method will cause the playback state to transition to <a href="../../Player.html#STATE_IDLE"><code>Player.STATE_IDLE</code></a>. The
|
||||
player instance can still be used, and <a href="../../Player.html#release()"><code>Player.release()</code></a> must still be called on the player if
|
||||
it's no longer required.
|
||||
<p>Calling this method will cause the playback state to transition to <a href="../../Player.html#STATE_IDLE"><code>Player.STATE_IDLE</code></a> and
|
||||
the player will release the loaded media and resources required for playback. The player
|
||||
instance can still be used by calling <a href="../../Player.html#prepare()"><code>Player.prepare()</code></a> again, and <a href="../../Player.html#release()"><code>Player.release()</code></a> must
|
||||
still be called on the player if it's no longer required.
|
||||
|
||||
<p>Calling this method does not clear the playlist, reset the playback position or the playback
|
||||
error.</div>
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
catch(err) {
|
||||
}
|
||||
//-->
|
||||
var data = {"i0":10,"i1":10,"i2":10,"i3":10};
|
||||
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10};
|
||||
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
|
||||
var altColor = "altColor";
|
||||
var rowColor = "rowColor";
|
||||
|
|
@ -210,19 +210,27 @@ implements <a href="MediaCodecAdapter.Factory.html" title="interface in com.goog
|
|||
</tr>
|
||||
<tr id="i1" class="rowColor">
|
||||
<td class="colFirst"><code>void</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#experimentalSetImmediateCodecStartAfterFlushEnabled(boolean)">experimentalSetImmediateCodecStartAfterFlushEnabled</a></span>​(boolean enabled)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Enable calling <a href="https://developer.android.com/reference/android/media/MediaCodec.html#start()" title="class or interface in android.media" class="externalLink"><code>MediaCodec.start()</code></a> immediately after <a href="https://developer.android.com/reference/android/media/MediaCodec.html?is-external=true#flush()" title="class or interface in android.media" class="externalLink" target="_top"><code>MediaCodec.flush()</code></a> on the
|
||||
playback thread, when operating the codec in asynchronous mode.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i2" class="altColor">
|
||||
<td class="colFirst"><code>void</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#experimentalSetSynchronizeCodecInteractionsWithQueueingEnabled(boolean)">experimentalSetSynchronizeCodecInteractionsWithQueueingEnabled</a></span>​(boolean enabled)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Enable synchronizing codec interactions with asynchronous buffer queueing.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i2" class="altColor">
|
||||
<tr id="i3" class="rowColor">
|
||||
<td class="colFirst"><code><a href="DefaultMediaCodecAdapterFactory.html" title="class in com.google.android.exoplayer2.mediacodec">DefaultMediaCodecAdapterFactory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#forceDisableAsynchronous()">forceDisableAsynchronous</a></span>()</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Forces the factory to always create <a href="SynchronousMediaCodecAdapter.html" title="class in com.google.android.exoplayer2.mediacodec"><code>SynchronousMediaCodecAdapter</code></a> instances.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i3" class="rowColor">
|
||||
<tr id="i4" class="altColor">
|
||||
<td class="colFirst"><code><a href="DefaultMediaCodecAdapterFactory.html" title="class in com.google.android.exoplayer2.mediacodec">DefaultMediaCodecAdapterFactory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#forceEnableAsynchronous()">forceEnableAsynchronous</a></span>()</code></th>
|
||||
<td class="colLast">
|
||||
|
|
@ -320,6 +328,26 @@ implements <a href="MediaCodecAdapter.Factory.html" title="interface in com.goog
|
|||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="experimentalSetImmediateCodecStartAfterFlushEnabled(boolean)">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>experimentalSetImmediateCodecStartAfterFlushEnabled</h4>
|
||||
<pre class="methodSignature">public void experimentalSetImmediateCodecStartAfterFlushEnabled​(boolean enabled)</pre>
|
||||
<div class="block">Enable calling <a href="https://developer.android.com/reference/android/media/MediaCodec.html#start()" title="class or interface in android.media" class="externalLink"><code>MediaCodec.start()</code></a> immediately after <a href="https://developer.android.com/reference/android/media/MediaCodec.html?is-external=true#flush()" title="class or interface in android.media" class="externalLink" target="_top"><code>MediaCodec.flush()</code></a> on the
|
||||
playback thread, when operating the codec in asynchronous mode. If disabled, <a href="https://developer.android.com/reference/android/media/MediaCodec.html#start()" title="class or interface in android.media" class="externalLink" target="_top"><code>MediaCodec.start()</code></a> will be called by the callback thread after pending callbacks are handled.
|
||||
|
||||
<p>By default, this feature is enabled.
|
||||
|
||||
<p>This method is experimental, and will be renamed or removed in a future release.</div>
|
||||
<dl>
|
||||
<dt><span class="paramLabel">Parameters:</span></dt>
|
||||
<dd><code>enabled</code> - Whether <a href="https://developer.android.com/reference/android/media/MediaCodec.html#start()" title="class or interface in android.media" class="externalLink" target="_top"><code>MediaCodec.start()</code></a> will be called on the playback thread
|
||||
immediately after <a href="https://developer.android.com/reference/android/media/MediaCodec.html#flush()" title="class or interface in android.media" class="externalLink" target="_top"><code>MediaCodec.flush()</code></a>.</dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="createAdapter(com.google.android.exoplayer2.mediacodec.MediaCodecAdapter.Configuration)">
|
||||
<!-- -->
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
catch(err) {
|
||||
}
|
||||
//-->
|
||||
var data = {"i0":10,"i1":10,"i2":10,"i3":9,"i4":10,"i5":10};
|
||||
var data = {"i0":10,"i1":10,"i2":10,"i3":9,"i4":10,"i5":10,"i6":10};
|
||||
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
|
||||
var altColor = "altColor";
|
||||
var rowColor = "rowColor";
|
||||
|
|
@ -308,11 +308,18 @@ implements <a href="../Metadata.Entry.html" title="interface in com.google.andro
|
|||
</td>
|
||||
</tr>
|
||||
<tr id="i4" class="altColor">
|
||||
<td class="colFirst"><code>void</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#populateMediaMetadata(com.google.android.exoplayer2.MediaMetadata.Builder)">populateMediaMetadata</a></span>​(<a href="../../MediaMetadata.Builder.html" title="class in com.google.android.exoplayer2">MediaMetadata.Builder</a> builder)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Updates the <a href="../../MediaMetadata.Builder.html" title="class in com.google.android.exoplayer2"><code>MediaMetadata.Builder</code></a> with the type specific values stored in this Entry.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i5" class="rowColor">
|
||||
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#toString()">toString</a></span>()</code></th>
|
||||
<td class="colLast"> </td>
|
||||
</tr>
|
||||
<tr id="i5" class="rowColor">
|
||||
<tr id="i6" class="altColor">
|
||||
<td class="colFirst"><code>void</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#writeToParcel(android.os.Parcel,int)">writeToParcel</a></span>​(<a href="https://developer.android.com/reference/android/os/Parcel.html" title="class or interface in android.os" class="externalLink" target="_top">Parcel</a> dest,
|
||||
int flags)</code></th>
|
||||
|
|
@ -331,7 +338,7 @@ implements <a href="../Metadata.Entry.html" title="interface in com.google.andro
|
|||
<!-- -->
|
||||
</a>
|
||||
<h3>Methods inherited from interface com.google.android.exoplayer2.metadata.<a href="../Metadata.Entry.html" title="interface in com.google.android.exoplayer2.metadata">Metadata.Entry</a></h3>
|
||||
<code><a href="../Metadata.Entry.html#getWrappedMetadataBytes()">getWrappedMetadataBytes</a>, <a href="../Metadata.Entry.html#getWrappedMetadataFormat()">getWrappedMetadataFormat</a>, <a href="../Metadata.Entry.html#populateMediaMetadata(com.google.android.exoplayer2.MediaMetadata.Builder)">populateMediaMetadata</a></code></li>
|
||||
<code><a href="../Metadata.Entry.html#getWrappedMetadataBytes()">getWrappedMetadataBytes</a>, <a href="../Metadata.Entry.html#getWrappedMetadataFormat()">getWrappedMetadataFormat</a></code></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
@ -513,6 +520,26 @@ public static <a href="IcyHeaders.html" title="class in com.google.android.
|
|||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="populateMediaMetadata(com.google.android.exoplayer2.MediaMetadata.Builder)">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>populateMediaMetadata</h4>
|
||||
<pre class="methodSignature">public void populateMediaMetadata​(<a href="../../MediaMetadata.Builder.html" title="class in com.google.android.exoplayer2">MediaMetadata.Builder</a> builder)</pre>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../Metadata.Entry.html#populateMediaMetadata(com.google.android.exoplayer2.MediaMetadata.Builder)">Metadata.Entry</a></code></span></div>
|
||||
<div class="block">Updates the <a href="../../MediaMetadata.Builder.html" title="class in com.google.android.exoplayer2"><code>MediaMetadata.Builder</code></a> with the type specific values stored in this Entry.
|
||||
|
||||
<p>The order of the <a href="../Metadata.Entry.html" title="interface in com.google.android.exoplayer2.metadata"><code>Metadata.Entry</code></a> objects in the <a href="../Metadata.html" title="class in com.google.android.exoplayer2.metadata"><code>Metadata</code></a> matters. If two <a href="../Metadata.Entry.html" title="interface in com.google.android.exoplayer2.metadata"><code>Metadata.Entry</code></a> entries attempt to populate the same <a href="../../MediaMetadata.html" title="class in com.google.android.exoplayer2"><code>MediaMetadata</code></a> field, then the last one in
|
||||
the list is used.</div>
|
||||
<dl>
|
||||
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
|
||||
<dd><code><a href="../Metadata.Entry.html#populateMediaMetadata(com.google.android.exoplayer2.MediaMetadata.Builder)">populateMediaMetadata</a></code> in interface <code><a href="../Metadata.Entry.html" title="interface in com.google.android.exoplayer2.metadata">Metadata.Entry</a></code></dd>
|
||||
<dt><span class="paramLabel">Parameters:</span></dt>
|
||||
<dd><code>builder</code> - The builder to be updated.</dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="equals(java.lang.Object)">
|
||||
<!-- -->
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
catch(err) {
|
||||
}
|
||||
//-->
|
||||
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":42};
|
||||
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":42,"i6":42,"i7":10,"i8":42,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":42};
|
||||
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
|
||||
var altColor = "altColor";
|
||||
var rowColor = "rowColor";
|
||||
|
|
@ -310,14 +310,14 @@ implements <a href="MediaSourceFactory.html" title="interface in com.google.andr
|
|||
<td class="colFirst"><code><a href="DefaultMediaSourceFactory.html" title="class in com.google.android.exoplayer2.source">DefaultMediaSourceFactory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">setDrmHttpDataSourceFactory</a></span>​(<a href="../upstream/HttpDataSource.Factory.html" title="interface in com.google.android.exoplayer2.upstream">HttpDataSource.Factory</a> drmHttpDataSourceFactory)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the <a href="../upstream/HttpDataSource.Factory.html" title="interface in com.google.android.exoplayer2.upstream"><code>HttpDataSource.Factory</code></a> to be used for creating <a href="../drm/HttpMediaDrmCallback.html" title="class in com.google.android.exoplayer2.drm"><code>HttpMediaDrmCallbacks</code></a> to execute key and provisioning requests over HTTP.</div>
|
||||
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i6" class="altColor">
|
||||
<td class="colFirst"><code><a href="DefaultMediaSourceFactory.html" title="class in com.google.android.exoplayer2.source">DefaultMediaSourceFactory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">setDrmSessionManager</a></span>​(<a href="../drm/DrmSessionManager.html" title="interface in com.google.android.exoplayer2.drm">DrmSessionManager</a> drmSessionManager)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the <a href="../drm/DrmSessionManager.html" title="interface in com.google.android.exoplayer2.drm"><code>DrmSessionManager</code></a> to use for all media items regardless of their <a href="../MediaItem.DrmConfiguration.html" title="class in com.google.android.exoplayer2"><code>MediaItem.DrmConfiguration</code></a>.</div>
|
||||
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i7" class="rowColor">
|
||||
|
|
@ -332,7 +332,7 @@ implements <a href="MediaSourceFactory.html" title="interface in com.google.andr
|
|||
<td class="colFirst"><code><a href="DefaultMediaSourceFactory.html" title="class in com.google.android.exoplayer2.source">DefaultMediaSourceFactory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setDrmUserAgent(java.lang.String)">setDrmUserAgent</a></span>​(<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> userAgent)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the optional user agent to be used for DRM requests.</div>
|
||||
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i9" class="rowColor">
|
||||
|
|
@ -634,8 +634,10 @@ implements <a href="MediaSourceFactory.html" title="interface in com.google.andr
|
|||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>setDrmHttpDataSourceFactory</h4>
|
||||
<pre class="methodSignature">public <a href="DefaultMediaSourceFactory.html" title="class in com.google.android.exoplayer2.source">DefaultMediaSourceFactory</a> setDrmHttpDataSourceFactory​(@Nullable
|
||||
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
|
||||
public <a href="DefaultMediaSourceFactory.html" title="class in com.google.android.exoplayer2.source">DefaultMediaSourceFactory</a> setDrmHttpDataSourceFactory​(@Nullable
|
||||
<a href="../upstream/HttpDataSource.Factory.html" title="interface in com.google.android.exoplayer2.upstream">HttpDataSource.Factory</a> drmHttpDataSourceFactory)</pre>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="MediaSourceFactory.html#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">MediaSourceFactory</a></code></span></div>
|
||||
<div class="block">Sets the <a href="../upstream/HttpDataSource.Factory.html" title="interface in com.google.android.exoplayer2.upstream"><code>HttpDataSource.Factory</code></a> to be used for creating <a href="../drm/HttpMediaDrmCallback.html" title="class in com.google.android.exoplayer2.drm"><code>HttpMediaDrmCallbacks</code></a> to execute key and provisioning requests over HTTP.
|
||||
|
||||
|
|
@ -656,8 +658,10 @@ implements <a href="MediaSourceFactory.html" title="interface in com.google.andr
|
|||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>setDrmUserAgent</h4>
|
||||
<pre class="methodSignature">public <a href="DefaultMediaSourceFactory.html" title="class in com.google.android.exoplayer2.source">DefaultMediaSourceFactory</a> setDrmUserAgent​(@Nullable
|
||||
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
|
||||
public <a href="DefaultMediaSourceFactory.html" title="class in com.google.android.exoplayer2.source">DefaultMediaSourceFactory</a> setDrmUserAgent​(@Nullable
|
||||
<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> userAgent)</pre>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="MediaSourceFactory.html#setDrmUserAgent(java.lang.String)">MediaSourceFactory</a></code></span></div>
|
||||
<div class="block">Sets the optional user agent to be used for DRM requests.
|
||||
|
||||
|
|
@ -687,8 +691,10 @@ implements <a href="MediaSourceFactory.html" title="interface in com.google.andr
|
|||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>setDrmSessionManager</h4>
|
||||
<pre class="methodSignature">public <a href="DefaultMediaSourceFactory.html" title="class in com.google.android.exoplayer2.source">DefaultMediaSourceFactory</a> setDrmSessionManager​(@Nullable
|
||||
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
|
||||
public <a href="DefaultMediaSourceFactory.html" title="class in com.google.android.exoplayer2.source">DefaultMediaSourceFactory</a> setDrmSessionManager​(@Nullable
|
||||
<a href="../drm/DrmSessionManager.html" title="interface in com.google.android.exoplayer2.drm">DrmSessionManager</a> drmSessionManager)</pre>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="MediaSourceFactory.html#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">MediaSourceFactory</a></code></span></div>
|
||||
<div class="block">Sets the <a href="../drm/DrmSessionManager.html" title="interface in com.google.android.exoplayer2.drm"><code>DrmSessionManager</code></a> to use for all media items regardless of their <a href="../MediaItem.DrmConfiguration.html" title="class in com.google.android.exoplayer2"><code>MediaItem.DrmConfiguration</code></a>.
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
catch(err) {
|
||||
}
|
||||
//-->
|
||||
var data = {"i0":42,"i1":10,"i2":10,"i3":10,"i4":42,"i5":10,"i6":10,"i7":10,"i8":10,"i9":42,"i10":10,"i11":42};
|
||||
var data = {"i0":42,"i1":10,"i2":10,"i3":10,"i4":42,"i5":42,"i6":42,"i7":10,"i8":42,"i9":42,"i10":10,"i11":42};
|
||||
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
|
||||
var altColor = "altColor";
|
||||
var rowColor = "rowColor";
|
||||
|
|
@ -261,14 +261,14 @@ implements <a href="MediaSourceFactory.html" title="interface in com.google.andr
|
|||
<td class="colFirst"><code><a href="ProgressiveMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source">ProgressiveMediaSource.Factory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">setDrmHttpDataSourceFactory</a></span>​(<a href="../upstream/HttpDataSource.Factory.html" title="interface in com.google.android.exoplayer2.upstream">HttpDataSource.Factory</a> drmHttpDataSourceFactory)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the <a href="../upstream/HttpDataSource.Factory.html" title="interface in com.google.android.exoplayer2.upstream"><code>HttpDataSource.Factory</code></a> to be used for creating <a href="../drm/HttpMediaDrmCallback.html" title="class in com.google.android.exoplayer2.drm"><code>HttpMediaDrmCallbacks</code></a> to execute key and provisioning requests over HTTP.</div>
|
||||
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i6" class="altColor">
|
||||
<td class="colFirst"><code><a href="ProgressiveMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source">ProgressiveMediaSource.Factory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">setDrmSessionManager</a></span>​(<a href="../drm/DrmSessionManager.html" title="interface in com.google.android.exoplayer2.drm">DrmSessionManager</a> drmSessionManager)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the <a href="../drm/DrmSessionManager.html" title="interface in com.google.android.exoplayer2.drm"><code>DrmSessionManager</code></a> to use for all media items regardless of their <a href="../MediaItem.DrmConfiguration.html" title="class in com.google.android.exoplayer2"><code>MediaItem.DrmConfiguration</code></a>.</div>
|
||||
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i7" class="rowColor">
|
||||
|
|
@ -283,7 +283,7 @@ implements <a href="MediaSourceFactory.html" title="interface in com.google.andr
|
|||
<td class="colFirst"><code><a href="ProgressiveMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source">ProgressiveMediaSource.Factory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setDrmUserAgent(java.lang.String)">setDrmUserAgent</a></span>​(<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> userAgent)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the optional user agent to be used for DRM requests.</div>
|
||||
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i9" class="rowColor">
|
||||
|
|
@ -512,8 +512,10 @@ public <a href="ProgressiveMediaSource.Factory.html" title="class in com.go
|
|||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>setDrmSessionManager</h4>
|
||||
<pre class="methodSignature">public <a href="ProgressiveMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source">ProgressiveMediaSource.Factory</a> setDrmSessionManager​(@Nullable
|
||||
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
|
||||
public <a href="ProgressiveMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source">ProgressiveMediaSource.Factory</a> setDrmSessionManager​(@Nullable
|
||||
<a href="../drm/DrmSessionManager.html" title="interface in com.google.android.exoplayer2.drm">DrmSessionManager</a> drmSessionManager)</pre>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="MediaSourceFactory.html#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">MediaSourceFactory</a></code></span></div>
|
||||
<div class="block">Sets the <a href="../drm/DrmSessionManager.html" title="interface in com.google.android.exoplayer2.drm"><code>DrmSessionManager</code></a> to use for all media items regardless of their <a href="../MediaItem.DrmConfiguration.html" title="class in com.google.android.exoplayer2"><code>MediaItem.DrmConfiguration</code></a>.
|
||||
|
||||
|
|
@ -535,8 +537,10 @@ public <a href="ProgressiveMediaSource.Factory.html" title="class in com.go
|
|||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>setDrmHttpDataSourceFactory</h4>
|
||||
<pre class="methodSignature">public <a href="ProgressiveMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source">ProgressiveMediaSource.Factory</a> setDrmHttpDataSourceFactory​(@Nullable
|
||||
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
|
||||
public <a href="ProgressiveMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source">ProgressiveMediaSource.Factory</a> setDrmHttpDataSourceFactory​(@Nullable
|
||||
<a href="../upstream/HttpDataSource.Factory.html" title="interface in com.google.android.exoplayer2.upstream">HttpDataSource.Factory</a> drmHttpDataSourceFactory)</pre>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="MediaSourceFactory.html#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">MediaSourceFactory</a></code></span></div>
|
||||
<div class="block">Sets the <a href="../upstream/HttpDataSource.Factory.html" title="interface in com.google.android.exoplayer2.upstream"><code>HttpDataSource.Factory</code></a> to be used for creating <a href="../drm/HttpMediaDrmCallback.html" title="class in com.google.android.exoplayer2.drm"><code>HttpMediaDrmCallbacks</code></a> to execute key and provisioning requests over HTTP.
|
||||
|
||||
|
|
@ -557,8 +561,10 @@ public <a href="ProgressiveMediaSource.Factory.html" title="class in com.go
|
|||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>setDrmUserAgent</h4>
|
||||
<pre class="methodSignature">public <a href="ProgressiveMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source">ProgressiveMediaSource.Factory</a> setDrmUserAgent​(@Nullable
|
||||
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
|
||||
public <a href="ProgressiveMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source">ProgressiveMediaSource.Factory</a> setDrmUserAgent​(@Nullable
|
||||
<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> userAgent)</pre>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="MediaSourceFactory.html#setDrmUserAgent(java.lang.String)">MediaSourceFactory</a></code></span></div>
|
||||
<div class="block">Sets the optional user agent to be used for DRM requests.
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
catch(err) {
|
||||
}
|
||||
//-->
|
||||
var data = {"i0":42,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":42,"i12":10,"i13":10,"i14":42,"i15":42};
|
||||
var data = {"i0":42,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":42,"i7":42,"i8":10,"i9":42,"i10":10,"i11":42,"i12":10,"i13":10,"i14":42,"i15":42};
|
||||
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
|
||||
var altColor = "altColor";
|
||||
var rowColor = "rowColor";
|
||||
|
|
@ -261,14 +261,14 @@ implements <a href="../MediaSourceFactory.html" title="interface in com.google.a
|
|||
<td class="colFirst"><code><a href="DashMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.dash">DashMediaSource.Factory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">setDrmHttpDataSourceFactory</a></span>​(<a href="../../upstream/HttpDataSource.Factory.html" title="interface in com.google.android.exoplayer2.upstream">HttpDataSource.Factory</a> drmHttpDataSourceFactory)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the <a href="../../upstream/HttpDataSource.Factory.html" title="interface in com.google.android.exoplayer2.upstream"><code>HttpDataSource.Factory</code></a> to be used for creating <a href="../../drm/HttpMediaDrmCallback.html" title="class in com.google.android.exoplayer2.drm"><code>HttpMediaDrmCallbacks</code></a> to execute key and provisioning requests over HTTP.</div>
|
||||
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i7" class="rowColor">
|
||||
<td class="colFirst"><code><a href="DashMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.dash">DashMediaSource.Factory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">setDrmSessionManager</a></span>​(<a href="../../drm/DrmSessionManager.html" title="interface in com.google.android.exoplayer2.drm">DrmSessionManager</a> drmSessionManager)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the <a href="../../drm/DrmSessionManager.html" title="interface in com.google.android.exoplayer2.drm"><code>DrmSessionManager</code></a> to use for all media items regardless of their <a href="../../MediaItem.DrmConfiguration.html" title="class in com.google.android.exoplayer2"><code>MediaItem.DrmConfiguration</code></a>.</div>
|
||||
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i8" class="altColor">
|
||||
|
|
@ -283,7 +283,7 @@ implements <a href="../MediaSourceFactory.html" title="interface in com.google.a
|
|||
<td class="colFirst"><code><a href="DashMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.dash">DashMediaSource.Factory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setDrmUserAgent(java.lang.String)">setDrmUserAgent</a></span>​(<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> userAgent)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the optional user agent to be used for DRM requests.</div>
|
||||
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i10" class="altColor">
|
||||
|
|
@ -472,8 +472,10 @@ public <a href="DashMediaSource.Factory.html" title="class in com.google.an
|
|||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>setDrmSessionManager</h4>
|
||||
<pre class="methodSignature">public <a href="DashMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.dash">DashMediaSource.Factory</a> setDrmSessionManager​(@Nullable
|
||||
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
|
||||
public <a href="DashMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.dash">DashMediaSource.Factory</a> setDrmSessionManager​(@Nullable
|
||||
<a href="../../drm/DrmSessionManager.html" title="interface in com.google.android.exoplayer2.drm">DrmSessionManager</a> drmSessionManager)</pre>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../MediaSourceFactory.html#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">MediaSourceFactory</a></code></span></div>
|
||||
<div class="block">Sets the <a href="../../drm/DrmSessionManager.html" title="interface in com.google.android.exoplayer2.drm"><code>DrmSessionManager</code></a> to use for all media items regardless of their <a href="../../MediaItem.DrmConfiguration.html" title="class in com.google.android.exoplayer2"><code>MediaItem.DrmConfiguration</code></a>.
|
||||
|
||||
|
|
@ -495,8 +497,10 @@ public <a href="DashMediaSource.Factory.html" title="class in com.google.an
|
|||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>setDrmHttpDataSourceFactory</h4>
|
||||
<pre class="methodSignature">public <a href="DashMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.dash">DashMediaSource.Factory</a> setDrmHttpDataSourceFactory​(@Nullable
|
||||
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
|
||||
public <a href="DashMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.dash">DashMediaSource.Factory</a> setDrmHttpDataSourceFactory​(@Nullable
|
||||
<a href="../../upstream/HttpDataSource.Factory.html" title="interface in com.google.android.exoplayer2.upstream">HttpDataSource.Factory</a> drmHttpDataSourceFactory)</pre>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../MediaSourceFactory.html#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">MediaSourceFactory</a></code></span></div>
|
||||
<div class="block">Sets the <a href="../../upstream/HttpDataSource.Factory.html" title="interface in com.google.android.exoplayer2.upstream"><code>HttpDataSource.Factory</code></a> to be used for creating <a href="../../drm/HttpMediaDrmCallback.html" title="class in com.google.android.exoplayer2.drm"><code>HttpMediaDrmCallbacks</code></a> to execute key and provisioning requests over HTTP.
|
||||
|
||||
|
|
@ -517,8 +521,10 @@ public <a href="DashMediaSource.Factory.html" title="class in com.google.an
|
|||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>setDrmUserAgent</h4>
|
||||
<pre class="methodSignature">public <a href="DashMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.dash">DashMediaSource.Factory</a> setDrmUserAgent​(@Nullable
|
||||
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
|
||||
public <a href="DashMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.dash">DashMediaSource.Factory</a> setDrmUserAgent​(@Nullable
|
||||
<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> userAgent)</pre>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../MediaSourceFactory.html#setDrmUserAgent(java.lang.String)">MediaSourceFactory</a></code></span></div>
|
||||
<div class="block">Sets the optional user agent to be used for DRM requests.
|
||||
|
||||
|
|
|
|||
|
|
@ -166,25 +166,35 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html"
|
|||
<td class="colLast"> </td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#essentialProperties">essentialProperties</a></span></code></th>
|
||||
<td class="colLast"> </td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<td class="colFirst"><code><a href="../../../Format.html" title="class in com.google.android.exoplayer2">Format</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#format">format</a></span></code></th>
|
||||
<td class="colLast"> </td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/util/ArrayList.html" title="class or interface in java.util" class="externalLink">ArrayList</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#inbandEventStreams">inbandEventStreams</a></span></code></th>
|
||||
<td class="colLast"> </td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<tr class="altColor">
|
||||
<td class="colFirst"><code>long</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#revisionId">revisionId</a></span></code></th>
|
||||
<td class="colLast"> </td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<td class="colFirst"><code><a href="SegmentBase.html" title="class in com.google.android.exoplayer2.source.dash.manifest">SegmentBase</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#segmentBase">segmentBase</a></span></code></th>
|
||||
<td class="colLast"> </td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#supplementalProperties">supplementalProperties</a></span></code></th>
|
||||
<td class="colLast"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
@ -203,12 +213,14 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html"
|
|||
<th class="colLast" scope="col">Description</th>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase,java.lang.String,java.util.ArrayList,java.util.ArrayList,long)">RepresentationInfo</a></span>​(<a href="../../../Format.html" title="class in com.google.android.exoplayer2">Format</a> format,
|
||||
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase,java.lang.String,java.util.ArrayList,java.util.ArrayList,java.util.List,java.util.List,long)">RepresentationInfo</a></span>​(<a href="../../../Format.html" title="class in com.google.android.exoplayer2">Format</a> format,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="BaseUrl.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">BaseUrl</a>> baseUrls,
|
||||
<a href="SegmentBase.html" title="class in com.google.android.exoplayer2.source.dash.manifest">SegmentBase</a> segmentBase,
|
||||
<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> drmSchemeType,
|
||||
<a href="https://developer.android.com/reference/java/util/ArrayList.html" title="class or interface in java.util" class="externalLink">ArrayList</a><<a href="../../../drm/DrmInitData.SchemeData.html" title="class in com.google.android.exoplayer2.drm" target="_top">DrmInitData.SchemeData</a>> drmSchemeDatas,
|
||||
<a href="https://developer.android.com/reference/java/util/ArrayList.html" title="class or interface in java.util" class="externalLink">ArrayList</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> inbandEventStreams,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> essentialProperties,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> supplementalProperties,
|
||||
long revisionId)</code></th>
|
||||
<td class="colLast"> </td>
|
||||
</tr>
|
||||
|
|
@ -304,12 +316,30 @@ public final <a href="https://developer.android.com/reference/java/lang/Str
|
|||
<a id="revisionId">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockListLast">
|
||||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>revisionId</h4>
|
||||
<pre>public final long revisionId</pre>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="essentialProperties">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>essentialProperties</h4>
|
||||
<pre>public final <a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> essentialProperties</pre>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="supplementalProperties">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockListLast">
|
||||
<li class="blockList">
|
||||
<h4>supplementalProperties</h4>
|
||||
<pre>public final <a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> supplementalProperties</pre>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
|
@ -320,7 +350,7 @@ public final <a href="https://developer.android.com/reference/java/lang/Str
|
|||
<!-- -->
|
||||
</a>
|
||||
<h3>Constructor Detail</h3>
|
||||
<a id="<init>(com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase,java.lang.String,java.util.ArrayList,java.util.ArrayList,long)">
|
||||
<a id="<init>(com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase,java.lang.String,java.util.ArrayList,java.util.ArrayList,java.util.List,java.util.List,long)">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockListLast">
|
||||
|
|
@ -333,6 +363,8 @@ public final <a href="https://developer.android.com/reference/java/lang/Str
|
|||
<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> drmSchemeType,
|
||||
<a href="https://developer.android.com/reference/java/util/ArrayList.html" title="class or interface in java.util" class="externalLink">ArrayList</a><<a href="../../../drm/DrmInitData.SchemeData.html" title="class in com.google.android.exoplayer2.drm" target="_top">DrmInitData.SchemeData</a>> drmSchemeDatas,
|
||||
<a href="https://developer.android.com/reference/java/util/ArrayList.html" title="class or interface in java.util" class="externalLink">ArrayList</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> inbandEventStreams,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> essentialProperties,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> supplementalProperties,
|
||||
long revisionId)</pre>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
|
|||
|
|
@ -181,7 +181,7 @@ implements <a href="../DashSegmentIndex.html" title="interface in com.google.and
|
|||
<!-- -->
|
||||
</a>
|
||||
<h3>Fields inherited from class com.google.android.exoplayer2.source.dash.manifest.<a href="Representation.html" title="class in com.google.android.exoplayer2.source.dash.manifest">Representation</a></h3>
|
||||
<code><a href="Representation.html#baseUrls">baseUrls</a>, <a href="Representation.html#format">format</a>, <a href="Representation.html#inbandEventStreams">inbandEventStreams</a>, <a href="Representation.html#presentationTimeOffsetUs">presentationTimeOffsetUs</a>, <a href="Representation.html#REVISION_ID_DEFAULT">REVISION_ID_DEFAULT</a>, <a href="Representation.html#revisionId">revisionId</a></code></li>
|
||||
<code><a href="Representation.html#baseUrls">baseUrls</a>, <a href="Representation.html#essentialProperties">essentialProperties</a>, <a href="Representation.html#format">format</a>, <a href="Representation.html#inbandEventStreams">inbandEventStreams</a>, <a href="Representation.html#presentationTimeOffsetUs">presentationTimeOffsetUs</a>, <a href="Representation.html#REVISION_ID_DEFAULT">REVISION_ID_DEFAULT</a>, <a href="Representation.html#revisionId">revisionId</a>, <a href="Representation.html#supplementalProperties">supplementalProperties</a></code></li>
|
||||
</ul>
|
||||
<ul class="blockList">
|
||||
<li class="blockList"><a id="fields.inherited.from.class.com.google.android.exoplayer2.source.dash.DashSegmentIndex">
|
||||
|
|
@ -207,11 +207,13 @@ implements <a href="../DashSegmentIndex.html" title="interface in com.google.and
|
|||
<th class="colLast" scope="col">Description</th>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase.MultiSegmentBase,java.util.List)">MultiSegmentRepresentation</a></span>​(long revisionId,
|
||||
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase.MultiSegmentBase,java.util.List,java.util.List,java.util.List)">MultiSegmentRepresentation</a></span>​(long revisionId,
|
||||
<a href="../../../Format.html" title="class in com.google.android.exoplayer2">Format</a> format,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="BaseUrl.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">BaseUrl</a>> baseUrls,
|
||||
<a href="SegmentBase.MultiSegmentBase.html" title="class in com.google.android.exoplayer2.source.dash.manifest">SegmentBase.MultiSegmentBase</a> segmentBase,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> inbandEventStreams)</code></th>
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> inbandEventStreams,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> essentialProperties,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> supplementalProperties)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Creates the multi-segment Representation.</div>
|
||||
</td>
|
||||
|
|
@ -338,7 +340,7 @@ implements <a href="../DashSegmentIndex.html" title="interface in com.google.and
|
|||
<!-- -->
|
||||
</a>
|
||||
<h3>Methods inherited from class com.google.android.exoplayer2.source.dash.manifest.<a href="Representation.html" title="class in com.google.android.exoplayer2.source.dash.manifest">Representation</a></h3>
|
||||
<code><a href="Representation.html#getInitializationUri()">getInitializationUri</a>, <a href="Representation.html#newInstance(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase)">newInstance</a>, <a href="Representation.html#newInstance(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase,java.util.List)">newInstance</a>, <a href="Representation.html#newInstance(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase,java.util.List,java.lang.String)">newInstance</a></code></li>
|
||||
<code><a href="Representation.html#getInitializationUri()">getInitializationUri</a>, <a href="Representation.html#newInstance(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase)">newInstance</a>, <a href="Representation.html#newInstance(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase,java.util.List,java.util.List,java.util.List,java.lang.String)">newInstance</a></code></li>
|
||||
</ul>
|
||||
<ul class="blockList">
|
||||
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
|
||||
|
|
@ -363,7 +365,7 @@ implements <a href="../DashSegmentIndex.html" title="interface in com.google.and
|
|||
<!-- -->
|
||||
</a>
|
||||
<h3>Constructor Detail</h3>
|
||||
<a id="<init>(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase.MultiSegmentBase,java.util.List)">
|
||||
<a id="<init>(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase.MultiSegmentBase,java.util.List,java.util.List,java.util.List)">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockListLast">
|
||||
|
|
@ -374,7 +376,9 @@ implements <a href="../DashSegmentIndex.html" title="interface in com.google.and
|
|||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="BaseUrl.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">BaseUrl</a>> baseUrls,
|
||||
<a href="SegmentBase.MultiSegmentBase.html" title="class in com.google.android.exoplayer2.source.dash.manifest">SegmentBase.MultiSegmentBase</a> segmentBase,
|
||||
@Nullable
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> inbandEventStreams)</pre>
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> inbandEventStreams,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> essentialProperties,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> supplementalProperties)</pre>
|
||||
<div class="block">Creates the multi-segment Representation.</div>
|
||||
<dl>
|
||||
<dt><span class="paramLabel">Parameters:</span></dt>
|
||||
|
|
@ -383,6 +387,8 @@ implements <a href="../DashSegmentIndex.html" title="interface in com.google.and
|
|||
<dd><code>baseUrls</code> - The base URLs of the representation.</dd>
|
||||
<dd><code>segmentBase</code> - The segment base underlying the representation.</dd>
|
||||
<dd><code>inbandEventStreams</code> - The in-band event streams in the representation. May be null.</dd>
|
||||
<dd><code>essentialProperties</code> - Essential properties in the representation. May be empty.</dd>
|
||||
<dd><code>supplementalProperties</code> - Supplemental properties in the representation. May be empty.</dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
|
|||
|
|
@ -198,7 +198,7 @@ extends <a href="Representation.html" title="class in com.google.android.exoplay
|
|||
<!-- -->
|
||||
</a>
|
||||
<h3>Fields inherited from class com.google.android.exoplayer2.source.dash.manifest.<a href="Representation.html" title="class in com.google.android.exoplayer2.source.dash.manifest">Representation</a></h3>
|
||||
<code><a href="Representation.html#baseUrls">baseUrls</a>, <a href="Representation.html#format">format</a>, <a href="Representation.html#inbandEventStreams">inbandEventStreams</a>, <a href="Representation.html#presentationTimeOffsetUs">presentationTimeOffsetUs</a>, <a href="Representation.html#REVISION_ID_DEFAULT">REVISION_ID_DEFAULT</a>, <a href="Representation.html#revisionId">revisionId</a></code></li>
|
||||
<code><a href="Representation.html#baseUrls">baseUrls</a>, <a href="Representation.html#essentialProperties">essentialProperties</a>, <a href="Representation.html#format">format</a>, <a href="Representation.html#inbandEventStreams">inbandEventStreams</a>, <a href="Representation.html#presentationTimeOffsetUs">presentationTimeOffsetUs</a>, <a href="Representation.html#REVISION_ID_DEFAULT">REVISION_ID_DEFAULT</a>, <a href="Representation.html#revisionId">revisionId</a>, <a href="Representation.html#supplementalProperties">supplementalProperties</a></code></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
@ -217,11 +217,13 @@ extends <a href="Representation.html" title="class in com.google.android.exoplay
|
|||
<th class="colLast" scope="col">Description</th>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase.SingleSegmentBase,java.util.List,java.lang.String,long)">SingleSegmentRepresentation</a></span>​(long revisionId,
|
||||
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase.SingleSegmentBase,java.util.List,java.util.List,java.util.List,java.lang.String,long)">SingleSegmentRepresentation</a></span>​(long revisionId,
|
||||
<a href="../../../Format.html" title="class in com.google.android.exoplayer2">Format</a> format,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="BaseUrl.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">BaseUrl</a>> baseUrls,
|
||||
<a href="SegmentBase.SingleSegmentBase.html" title="class in com.google.android.exoplayer2.source.dash.manifest">SegmentBase.SingleSegmentBase</a> segmentBase,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> inbandEventStreams,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> essentialProperties,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> supplementalProperties,
|
||||
<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> cacheKey,
|
||||
long contentLength)</code></th>
|
||||
<td class="colLast"> </td>
|
||||
|
|
@ -286,7 +288,7 @@ extends <a href="Representation.html" title="class in com.google.android.exoplay
|
|||
<!-- -->
|
||||
</a>
|
||||
<h3>Methods inherited from class com.google.android.exoplayer2.source.dash.manifest.<a href="Representation.html" title="class in com.google.android.exoplayer2.source.dash.manifest">Representation</a></h3>
|
||||
<code><a href="Representation.html#getInitializationUri()">getInitializationUri</a>, <a href="Representation.html#newInstance(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase)">newInstance</a>, <a href="Representation.html#newInstance(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase,java.util.List)">newInstance</a>, <a href="Representation.html#newInstance(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase,java.util.List,java.lang.String)">newInstance</a></code></li>
|
||||
<code><a href="Representation.html#getInitializationUri()">getInitializationUri</a>, <a href="Representation.html#newInstance(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase)">newInstance</a>, <a href="Representation.html#newInstance(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase,java.util.List,java.util.List,java.util.List,java.lang.String)">newInstance</a></code></li>
|
||||
</ul>
|
||||
<ul class="blockList">
|
||||
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
|
||||
|
|
@ -341,7 +343,7 @@ extends <a href="Representation.html" title="class in com.google.android.exoplay
|
|||
<!-- -->
|
||||
</a>
|
||||
<h3>Constructor Detail</h3>
|
||||
<a id="<init>(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase.SingleSegmentBase,java.util.List,java.lang.String,long)">
|
||||
<a id="<init>(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase.SingleSegmentBase,java.util.List,java.util.List,java.util.List,java.lang.String,long)">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockListLast">
|
||||
|
|
@ -353,6 +355,8 @@ extends <a href="Representation.html" title="class in com.google.android.exoplay
|
|||
<a href="SegmentBase.SingleSegmentBase.html" title="class in com.google.android.exoplayer2.source.dash.manifest">SegmentBase.SingleSegmentBase</a> segmentBase,
|
||||
@Nullable
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> inbandEventStreams,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> essentialProperties,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> supplementalProperties,
|
||||
@Nullable
|
||||
<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> cacheKey,
|
||||
long contentLength)</pre>
|
||||
|
|
@ -363,6 +367,8 @@ extends <a href="Representation.html" title="class in com.google.android.exoplay
|
|||
<dd><code>baseUrls</code> - The base urls of the representation.</dd>
|
||||
<dd><code>segmentBase</code> - The segment base underlying the representation.</dd>
|
||||
<dd><code>inbandEventStreams</code> - The in-band event streams in the representation. May be null.</dd>
|
||||
<dd><code>essentialProperties</code> - Essential properties in the representation. May be empty.</dd>
|
||||
<dd><code>supplementalProperties</code> - Supplemental properties in the representation. May be empty.</dd>
|
||||
<dd><code>cacheKey</code> - An optional key to be returned from <a href="#getCacheKey()"><code>getCacheKey()</code></a>, or null.</dd>
|
||||
<dd><code>contentLength</code> - The content length, or <a href="../../../C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a> if unknown.</dd>
|
||||
</dl>
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
catch(err) {
|
||||
}
|
||||
//-->
|
||||
var data = {"i0":6,"i1":6,"i2":6,"i3":10,"i4":9,"i5":9,"i6":9};
|
||||
var data = {"i0":6,"i1":6,"i2":6,"i3":10,"i4":9,"i5":9};
|
||||
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"]};
|
||||
var altColor = "altColor";
|
||||
var rowColor = "rowColor";
|
||||
|
|
@ -196,40 +196,54 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html"
|
|||
</td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#essentialProperties">essentialProperties</a></span></code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Essential properties in the representation.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<td class="colFirst"><code><a href="../../../Format.html" title="class in com.google.android.exoplayer2">Format</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#format">format</a></span></code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">The format of the representation.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#inbandEventStreams">inbandEventStreams</a></span></code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">The in-band event streams in the representation.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<tr class="altColor">
|
||||
<td class="colFirst"><code>long</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#presentationTimeOffsetUs">presentationTimeOffsetUs</a></span></code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">The offset of the presentation timestamps in the media stream relative to media time.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<td class="colFirst"><code>static long</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#REVISION_ID_DEFAULT">REVISION_ID_DEFAULT</a></span></code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">A default value for <a href="#revisionId"><code>revisionId</code></a>.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<tr class="altColor">
|
||||
<td class="colFirst"><code>long</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#revisionId">revisionId</a></span></code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Identifies the revision of the media contained within the representation.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#supplementalProperties">supplementalProperties</a></span></code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Supplemental properties in the adaptation set.</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
@ -290,22 +304,13 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html"
|
|||
</tr>
|
||||
<tr id="i5" class="rowColor">
|
||||
<td class="colFirst"><code>static <a href="Representation.html" title="class in com.google.android.exoplayer2.source.dash.manifest">Representation</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#newInstance(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase,java.util.List)">newInstance</a></span>​(long revisionId,
|
||||
<a href="../../../Format.html" title="class in com.google.android.exoplayer2">Format</a> format,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="BaseUrl.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">BaseUrl</a>> baseUrls,
|
||||
<a href="SegmentBase.html" title="class in com.google.android.exoplayer2.source.dash.manifest">SegmentBase</a> segmentBase,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> inbandEventStreams)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Constructs a new instance.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i6" class="altColor">
|
||||
<td class="colFirst"><code>static <a href="Representation.html" title="class in com.google.android.exoplayer2.source.dash.manifest">Representation</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#newInstance(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase,java.util.List,java.lang.String)">newInstance</a></span>​(long revisionId,
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#newInstance(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase,java.util.List,java.util.List,java.util.List,java.lang.String)">newInstance</a></span>​(long revisionId,
|
||||
<a href="../../../Format.html" title="class in com.google.android.exoplayer2">Format</a> format,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="BaseUrl.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">BaseUrl</a>> baseUrls,
|
||||
<a href="SegmentBase.html" title="class in com.google.android.exoplayer2.source.dash.manifest">SegmentBase</a> segmentBase,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> inbandEventStreams,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> essentialProperties,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> supplementalProperties,
|
||||
<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> cacheKey)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Constructs a new instance.</div>
|
||||
|
|
@ -395,13 +400,33 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html"
|
|||
<a id="inbandEventStreams">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockListLast">
|
||||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>inbandEventStreams</h4>
|
||||
<pre>public final <a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> inbandEventStreams</pre>
|
||||
<div class="block">The in-band event streams in the representation. May be empty.</div>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="essentialProperties">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>essentialProperties</h4>
|
||||
<pre>public final <a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> essentialProperties</pre>
|
||||
<div class="block">Essential properties in the representation. May be empty.</div>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="supplementalProperties">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockListLast">
|
||||
<li class="blockList">
|
||||
<h4>supplementalProperties</h4>
|
||||
<pre>public final <a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> supplementalProperties</pre>
|
||||
<div class="block">Supplemental properties in the adaptation set. May be empty.</div>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
|
@ -434,32 +459,7 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html"
|
|||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="newInstance(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase,java.util.List)">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>newInstance</h4>
|
||||
<pre class="methodSignature">public static <a href="Representation.html" title="class in com.google.android.exoplayer2.source.dash.manifest">Representation</a> newInstance​(long revisionId,
|
||||
<a href="../../../Format.html" title="class in com.google.android.exoplayer2">Format</a> format,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="BaseUrl.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">BaseUrl</a>> baseUrls,
|
||||
<a href="SegmentBase.html" title="class in com.google.android.exoplayer2.source.dash.manifest">SegmentBase</a> segmentBase,
|
||||
@Nullable
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> inbandEventStreams)</pre>
|
||||
<div class="block">Constructs a new instance.</div>
|
||||
<dl>
|
||||
<dt><span class="paramLabel">Parameters:</span></dt>
|
||||
<dd><code>revisionId</code> - Identifies the revision of the content.</dd>
|
||||
<dd><code>format</code> - The format of the representation.</dd>
|
||||
<dd><code>baseUrls</code> - The list of base URLs of the representation.</dd>
|
||||
<dd><code>segmentBase</code> - A segment base element for the representation.</dd>
|
||||
<dd><code>inbandEventStreams</code> - The in-band event streams in the representation. May be null.</dd>
|
||||
<dt><span class="returnLabel">Returns:</span></dt>
|
||||
<dd>The constructed instance.</dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="newInstance(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase,java.util.List,java.lang.String)">
|
||||
<a id="newInstance(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase,java.util.List,java.util.List,java.util.List,java.lang.String)">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockList">
|
||||
|
|
@ -471,6 +471,8 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html"
|
|||
<a href="SegmentBase.html" title="class in com.google.android.exoplayer2.source.dash.manifest">SegmentBase</a> segmentBase,
|
||||
@Nullable
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> inbandEventStreams,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> essentialProperties,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="Descriptor.html" title="class in com.google.android.exoplayer2.source.dash.manifest" target="_top">Descriptor</a>> supplementalProperties,
|
||||
@Nullable
|
||||
<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> cacheKey)</pre>
|
||||
<div class="block">Constructs a new instance.</div>
|
||||
|
|
@ -481,6 +483,8 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html"
|
|||
<dd><code>baseUrls</code> - The list of base URLs of the representation.</dd>
|
||||
<dd><code>segmentBase</code> - A segment base element for the representation.</dd>
|
||||
<dd><code>inbandEventStreams</code> - The in-band event streams in the representation. May be null.</dd>
|
||||
<dd><code>essentialProperties</code> - Essential properties in the representation. May be empty.</dd>
|
||||
<dd><code>supplementalProperties</code> - Supplemental properties in the representation. May be empty.</dd>
|
||||
<dd><code>cacheKey</code> - An optional key to be returned from <a href="#getCacheKey()"><code>getCacheKey()</code></a>, or null. This
|
||||
parameter is ignored if <code>segmentBase</code> consists of multiple segments.</dd>
|
||||
<dt><span class="returnLabel">Returns:</span></dt>
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
catch(err) {
|
||||
}
|
||||
//-->
|
||||
var data = {"i0":42,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":42,"i15":42,"i16":10};
|
||||
var data = {"i0":42,"i1":10,"i2":10,"i3":10,"i4":10,"i5":42,"i6":42,"i7":10,"i8":42,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":42,"i15":42,"i16":10};
|
||||
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
|
||||
var altColor = "altColor";
|
||||
var rowColor = "rowColor";
|
||||
|
|
@ -250,14 +250,14 @@ implements <a href="../MediaSourceFactory.html" title="interface in com.google.a
|
|||
<td class="colFirst"><code><a href="HlsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.hls">HlsMediaSource.Factory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">setDrmHttpDataSourceFactory</a></span>​(<a href="../../upstream/HttpDataSource.Factory.html" title="interface in com.google.android.exoplayer2.upstream">HttpDataSource.Factory</a> drmHttpDataSourceFactory)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the <a href="../../upstream/HttpDataSource.Factory.html" title="interface in com.google.android.exoplayer2.upstream"><code>HttpDataSource.Factory</code></a> to be used for creating <a href="../../drm/HttpMediaDrmCallback.html" title="class in com.google.android.exoplayer2.drm"><code>HttpMediaDrmCallbacks</code></a> to execute key and provisioning requests over HTTP.</div>
|
||||
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i6" class="altColor">
|
||||
<td class="colFirst"><code><a href="HlsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.hls">HlsMediaSource.Factory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">setDrmSessionManager</a></span>​(<a href="../../drm/DrmSessionManager.html" title="interface in com.google.android.exoplayer2.drm">DrmSessionManager</a> drmSessionManager)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the <a href="../../drm/DrmSessionManager.html" title="interface in com.google.android.exoplayer2.drm"><code>DrmSessionManager</code></a> to use for all media items regardless of their <a href="../../MediaItem.DrmConfiguration.html" title="class in com.google.android.exoplayer2"><code>MediaItem.DrmConfiguration</code></a>.</div>
|
||||
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i7" class="rowColor">
|
||||
|
|
@ -272,7 +272,7 @@ implements <a href="../MediaSourceFactory.html" title="interface in com.google.a
|
|||
<td class="colFirst"><code><a href="HlsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.hls">HlsMediaSource.Factory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setDrmUserAgent(java.lang.String)">setDrmUserAgent</a></span>​(<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> userAgent)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the optional user agent to be used for DRM requests.</div>
|
||||
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i9" class="rowColor">
|
||||
|
|
@ -601,8 +601,10 @@ public <a href="HlsMediaSource.Factory.html" title="class in com.google.and
|
|||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>setDrmSessionManager</h4>
|
||||
<pre class="methodSignature">public <a href="HlsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.hls">HlsMediaSource.Factory</a> setDrmSessionManager​(@Nullable
|
||||
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
|
||||
public <a href="HlsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.hls">HlsMediaSource.Factory</a> setDrmSessionManager​(@Nullable
|
||||
<a href="../../drm/DrmSessionManager.html" title="interface in com.google.android.exoplayer2.drm">DrmSessionManager</a> drmSessionManager)</pre>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../MediaSourceFactory.html#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">MediaSourceFactory</a></code></span></div>
|
||||
<div class="block">Sets the <a href="../../drm/DrmSessionManager.html" title="interface in com.google.android.exoplayer2.drm"><code>DrmSessionManager</code></a> to use for all media items regardless of their <a href="../../MediaItem.DrmConfiguration.html" title="class in com.google.android.exoplayer2"><code>MediaItem.DrmConfiguration</code></a>.
|
||||
|
||||
|
|
@ -624,8 +626,10 @@ public <a href="HlsMediaSource.Factory.html" title="class in com.google.and
|
|||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>setDrmHttpDataSourceFactory</h4>
|
||||
<pre class="methodSignature">public <a href="HlsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.hls">HlsMediaSource.Factory</a> setDrmHttpDataSourceFactory​(@Nullable
|
||||
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
|
||||
public <a href="HlsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.hls">HlsMediaSource.Factory</a> setDrmHttpDataSourceFactory​(@Nullable
|
||||
<a href="../../upstream/HttpDataSource.Factory.html" title="interface in com.google.android.exoplayer2.upstream">HttpDataSource.Factory</a> drmHttpDataSourceFactory)</pre>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../MediaSourceFactory.html#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">MediaSourceFactory</a></code></span></div>
|
||||
<div class="block">Sets the <a href="../../upstream/HttpDataSource.Factory.html" title="interface in com.google.android.exoplayer2.upstream"><code>HttpDataSource.Factory</code></a> to be used for creating <a href="../../drm/HttpMediaDrmCallback.html" title="class in com.google.android.exoplayer2.drm"><code>HttpMediaDrmCallbacks</code></a> to execute key and provisioning requests over HTTP.
|
||||
|
||||
|
|
@ -646,8 +650,10 @@ public <a href="HlsMediaSource.Factory.html" title="class in com.google.and
|
|||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>setDrmUserAgent</h4>
|
||||
<pre class="methodSignature">public <a href="HlsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.hls">HlsMediaSource.Factory</a> setDrmUserAgent​(@Nullable
|
||||
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
|
||||
public <a href="HlsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.hls">HlsMediaSource.Factory</a> setDrmUserAgent​(@Nullable
|
||||
<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> userAgent)</pre>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../MediaSourceFactory.html#setDrmUserAgent(java.lang.String)">MediaSourceFactory</a></code></span></div>
|
||||
<div class="block">Sets the optional user agent to be used for DRM requests.
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
catch(err) {
|
||||
}
|
||||
//-->
|
||||
var data = {"i0":42,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":42,"i14":42};
|
||||
var data = {"i0":42,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":42,"i7":42,"i8":10,"i9":42,"i10":10,"i11":10,"i12":10,"i13":42,"i14":42};
|
||||
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
|
||||
var altColor = "altColor";
|
||||
var rowColor = "rowColor";
|
||||
|
|
@ -261,14 +261,14 @@ implements <a href="../MediaSourceFactory.html" title="interface in com.google.a
|
|||
<td class="colFirst"><code><a href="SsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.smoothstreaming">SsMediaSource.Factory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">setDrmHttpDataSourceFactory</a></span>​(<a href="../../upstream/HttpDataSource.Factory.html" title="interface in com.google.android.exoplayer2.upstream">HttpDataSource.Factory</a> drmHttpDataSourceFactory)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the <a href="../../upstream/HttpDataSource.Factory.html" title="interface in com.google.android.exoplayer2.upstream"><code>HttpDataSource.Factory</code></a> to be used for creating <a href="../../drm/HttpMediaDrmCallback.html" title="class in com.google.android.exoplayer2.drm"><code>HttpMediaDrmCallbacks</code></a> to execute key and provisioning requests over HTTP.</div>
|
||||
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i7" class="rowColor">
|
||||
<td class="colFirst"><code><a href="SsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.smoothstreaming">SsMediaSource.Factory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">setDrmSessionManager</a></span>​(<a href="../../drm/DrmSessionManager.html" title="interface in com.google.android.exoplayer2.drm">DrmSessionManager</a> drmSessionManager)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the <a href="../../drm/DrmSessionManager.html" title="interface in com.google.android.exoplayer2.drm"><code>DrmSessionManager</code></a> to use for all media items regardless of their <a href="../../MediaItem.DrmConfiguration.html" title="class in com.google.android.exoplayer2"><code>MediaItem.DrmConfiguration</code></a>.</div>
|
||||
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i8" class="altColor">
|
||||
|
|
@ -283,7 +283,7 @@ implements <a href="../MediaSourceFactory.html" title="interface in com.google.a
|
|||
<td class="colFirst"><code><a href="SsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.smoothstreaming">SsMediaSource.Factory</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setDrmUserAgent(java.lang.String)">setDrmUserAgent</a></span>​(<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> userAgent)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Sets the optional user agent to be used for DRM requests.</div>
|
||||
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i10" class="altColor">
|
||||
|
|
@ -515,8 +515,10 @@ public <a href="SsMediaSource.Factory.html" title="class in com.google.andr
|
|||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>setDrmSessionManager</h4>
|
||||
<pre class="methodSignature">public <a href="SsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.smoothstreaming">SsMediaSource.Factory</a> setDrmSessionManager​(@Nullable
|
||||
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
|
||||
public <a href="SsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.smoothstreaming">SsMediaSource.Factory</a> setDrmSessionManager​(@Nullable
|
||||
<a href="../../drm/DrmSessionManager.html" title="interface in com.google.android.exoplayer2.drm">DrmSessionManager</a> drmSessionManager)</pre>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../MediaSourceFactory.html#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">MediaSourceFactory</a></code></span></div>
|
||||
<div class="block">Sets the <a href="../../drm/DrmSessionManager.html" title="interface in com.google.android.exoplayer2.drm"><code>DrmSessionManager</code></a> to use for all media items regardless of their <a href="../../MediaItem.DrmConfiguration.html" title="class in com.google.android.exoplayer2"><code>MediaItem.DrmConfiguration</code></a>.
|
||||
|
||||
|
|
@ -538,8 +540,10 @@ public <a href="SsMediaSource.Factory.html" title="class in com.google.andr
|
|||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>setDrmHttpDataSourceFactory</h4>
|
||||
<pre class="methodSignature">public <a href="SsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.smoothstreaming">SsMediaSource.Factory</a> setDrmHttpDataSourceFactory​(@Nullable
|
||||
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
|
||||
public <a href="SsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.smoothstreaming">SsMediaSource.Factory</a> setDrmHttpDataSourceFactory​(@Nullable
|
||||
<a href="../../upstream/HttpDataSource.Factory.html" title="interface in com.google.android.exoplayer2.upstream">HttpDataSource.Factory</a> drmHttpDataSourceFactory)</pre>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../MediaSourceFactory.html#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">MediaSourceFactory</a></code></span></div>
|
||||
<div class="block">Sets the <a href="../../upstream/HttpDataSource.Factory.html" title="interface in com.google.android.exoplayer2.upstream"><code>HttpDataSource.Factory</code></a> to be used for creating <a href="../../drm/HttpMediaDrmCallback.html" title="class in com.google.android.exoplayer2.drm"><code>HttpMediaDrmCallbacks</code></a> to execute key and provisioning requests over HTTP.
|
||||
|
||||
|
|
@ -560,8 +564,10 @@ public <a href="SsMediaSource.Factory.html" title="class in com.google.andr
|
|||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>setDrmUserAgent</h4>
|
||||
<pre class="methodSignature">public <a href="SsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.smoothstreaming">SsMediaSource.Factory</a> setDrmUserAgent​(@Nullable
|
||||
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
|
||||
public <a href="SsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.smoothstreaming">SsMediaSource.Factory</a> setDrmUserAgent​(@Nullable
|
||||
<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> userAgent)</pre>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../MediaSourceFactory.html#setDrmUserAgent(java.lang.String)">MediaSourceFactory</a></code></span></div>
|
||||
<div class="block">Sets the optional user agent to be used for DRM requests.
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
catch(err) {
|
||||
}
|
||||
//-->
|
||||
var data = {"i0":6,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":6,"i9":10,"i10":10,"i11":6,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10};
|
||||
var data = {"i0":6,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":6,"i9":10,"i10":10,"i11":10,"i12":10,"i13":6,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10};
|
||||
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"]};
|
||||
var altColor = "altColor";
|
||||
var rowColor = "rowColor";
|
||||
|
|
@ -289,22 +289,32 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html"
|
|||
</tr>
|
||||
<tr id="i9" class="rowColor">
|
||||
<td class="colFirst"><code>void</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getResponseHeaders_isEmptyWhileNotOpen()">getResponseHeaders_isEmptyWhileNotOpen</a></span>()</code></th>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getResponseHeaders_caseInsensitive()">getResponseHeaders_caseInsensitive</a></span>()</code></th>
|
||||
<td class="colLast"> </td>
|
||||
</tr>
|
||||
<tr id="i10" class="altColor">
|
||||
<td class="colFirst"><code>void</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getResponseHeaders_resourceNotFound_isEmptyWhileNotOpen()">getResponseHeaders_resourceNotFound_isEmptyWhileNotOpen</a></span>()</code></th>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getResponseHeaders_isEmptyWhileNotOpen()">getResponseHeaders_isEmptyWhileNotOpen</a></span>()</code></th>
|
||||
<td class="colLast"> </td>
|
||||
</tr>
|
||||
<tr id="i11" class="rowColor">
|
||||
<td class="colFirst"><code>void</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getResponseHeaders_noNullKeysOrValues()">getResponseHeaders_noNullKeysOrValues</a></span>()</code></th>
|
||||
<td class="colLast"> </td>
|
||||
</tr>
|
||||
<tr id="i12" class="altColor">
|
||||
<td class="colFirst"><code>void</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getResponseHeaders_resourceNotFound_isEmptyWhileNotOpen()">getResponseHeaders_resourceNotFound_isEmptyWhileNotOpen</a></span>()</code></th>
|
||||
<td class="colLast"> </td>
|
||||
</tr>
|
||||
<tr id="i13" class="rowColor">
|
||||
<td class="colFirst"><code>protected abstract <a href="https://guava.dev/releases/27.1-android/api/docs/com/google/common/collect/ImmutableList.html?is-external=true" title="class or interface in com.google.common.collect" class="externalLink">ImmutableList</a><<a href="DataSourceContractTest.TestResource.html" title="class in com.google.android.exoplayer2.testutil">DataSourceContractTest.TestResource</a>></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getTestResources()">getTestResources</a></span>()</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Returns <a href="DataSourceContractTest.TestResource.html" title="class in com.google.android.exoplayer2.testutil"><code>DataSourceContractTest.TestResource</code></a> instances.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i12" class="altColor">
|
||||
<tr id="i14" class="altColor">
|
||||
<td class="colFirst"><code>protected <a href="../upstream/DataSource.html" title="interface in com.google.android.exoplayer2.upstream">DataSource</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getTransferListenerDataSource()">getTransferListenerDataSource</a></span>()</code></th>
|
||||
<td class="colLast">
|
||||
|
|
@ -312,37 +322,37 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html"
|
|||
for the <a href="../upstream/DataSource.html" title="interface in com.google.android.exoplayer2.upstream"><code>DataSource</code></a> most recently created by <a href="#createDataSource()"><code>createDataSource()</code></a>.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i13" class="rowColor">
|
||||
<tr id="i15" class="rowColor">
|
||||
<td class="colFirst"><code>void</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getUri_resourceNotFound_returnsNullIfNotOpened()">getUri_resourceNotFound_returnsNullIfNotOpened</a></span>()</code></th>
|
||||
<td class="colLast"> </td>
|
||||
</tr>
|
||||
<tr id="i14" class="altColor">
|
||||
<tr id="i16" class="altColor">
|
||||
<td class="colFirst"><code>void</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getUri_returnsNonNullValueOnlyWhileOpen()">getUri_returnsNonNullValueOnlyWhileOpen</a></span>()</code></th>
|
||||
<td class="colLast"> </td>
|
||||
</tr>
|
||||
<tr id="i15" class="rowColor">
|
||||
<tr id="i17" class="rowColor">
|
||||
<td class="colFirst"><code>void</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#resourceNotFound()">resourceNotFound</a></span>()</code></th>
|
||||
<td class="colLast"> </td>
|
||||
</tr>
|
||||
<tr id="i16" class="altColor">
|
||||
<tr id="i18" class="altColor">
|
||||
<td class="colFirst"><code>void</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#resourceNotFound_transferListenerCallbacks()">resourceNotFound_transferListenerCallbacks</a></span>()</code></th>
|
||||
<td class="colLast"> </td>
|
||||
</tr>
|
||||
<tr id="i17" class="rowColor">
|
||||
<tr id="i19" class="rowColor">
|
||||
<td class="colFirst"><code>void</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#transferListenerCallbacks()">transferListenerCallbacks</a></span>()</code></th>
|
||||
<td class="colLast"> </td>
|
||||
</tr>
|
||||
<tr id="i18" class="altColor">
|
||||
<tr id="i20" class="altColor">
|
||||
<td class="colFirst"><code>void</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#unboundedDataSpec_readUntilEnd()">unboundedDataSpec_readUntilEnd</a></span>()</code></th>
|
||||
<td class="colLast"> </td>
|
||||
</tr>
|
||||
<tr id="i19" class="rowColor">
|
||||
<tr id="i21" class="rowColor">
|
||||
<td class="colFirst"><code>void</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#unboundedDataSpecWithGzipFlag_readUntilEnd()">unboundedDataSpecWithGzipFlag_readUntilEnd</a></span>()</code></th>
|
||||
<td class="colLast">
|
||||
|
|
@ -350,7 +360,7 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html"
|
|||
implementations, or correctly handled (i.e.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i20" class="altColor">
|
||||
<tr id="i22" class="altColor">
|
||||
<td class="colFirst"><code>protected boolean</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#unboundedReadsAreIndefinite()">unboundedReadsAreIndefinite</a></span>()</code></th>
|
||||
<td class="colLast">
|
||||
|
|
@ -688,6 +698,34 @@ protected <a href="../upstream/DataSource.html" title="interface in com.goo
|
|||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="getResponseHeaders_noNullKeysOrValues()">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>getResponseHeaders_noNullKeysOrValues</h4>
|
||||
<pre class="methodSignature">public void getResponseHeaders_noNullKeysOrValues()
|
||||
throws <a href="https://developer.android.com/reference/java/lang/Exception.html" title="class or interface in java.lang" class="externalLink" target="_top">Exception</a></pre>
|
||||
<dl>
|
||||
<dt><span class="throwsLabel">Throws:</span></dt>
|
||||
<dd><code><a href="https://developer.android.com/reference/java/lang/Exception.html" title="class or interface in java.lang" class="externalLink" target="_top">Exception</a></code></dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="getResponseHeaders_caseInsensitive()">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>getResponseHeaders_caseInsensitive</h4>
|
||||
<pre class="methodSignature">public void getResponseHeaders_caseInsensitive()
|
||||
throws <a href="https://developer.android.com/reference/java/lang/Exception.html" title="class or interface in java.lang" class="externalLink" target="_top">Exception</a></pre>
|
||||
<dl>
|
||||
<dt><span class="throwsLabel">Throws:</span></dt>
|
||||
<dd><code><a href="https://developer.android.com/reference/java/lang/Exception.html" title="class or interface in java.lang" class="externalLink" target="_top">Exception</a></code></dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="getResponseHeaders_isEmptyWhileNotOpen()">
|
||||
<!-- -->
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -248,7 +248,7 @@ extends <a href="../trackselection/DefaultTrackSelector.html" title="class in co
|
|||
<!-- -->
|
||||
</a>
|
||||
<h3>Methods inherited from class com.google.android.exoplayer2.trackselection.<a href="../trackselection/DefaultTrackSelector.html" title="class in com.google.android.exoplayer2.trackselection">DefaultTrackSelector</a></h3>
|
||||
<code><a href="../trackselection/DefaultTrackSelector.html#buildUponParameters()">buildUponParameters</a>, <a href="../trackselection/DefaultTrackSelector.html#getFormatLanguageScore(com.google.android.exoplayer2.Format,java.lang.String,boolean)">getFormatLanguageScore</a>, <a href="../trackselection/DefaultTrackSelector.html#getParameters()">getParameters</a>, <a href="../trackselection/DefaultTrackSelector.html#isSetParametersSupported()">isSetParametersSupported</a>, <a href="../trackselection/DefaultTrackSelector.html#isSupported(int,boolean)">isSupported</a>, <a href="../trackselection/DefaultTrackSelector.html#maybeApplyOverride(com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters,int,com.google.android.exoplayer2.trackselection.ExoTrackSelection.Definition)">maybeApplyOverride</a>, <a href="../trackselection/DefaultTrackSelector.html#normalizeUndeterminedLanguageToNull(java.lang.String)">normalizeUndeterminedLanguageToNull</a>, <a href="../trackselection/DefaultTrackSelector.html#selectAudioTrack(com.google.android.exoplayer2.source.TrackGroupArray,int%5B%5D%5B%5D,int,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters,boolean)">selectAudioTrack</a>, <a href="../trackselection/DefaultTrackSelector.html#selectOtherTrack(int,com.google.android.exoplayer2.source.TrackGroupArray,int%5B%5D%5B%5D,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters)">selectOtherTrack</a>, <a href="../trackselection/DefaultTrackSelector.html#selectTextTrack(com.google.android.exoplayer2.source.TrackGroupArray,int%5B%5D%5B%5D,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters,java.lang.String)">selectTextTrack</a>, <a href="../trackselection/DefaultTrackSelector.html#selectTracks(com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo,int%5B%5D%5B%5D%5B%5D,int%5B%5D,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.Timeline)">selectTracks</a>, <a href="../trackselection/DefaultTrackSelector.html#selectVideoTrack(com.google.android.exoplayer2.source.TrackGroupArray,int%5B%5D%5B%5D,int,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters,boolean)">selectVideoTrack</a>, <a href="../trackselection/DefaultTrackSelector.html#setParameters(com.google.android.exoplayer2.trackselection.DefaultTrackSelector.ParametersBuilder)">setParameters</a>, <a href="../trackselection/DefaultTrackSelector.html#setParameters(com.google.android.exoplayer2.trackselection.TrackSelectionParameters)">setParameters</a></code></li>
|
||||
<code><a href="../trackselection/DefaultTrackSelector.html#buildUponParameters()">buildUponParameters</a>, <a href="../trackselection/DefaultTrackSelector.html#getFormatLanguageScore(com.google.android.exoplayer2.Format,java.lang.String,boolean)">getFormatLanguageScore</a>, <a href="../trackselection/DefaultTrackSelector.html#getParameters()">getParameters</a>, <a href="../trackselection/DefaultTrackSelector.html#isSetParametersSupported()">isSetParametersSupported</a>, <a href="../trackselection/DefaultTrackSelector.html#isSupported(int,boolean)">isSupported</a>, <a href="../trackselection/DefaultTrackSelector.html#normalizeUndeterminedLanguageToNull(java.lang.String)">normalizeUndeterminedLanguageToNull</a>, <a href="../trackselection/DefaultTrackSelector.html#selectAudioTrack(com.google.android.exoplayer2.source.TrackGroupArray,int%5B%5D%5B%5D,int,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters,boolean)">selectAudioTrack</a>, <a href="../trackselection/DefaultTrackSelector.html#selectOtherTrack(int,com.google.android.exoplayer2.source.TrackGroupArray,int%5B%5D%5B%5D,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters)">selectOtherTrack</a>, <a href="../trackselection/DefaultTrackSelector.html#selectTextTrack(com.google.android.exoplayer2.source.TrackGroupArray,int%5B%5D%5B%5D,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters,java.lang.String)">selectTextTrack</a>, <a href="../trackselection/DefaultTrackSelector.html#selectTracks(com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo,int%5B%5D%5B%5D%5B%5D,int%5B%5D,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.Timeline)">selectTracks</a>, <a href="../trackselection/DefaultTrackSelector.html#selectVideoTrack(com.google.android.exoplayer2.source.TrackGroupArray,int%5B%5D%5B%5D,int,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters,boolean)">selectVideoTrack</a>, <a href="../trackselection/DefaultTrackSelector.html#setParameters(com.google.android.exoplayer2.trackselection.DefaultTrackSelector.ParametersBuilder)">setParameters</a>, <a href="../trackselection/DefaultTrackSelector.html#setParameters(com.google.android.exoplayer2.trackselection.TrackSelectionParameters)">setParameters</a></code></li>
|
||||
</ul>
|
||||
<ul class="blockList">
|
||||
<li class="blockList"><a id="methods.inherited.from.class.com.google.android.exoplayer2.trackselection.MappingTrackSelector">
|
||||
|
|
|
|||
|
|
@ -730,7 +730,7 @@ extends <a href="../BasePlayer.html" title="class in com.google.android.exoplaye
|
|||
<td class="colFirst"><code>void</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#stop()">stop</a></span>()</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Stops playback without resetting the player.</div>
|
||||
<div class="block">Stops playback without resetting the playlist.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i69" class="rowColor">
|
||||
|
|
@ -902,7 +902,10 @@ public @com.google.android.exoplayer2.Player.PlaybackSuppressionReason int&
|
|||
<h4>prepare</h4>
|
||||
<pre class="methodSignature">public void prepare()</pre>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../Player.html#prepare()">Player</a></code></span></div>
|
||||
<div class="block">Prepares the player.</div>
|
||||
<div class="block">Prepares the player.
|
||||
|
||||
<p>This will move the player out of <a href="../Player.html#STATE_IDLE"><code>idle state</code></a> and the player will start
|
||||
loading media and acquire resources needed for playback.</div>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="setMediaItems(java.util.List,boolean)">
|
||||
|
|
@ -1254,12 +1257,13 @@ public @com.google.android.exoplayer2.Player.PlaybackSuppressionReason int&
|
|||
<h4>stop</h4>
|
||||
<pre class="methodSignature">public void stop()</pre>
|
||||
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../Player.html#stop()">Player</a></code></span></div>
|
||||
<div class="block">Stops playback without resetting the player. Use <a href="../Player.html#pause()"><code>Player.pause()</code></a> rather than this method if
|
||||
<div class="block">Stops playback without resetting the playlist. Use <a href="../Player.html#pause()"><code>Player.pause()</code></a> rather than this method if
|
||||
the intention is to pause playback.
|
||||
|
||||
<p>Calling this method will cause the playback state to transition to <a href="../Player.html#STATE_IDLE"><code>Player.STATE_IDLE</code></a>. The
|
||||
player instance can still be used, and <a href="../Player.html#release()"><code>Player.release()</code></a> must still be called on the player if
|
||||
it's no longer required.
|
||||
<p>Calling this method will cause the playback state to transition to <a href="../Player.html#STATE_IDLE"><code>Player.STATE_IDLE</code></a> and
|
||||
the player will release the loaded media and resources required for playback. The player
|
||||
instance can still be used by calling <a href="../Player.html#prepare()"><code>Player.prepare()</code></a> again, and <a href="../Player.html#release()"><code>Player.release()</code></a> must
|
||||
still be called on the player if it's no longer required.
|
||||
|
||||
<p>Calling this method does not clear the playlist, reset the playback position or the playback
|
||||
error.</div>
|
||||
|
|
|
|||
|
|
@ -25,8 +25,8 @@
|
|||
catch(err) {
|
||||
}
|
||||
//-->
|
||||
var data = {"i0":10,"i1":10,"i2":9,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10};
|
||||
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
|
||||
var data = {"i0":10,"i1":10,"i2":9,"i3":10,"i4":42,"i5":10,"i6":42,"i7":10};
|
||||
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
|
||||
var altColor = "altColor";
|
||||
var rowColor = "rowColor";
|
||||
var tableTab = "tableTab";
|
||||
|
|
@ -310,7 +310,7 @@ implements <a href="../Bundleable.html" title="interface in com.google.android.e
|
|||
</a>
|
||||
<h3>Method Summary</h3>
|
||||
<table class="memberSummary">
|
||||
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
|
||||
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span><span id="t6" class="tableTab"><span><a href="javascript:show(32);">Deprecated Methods</a></span><span class="tabEnd"> </span></span></caption>
|
||||
<tr>
|
||||
<th class="colFirst" scope="col">Modifier and Type</th>
|
||||
<th class="colSecond" scope="col">Method</th>
|
||||
|
|
@ -347,7 +347,9 @@ implements <a href="../Bundleable.html" title="interface in com.google.android.e
|
|||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getSelectionOverride(int,com.google.android.exoplayer2.source.TrackGroupArray)">getSelectionOverride</a></span>​(int rendererIndex,
|
||||
<a href="../source/TrackGroupArray.html" title="class in com.google.android.exoplayer2.source">TrackGroupArray</a> groups)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Returns the override for the specified renderer and <a href="../source/TrackGroupArray.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroupArray</code></a>.</div>
|
||||
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
|
||||
<div class="deprecationComment">Only works to retrieve the overrides set with the deprecated <a href="DefaultTrackSelector.ParametersBuilder.html#setSelectionOverride(int,com.google.android.exoplayer2.source.TrackGroupArray,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride)"><code>DefaultTrackSelector.ParametersBuilder.setSelectionOverride(int, TrackGroupArray, SelectionOverride)</code></a>.</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i5" class="rowColor">
|
||||
|
|
@ -360,7 +362,9 @@ implements <a href="../Bundleable.html" title="interface in com.google.android.e
|
|||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#hasSelectionOverride(int,com.google.android.exoplayer2.source.TrackGroupArray)">hasSelectionOverride</a></span>​(int rendererIndex,
|
||||
<a href="../source/TrackGroupArray.html" title="class in com.google.android.exoplayer2.source">TrackGroupArray</a> groups)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Returns whether there is an override for the specified renderer and <a href="../source/TrackGroupArray.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroupArray</code></a>.</div>
|
||||
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
|
||||
<div class="deprecationComment">Only works to retrieve the overrides set with the deprecated <a href="DefaultTrackSelector.ParametersBuilder.html#setSelectionOverride(int,com.google.android.exoplayer2.source.TrackGroupArray,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride)"><code>DefaultTrackSelector.ParametersBuilder.setSelectionOverride(int, TrackGroupArray, SelectionOverride)</code></a>.</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i7" class="rowColor">
|
||||
|
|
@ -610,8 +614,13 @@ public final @com.google.android.exoplayer2.C.SelectionFlags int disabledTe
|
|||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>hasSelectionOverride</h4>
|
||||
<pre class="methodSignature">public final boolean hasSelectionOverride​(int rendererIndex,
|
||||
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
|
||||
public final boolean hasSelectionOverride​(int rendererIndex,
|
||||
<a href="../source/TrackGroupArray.html" title="class in com.google.android.exoplayer2.source">TrackGroupArray</a> groups)</pre>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
|
||||
<div class="deprecationComment">Only works to retrieve the overrides set with the deprecated <a href="DefaultTrackSelector.ParametersBuilder.html#setSelectionOverride(int,com.google.android.exoplayer2.source.TrackGroupArray,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride)"><code>DefaultTrackSelector.ParametersBuilder.setSelectionOverride(int, TrackGroupArray, SelectionOverride)</code></a>. Use
|
||||
<a href="TrackSelectionParameters.html#trackSelectionOverrides"><code>TrackSelectionParameters.trackSelectionOverrides</code></a> instead.</div>
|
||||
</div>
|
||||
<div class="block">Returns whether there is an override for the specified renderer and <a href="../source/TrackGroupArray.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroupArray</code></a>.</div>
|
||||
<dl>
|
||||
<dt><span class="paramLabel">Parameters:</span></dt>
|
||||
|
|
@ -628,9 +637,14 @@ public final @com.google.android.exoplayer2.C.SelectionFlags int disabledTe
|
|||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>getSelectionOverride</h4>
|
||||
<pre class="methodSignature">@Nullable
|
||||
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
|
||||
@Nullable
|
||||
public final <a href="DefaultTrackSelector.SelectionOverride.html" title="class in com.google.android.exoplayer2.trackselection">DefaultTrackSelector.SelectionOverride</a> getSelectionOverride​(int rendererIndex,
|
||||
<a href="../source/TrackGroupArray.html" title="class in com.google.android.exoplayer2.source">TrackGroupArray</a> groups)</pre>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
|
||||
<div class="deprecationComment">Only works to retrieve the overrides set with the deprecated <a href="DefaultTrackSelector.ParametersBuilder.html#setSelectionOverride(int,com.google.android.exoplayer2.source.TrackGroupArray,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride)"><code>DefaultTrackSelector.ParametersBuilder.setSelectionOverride(int, TrackGroupArray, SelectionOverride)</code></a>. Use
|
||||
<a href="TrackSelectionParameters.html#trackSelectionOverrides"><code>TrackSelectionParameters.trackSelectionOverrides</code></a> instead.</div>
|
||||
</div>
|
||||
<div class="block">Returns the override for the specified renderer and <a href="../source/TrackGroupArray.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroupArray</code></a>.</div>
|
||||
<dl>
|
||||
<dt><span class="paramLabel">Parameters:</span></dt>
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
catch(err) {
|
||||
}
|
||||
//-->
|
||||
var data = {"i0":10,"i1":9,"i2":10,"i3":10,"i4":9,"i5":10,"i6":9,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10};
|
||||
var data = {"i0":10,"i1":9,"i2":10,"i3":10,"i4":9,"i5":9,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10};
|
||||
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
|
||||
var altColor = "altColor";
|
||||
var rowColor = "rowColor";
|
||||
|
|
@ -145,111 +145,34 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<hr>
|
||||
<pre>public class <span class="typeNameLabel">DefaultTrackSelector</span>
|
||||
extends <a href="MappingTrackSelector.html" title="class in com.google.android.exoplayer2.trackselection">MappingTrackSelector</a></pre>
|
||||
<div class="block">A default <a href="TrackSelector.html" title="class in com.google.android.exoplayer2.trackselection"><code>TrackSelector</code></a> suitable for most use cases. Track selections are made according
|
||||
to configurable <a href="DefaultTrackSelector.Parameters.html" title="class in com.google.android.exoplayer2.trackselection"><code>DefaultTrackSelector.Parameters</code></a>, which can be set by calling <a href="../Player.html#setTrackSelectionParameters(com.google.android.exoplayer2.trackselection.TrackSelectionParameters)"><code>Player.setTrackSelectionParameters(com.google.android.exoplayer2.trackselection.TrackSelectionParameters)</code></a>.
|
||||
<div class="block">A default <a href="TrackSelector.html" title="class in com.google.android.exoplayer2.trackselection"><code>TrackSelector</code></a> suitable for most use cases.
|
||||
|
||||
<h2>Modifying parameters</h2>
|
||||
|
||||
To modify only some aspects of the parameters currently used by a selector, it's possible to
|
||||
obtain a <a href="DefaultTrackSelector.ParametersBuilder.html" title="class in com.google.android.exoplayer2.trackselection"><code>DefaultTrackSelector.ParametersBuilder</code></a> initialized with the current <a href="DefaultTrackSelector.Parameters.html" title="class in com.google.android.exoplayer2.trackselection"><code>DefaultTrackSelector.Parameters</code></a>. The desired
|
||||
modifications can be made on the builder, and the resulting <a href="DefaultTrackSelector.Parameters.html" title="class in com.google.android.exoplayer2.trackselection"><code>DefaultTrackSelector.Parameters</code></a> can then be built
|
||||
and set on the selector. For example the following code modifies the parameters to restrict video
|
||||
track selections to SD, and to select a German audio track if there is one:
|
||||
|
||||
<pre><code>
|
||||
// Build on the current parameters.
|
||||
TrackSelectionParameters currentParameters = player.getTrackSelectionParameters();
|
||||
// Build the resulting parameters.
|
||||
TrackSelectionParameters newParameters = currentParameters
|
||||
.buildUpon()
|
||||
.setMaxVideoSizeSd()
|
||||
.setPreferredAudioLanguage("deu")
|
||||
.build();
|
||||
// Set the new parameters.
|
||||
player.setTrackSelectionParameters(newParameters);
|
||||
</code></pre>
|
||||
|
||||
Convenience methods and chaining allow this to be written more concisely as:
|
||||
Track selection parameters should be modified by obtaining a <a href="TrackSelectionParameters.Builder.html" title="class in com.google.android.exoplayer2.trackselection"><code>TrackSelectionParameters.Builder</code></a> initialized with the current <a href="TrackSelectionParameters.html" title="class in com.google.android.exoplayer2.trackselection"><code>TrackSelectionParameters</code></a>
|
||||
from the player. The desired modifications can be made on the builder, and the resulting <a href="TrackSelectionParameters.html" title="class in com.google.android.exoplayer2.trackselection"><code>TrackSelectionParameters</code></a> can then be built and set on the player:
|
||||
|
||||
<pre><code>
|
||||
player.setTrackSelectionParameters(
|
||||
player.getTrackSelectionParameters()
|
||||
.buildUpon()
|
||||
.setMaxVideoSizeSd()
|
||||
.setPreferredAudioLanguage("deu")
|
||||
.setPreferredAudioLanguage("de")
|
||||
.build());
|
||||
|
||||
</code></pre>
|
||||
|
||||
Selection <a href="DefaultTrackSelector.Parameters.html" title="class in com.google.android.exoplayer2.trackselection"><code>DefaultTrackSelector.Parameters</code></a> support many different options, some of which are described below.
|
||||
|
||||
<h2>Selecting specific tracks</h2>
|
||||
|
||||
Track selection overrides can be used to select specific tracks. To specify an override for a
|
||||
renderer, it's first necessary to obtain the tracks that have been mapped to it:
|
||||
Some specialized parameters are only available in the extended <a href="DefaultTrackSelector.Parameters.html" title="class in com.google.android.exoplayer2.trackselection"><code>DefaultTrackSelector.Parameters</code></a> class, which
|
||||
can be retrieved and modified in a similar way in this track selector:
|
||||
|
||||
<pre><code>
|
||||
MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
|
||||
TrackGroupArray rendererTrackGroups = mappedTrackInfo == null ? null
|
||||
: mappedTrackInfo.getTrackGroups(rendererIndex);
|
||||
</code></pre>
|
||||
|
||||
If <code>rendererTrackGroups</code> is null then there aren't any currently mapped tracks, and so
|
||||
setting an override isn't possible. Note that a <a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2"><code>Player.Listener</code></a> registered on the player
|
||||
can be used to determine when the current tracks (and therefore the mapping) changes. If <code>
|
||||
rendererTrackGroups</code> is non-null then an override can be set. The next step is to query the
|
||||
properties of the available tracks to determine the <code>groupIndex</code> and the <code>
|
||||
trackIndices</code> within the group it that should be selected. The override can then be specified
|
||||
using <a href="DefaultTrackSelector.ParametersBuilder.html#setSelectionOverride(int,com.google.android.exoplayer2.source.TrackGroupArray,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride)"><code>DefaultTrackSelector.ParametersBuilder.setSelectionOverride(int, com.google.android.exoplayer2.source.TrackGroupArray, com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride)</code></a>:
|
||||
|
||||
<pre><code>
|
||||
SelectionOverride selectionOverride = new SelectionOverride(groupIndex, trackIndices);
|
||||
player.setTrackSelectionParameters(
|
||||
((Parameters)player.getTrackSelectionParameters())
|
||||
defaultTrackSelector.setParameters(
|
||||
defaultTrackSelector.getParameters()
|
||||
.buildUpon()
|
||||
.setSelectionOverride(rendererIndex, rendererTrackGroups, selectionOverride)
|
||||
.setTunnelingEnabled(true)
|
||||
.build());
|
||||
</code></pre>
|
||||
|
||||
<h2>Constraint based track selection</h2>
|
||||
|
||||
Whilst track selection overrides make it possible to select specific tracks, the recommended way
|
||||
of controlling which tracks are selected is by specifying constraints. For example consider the
|
||||
case of wanting to restrict video track selections to SD, and preferring German audio tracks.
|
||||
Track selection overrides could be used to select specific tracks meeting these criteria, however
|
||||
a simpler and more flexible approach is to specify these constraints directly:
|
||||
|
||||
<pre><code>
|
||||
player.setTrackSelectionParameters(
|
||||
player.getTrackSelectionParameters()
|
||||
.buildUpon()
|
||||
.setMaxVideoSizeSd()
|
||||
.setPreferredAudioLanguage("deu")
|
||||
.build());
|
||||
</code></pre>
|
||||
|
||||
There are several benefits to using constraint based track selection instead of specific track
|
||||
overrides:
|
||||
|
||||
<ul>
|
||||
<li>You can specify constraints before knowing what tracks the media provides. This can
|
||||
simplify track selection code (e.g. you don't have to listen for changes in the available
|
||||
tracks before configuring the selector).
|
||||
<li>Constraints can be applied consistently across all periods in a complex piece of media,
|
||||
even if those periods contain different tracks. In contrast, a specific track override is
|
||||
only applied to periods whose tracks match those for which the override was set.
|
||||
</ul>
|
||||
|
||||
<h2>Disabling renderers</h2>
|
||||
|
||||
Renderers can be disabled using <a href="DefaultTrackSelector.ParametersBuilder.html#setRendererDisabled(int,boolean)"><code>DefaultTrackSelector.ParametersBuilder.setRendererDisabled(int, boolean)</code></a>. Disabling a
|
||||
renderer differs from setting a <code>null</code> override because the renderer is disabled
|
||||
unconditionally, whereas a <code>null</code> override is applied only when the track groups available
|
||||
to the renderer match the <a href="../source/TrackGroupArray.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroupArray</code></a> for which it was specified.
|
||||
|
||||
<h2>Tunneling</h2>
|
||||
|
||||
Tunneled playback can be enabled in cases where the combination of renderers and selected tracks
|
||||
supports it. This can be done by using <a href="DefaultTrackSelector.ParametersBuilder.html#setTunnelingEnabled(boolean)"><code>DefaultTrackSelector.ParametersBuilder.setTunnelingEnabled(boolean)</code></a>.</div>
|
||||
</code></pre></div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
@ -438,24 +361,13 @@ extends <a href="MappingTrackSelector.html" title="class in com.google.android.e
|
|||
</td>
|
||||
</tr>
|
||||
<tr id="i5" class="rowColor">
|
||||
<td class="colFirst"><code>protected @NullableType <a href="ExoTrackSelection.Definition.html" title="class in com.google.android.exoplayer2.trackselection">ExoTrackSelection.Definition</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#maybeApplyOverride(com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters,int,com.google.android.exoplayer2.trackselection.ExoTrackSelection.Definition)">maybeApplyOverride</a></span>​(<a href="MappingTrackSelector.MappedTrackInfo.html" title="class in com.google.android.exoplayer2.trackselection">MappingTrackSelector.MappedTrackInfo</a> mappedTrackInfo,
|
||||
<a href="DefaultTrackSelector.Parameters.html" title="class in com.google.android.exoplayer2.trackselection">DefaultTrackSelector.Parameters</a> params,
|
||||
int rendererIndex,
|
||||
@NullableType <a href="ExoTrackSelection.Definition.html" title="class in com.google.android.exoplayer2.trackselection">ExoTrackSelection.Definition</a> currentDefinition)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Returns the <a href="ExoTrackSelection.Definition.html" title="class in com.google.android.exoplayer2.trackselection"><code>ExoTrackSelection.Definition</code></a> of a renderer after applying selection
|
||||
overriding and renderer disabling.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i6" class="altColor">
|
||||
<td class="colFirst"><code>protected static <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#normalizeUndeterminedLanguageToNull(java.lang.String)">normalizeUndeterminedLanguageToNull</a></span>​(<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> language)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Normalizes the input string to null if it does not define a language, or returns it otherwise.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i7" class="rowColor">
|
||||
<tr id="i6" class="altColor">
|
||||
<td class="colFirst"><code>protected @NullableType <a href="ExoTrackSelection.Definition.html" title="class in com.google.android.exoplayer2.trackselection">ExoTrackSelection.Definition</a>[]</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#selectAllTracks(com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo,int%5B%5D%5B%5D%5B%5D,int%5B%5D,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters)">selectAllTracks</a></span>​(<a href="MappingTrackSelector.MappedTrackInfo.html" title="class in com.google.android.exoplayer2.trackselection">MappingTrackSelector.MappedTrackInfo</a> mappedTrackInfo,
|
||||
int[][][] rendererFormatSupports,
|
||||
|
|
@ -467,7 +379,7 @@ extends <a href="MappingTrackSelector.html" title="class in com.google.android.e
|
|||
applied.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i8" class="altColor">
|
||||
<tr id="i7" class="rowColor">
|
||||
<td class="colFirst"><code>protected <a href="https://developer.android.com/reference/android/util/Pair.html" title="class or interface in android.util" class="externalLink">Pair</a><<a href="ExoTrackSelection.Definition.html" title="class in com.google.android.exoplayer2.trackselection">ExoTrackSelection.Definition</a>,​<a href="DefaultTrackSelector.AudioTrackScore.html" title="class in com.google.android.exoplayer2.trackselection" target="_top">DefaultTrackSelector.AudioTrackScore</a>></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#selectAudioTrack(com.google.android.exoplayer2.source.TrackGroupArray,int%5B%5D%5B%5D,int,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters,boolean)">selectAudioTrack</a></span>​(<a href="../source/TrackGroupArray.html" title="class in com.google.android.exoplayer2.source">TrackGroupArray</a> groups,
|
||||
int[][] formatSupport,
|
||||
|
|
@ -479,7 +391,7 @@ extends <a href="MappingTrackSelector.html" title="class in com.google.android.e
|
|||
<a href="ExoTrackSelection.html" title="interface in com.google.android.exoplayer2.trackselection"><code>ExoTrackSelection</code></a> for an audio renderer.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i9" class="rowColor">
|
||||
<tr id="i8" class="altColor">
|
||||
<td class="colFirst"><code>protected <a href="ExoTrackSelection.Definition.html" title="class in com.google.android.exoplayer2.trackselection">ExoTrackSelection.Definition</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#selectOtherTrack(int,com.google.android.exoplayer2.source.TrackGroupArray,int%5B%5D%5B%5D,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters)">selectOtherTrack</a></span>​(int trackType,
|
||||
<a href="../source/TrackGroupArray.html" title="class in com.google.android.exoplayer2.source">TrackGroupArray</a> groups,
|
||||
|
|
@ -490,7 +402,7 @@ extends <a href="MappingTrackSelector.html" title="class in com.google.android.e
|
|||
<a href="ExoTrackSelection.html" title="interface in com.google.android.exoplayer2.trackselection"><code>ExoTrackSelection</code></a> for a renderer whose type is neither video, audio or text.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i10" class="altColor">
|
||||
<tr id="i9" class="rowColor">
|
||||
<td class="colFirst"><code>protected <a href="https://developer.android.com/reference/android/util/Pair.html" title="class or interface in android.util" class="externalLink">Pair</a><<a href="ExoTrackSelection.Definition.html" title="class in com.google.android.exoplayer2.trackselection">ExoTrackSelection.Definition</a>,​<a href="DefaultTrackSelector.TextTrackScore.html" title="class in com.google.android.exoplayer2.trackselection" target="_top">DefaultTrackSelector.TextTrackScore</a>></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#selectTextTrack(com.google.android.exoplayer2.source.TrackGroupArray,int%5B%5D%5B%5D,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters,java.lang.String)">selectTextTrack</a></span>​(<a href="../source/TrackGroupArray.html" title="class in com.google.android.exoplayer2.source">TrackGroupArray</a> groups,
|
||||
int[][] formatSupport,
|
||||
|
|
@ -501,7 +413,7 @@ extends <a href="MappingTrackSelector.html" title="class in com.google.android.e
|
|||
<a href="ExoTrackSelection.html" title="interface in com.google.android.exoplayer2.trackselection"><code>ExoTrackSelection</code></a> for a text renderer.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i11" class="rowColor">
|
||||
<tr id="i10" class="altColor">
|
||||
<td class="colFirst"><code>protected <a href="https://developer.android.com/reference/android/util/Pair.html" title="class or interface in android.util" class="externalLink">Pair</a><@NullableType <a href="../RendererConfiguration.html" title="class in com.google.android.exoplayer2">RendererConfiguration</a>[],​@NullableType <a href="ExoTrackSelection.html" title="interface in com.google.android.exoplayer2.trackselection" target="_top">ExoTrackSelection</a>[]></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#selectTracks(com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo,int%5B%5D%5B%5D%5B%5D,int%5B%5D,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.Timeline)">selectTracks</a></span>​(<a href="MappingTrackSelector.MappedTrackInfo.html" title="class in com.google.android.exoplayer2.trackselection">MappingTrackSelector.MappedTrackInfo</a> mappedTrackInfo,
|
||||
int[][][] rendererFormatSupports,
|
||||
|
|
@ -512,7 +424,7 @@ extends <a href="MappingTrackSelector.html" title="class in com.google.android.e
|
|||
<div class="block">Given mapped track information, returns a track selection and configuration for each renderer.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i12" class="altColor">
|
||||
<tr id="i11" class="rowColor">
|
||||
<td class="colFirst"><code>protected <a href="ExoTrackSelection.Definition.html" title="class in com.google.android.exoplayer2.trackselection">ExoTrackSelection.Definition</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#selectVideoTrack(com.google.android.exoplayer2.source.TrackGroupArray,int%5B%5D%5B%5D,int,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters,boolean)">selectVideoTrack</a></span>​(<a href="../source/TrackGroupArray.html" title="class in com.google.android.exoplayer2.source">TrackGroupArray</a> groups,
|
||||
int[][] formatSupport,
|
||||
|
|
@ -524,14 +436,14 @@ extends <a href="MappingTrackSelector.html" title="class in com.google.android.e
|
|||
<a href="ExoTrackSelection.html" title="interface in com.google.android.exoplayer2.trackselection"><code>ExoTrackSelection</code></a> for a video renderer.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i13" class="rowColor">
|
||||
<tr id="i12" class="altColor">
|
||||
<td class="colFirst"><code>void</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setParameters(com.google.android.exoplayer2.trackselection.DefaultTrackSelector.ParametersBuilder)">setParameters</a></span>​(<a href="DefaultTrackSelector.ParametersBuilder.html" title="class in com.google.android.exoplayer2.trackselection">DefaultTrackSelector.ParametersBuilder</a> parametersBuilder)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Atomically sets the provided parameters for track selection.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i14" class="altColor">
|
||||
<tr id="i13" class="rowColor">
|
||||
<td class="colFirst"><code>void</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setParameters(com.google.android.exoplayer2.trackselection.TrackSelectionParameters)">setParameters</a></span>​(<a href="TrackSelectionParameters.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionParameters</a> parameters)</code></th>
|
||||
<td class="colLast">
|
||||
|
|
@ -767,20 +679,6 @@ public DefaultTrackSelector​(<a href="ExoTrackSelection.Factory.html"
|
|||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="maybeApplyOverride(com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters,int,com.google.android.exoplayer2.trackselection.ExoTrackSelection.Definition)">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>maybeApplyOverride</h4>
|
||||
<pre class="methodSignature">protected @NullableType <a href="ExoTrackSelection.Definition.html" title="class in com.google.android.exoplayer2.trackselection">ExoTrackSelection.Definition</a> maybeApplyOverride​(<a href="MappingTrackSelector.MappedTrackInfo.html" title="class in com.google.android.exoplayer2.trackselection">MappingTrackSelector.MappedTrackInfo</a> mappedTrackInfo,
|
||||
<a href="DefaultTrackSelector.Parameters.html" title="class in com.google.android.exoplayer2.trackselection">DefaultTrackSelector.Parameters</a> params,
|
||||
int rendererIndex,
|
||||
@NullableType <a href="ExoTrackSelection.Definition.html" title="class in com.google.android.exoplayer2.trackselection">ExoTrackSelection.Definition</a> currentDefinition)</pre>
|
||||
<div class="block">Returns the <a href="ExoTrackSelection.Definition.html" title="class in com.google.android.exoplayer2.trackselection"><code>ExoTrackSelection.Definition</code></a> of a renderer after applying selection
|
||||
overriding and renderer disabling.</div>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="selectAllTracks(com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],int[],com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters)">
|
||||
<!-- -->
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
catch(err) {
|
||||
}
|
||||
//-->
|
||||
var data = {"i0":10,"i1":10,"i2":10};
|
||||
var data = {"i0":10,"i1":10,"i2":10,"i3":10};
|
||||
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
|
||||
var altColor = "altColor";
|
||||
var rowColor = "rowColor";
|
||||
|
|
@ -140,16 +140,15 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<pre>public static final class <span class="typeNameLabel">TrackSelectionOverrides.TrackSelectionOverride</span>
|
||||
extends <a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a>
|
||||
implements <a href="../Bundleable.html" title="interface in com.google.android.exoplayer2">Bundleable</a></pre>
|
||||
<div class="block">Forces the selection of <a href="#trackIndexes"><code>trackIndexes</code></a> for a <a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a>.
|
||||
<div class="block">Forces the selection of <a href="#trackIndices"><code>trackIndices</code></a> for a <a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a>.
|
||||
|
||||
<p>If multiple {link #tracks} are overridden, as many as possible will be selected depending on
|
||||
the player capabilities.
|
||||
<p>If multiple tracks in <a href="#trackGroup"><code>trackGroup</code></a> are overridden, as many as possible will be
|
||||
selected depending on the player capabilities.
|
||||
|
||||
<p>If a <a href="TrackSelectionOverrides.TrackSelectionOverride.html" title="class in com.google.android.exoplayer2.trackselection"><code>TrackSelectionOverrides.TrackSelectionOverride</code></a> has no tracks (<code>tracks.isEmpty()</code>), no tracks will
|
||||
be played. This is similar to <a href="TrackSelectionParameters.html#disabledTrackTypes"><code>TrackSelectionParameters.disabledTrackTypes</code></a>, except it
|
||||
will only affect the playback of the associated <a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a>. For example, if the only
|
||||
<a href="../C.html#TRACK_TYPE_VIDEO"><code>C.TRACK_TYPE_VIDEO</code></a> <a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a> is associated with no tracks, no video will play
|
||||
until the next video starts.</div>
|
||||
<p>If <a href="#trackIndices"><code>trackIndices</code></a> is empty, no tracks from <a href="#trackGroup"><code>trackGroup</code></a> will be played. This
|
||||
is similar to <a href="TrackSelectionParameters.html#disabledTrackTypes"><code>TrackSelectionParameters.disabledTrackTypes</code></a>, except it will only affect
|
||||
the playback of the associated <a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a>. For example, if the only <a href="../C.html#TRACK_TYPE_VIDEO"><code>C.TRACK_TYPE_VIDEO</code></a> <a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a> is associated with no tracks, no video will play until
|
||||
the next video starts.</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
@ -198,14 +197,14 @@ implements <a href="../Bundleable.html" title="interface in com.google.android.e
|
|||
<td class="colFirst"><code><a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source">TrackGroup</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#trackGroup">trackGroup</a></span></code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">The <a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a> whose <a href="#trackIndexes"><code>trackIndexes</code></a> are forced to be selected.</div>
|
||||
<div class="block">The <a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a> whose <a href="#trackIndices"><code>trackIndices</code></a> are forced to be selected.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<td class="colFirst"><code><a href="https://guava.dev/releases/27.1-android/api/docs/com/google/common/collect/ImmutableList.html?is-external=true" title="class or interface in com.google.common.collect" class="externalLink">ImmutableList</a><<a href="https://developer.android.com/reference/java/lang/Integer.html" title="class or interface in java.lang" class="externalLink" target="_top">Integer</a>></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#trackIndexes">trackIndexes</a></span></code></th>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#trackIndices">trackIndices</a></span></code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">The index of tracks in a <a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a> to be selected.</div>
|
||||
<div class="block">The indices of tracks in a <a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a> to be selected.</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
@ -233,9 +232,9 @@ implements <a href="../Bundleable.html" title="interface in com.google.android.e
|
|||
</tr>
|
||||
<tr class="rowColor">
|
||||
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(com.google.android.exoplayer2.source.TrackGroup,java.util.List)">TrackSelectionOverride</a></span>​(<a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source">TrackGroup</a> trackGroup,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="https://developer.android.com/reference/java/lang/Integer.html?is-external=true" title="class or interface in java.lang" class="externalLink" target="_top">Integer</a>> trackIndexes)</code></th>
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="https://developer.android.com/reference/java/lang/Integer.html?is-external=true" title="class or interface in java.lang" class="externalLink" target="_top">Integer</a>> trackIndices)</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Constructs an instance to force <code>trackIndexes</code> in <code>trackGroup</code> to be selected.</div>
|
||||
<div class="block">Constructs an instance to force <code>trackIndices</code> in <code>trackGroup</code> to be selected.</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
@ -262,11 +261,18 @@ implements <a href="../Bundleable.html" title="interface in com.google.android.e
|
|||
<td class="colLast"> </td>
|
||||
</tr>
|
||||
<tr id="i1" class="rowColor">
|
||||
<td class="colFirst"><code>@com.google.android.exoplayer2.C.TrackType int</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getTrackType()">getTrackType</a></span>()</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Returns the <a href="../C.TrackType.html" title="annotation in com.google.android.exoplayer2"><code>C.TrackType</code></a> of the overriden track group.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i2" class="altColor">
|
||||
<td class="colFirst"><code>int</code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#hashCode()">hashCode</a></span>()</code></th>
|
||||
<td class="colLast"> </td>
|
||||
</tr>
|
||||
<tr id="i2" class="altColor">
|
||||
<tr id="i3" class="rowColor">
|
||||
<td class="colFirst"><code><a href="https://developer.android.com/reference/android/os/Bundle.html" title="class or interface in android.os" class="externalLink" target="_top">Bundle</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#toBundle()">toBundle</a></span>()</code></th>
|
||||
<td class="colLast">
|
||||
|
|
@ -304,17 +310,17 @@ implements <a href="../Bundleable.html" title="interface in com.google.android.e
|
|||
<li class="blockList">
|
||||
<h4>trackGroup</h4>
|
||||
<pre>public final <a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source">TrackGroup</a> trackGroup</pre>
|
||||
<div class="block">The <a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a> whose <a href="#trackIndexes"><code>trackIndexes</code></a> are forced to be selected.</div>
|
||||
<div class="block">The <a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a> whose <a href="#trackIndices"><code>trackIndices</code></a> are forced to be selected.</div>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="trackIndexes">
|
||||
<a id="trackIndices">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>trackIndexes</h4>
|
||||
<pre>public final <a href="https://guava.dev/releases/27.1-android/api/docs/com/google/common/collect/ImmutableList.html?is-external=true" title="class or interface in com.google.common.collect" class="externalLink">ImmutableList</a><<a href="https://developer.android.com/reference/java/lang/Integer.html" title="class or interface in java.lang" class="externalLink" target="_top">Integer</a>> trackIndexes</pre>
|
||||
<div class="block">The index of tracks in a <a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a> to be selected.</div>
|
||||
<h4>trackIndices</h4>
|
||||
<pre>public final <a href="https://guava.dev/releases/27.1-android/api/docs/com/google/common/collect/ImmutableList.html?is-external=true" title="class or interface in com.google.common.collect" class="externalLink">ImmutableList</a><<a href="https://developer.android.com/reference/java/lang/Integer.html" title="class or interface in java.lang" class="externalLink" target="_top">Integer</a>> trackIndices</pre>
|
||||
<div class="block">The indices of tracks in a <a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a> to be selected.</div>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="CREATOR">
|
||||
|
|
@ -354,12 +360,12 @@ implements <a href="../Bundleable.html" title="interface in com.google.android.e
|
|||
<li class="blockList">
|
||||
<h4>TrackSelectionOverride</h4>
|
||||
<pre>public TrackSelectionOverride​(<a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source">TrackGroup</a> trackGroup,
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="https://developer.android.com/reference/java/lang/Integer.html?is-external=true" title="class or interface in java.lang" class="externalLink" target="_top">Integer</a>> trackIndexes)</pre>
|
||||
<div class="block">Constructs an instance to force <code>trackIndexes</code> in <code>trackGroup</code> to be selected.</div>
|
||||
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="https://developer.android.com/reference/java/lang/Integer.html?is-external=true" title="class or interface in java.lang" class="externalLink" target="_top">Integer</a>> trackIndices)</pre>
|
||||
<div class="block">Constructs an instance to force <code>trackIndices</code> in <code>trackGroup</code> to be selected.</div>
|
||||
<dl>
|
||||
<dt><span class="paramLabel">Parameters:</span></dt>
|
||||
<dd><code>trackGroup</code> - The <a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a> for which to override the track selection.</dd>
|
||||
<dd><code>trackIndexes</code> - The indexes of the tracks in the <a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a> to select.</dd>
|
||||
<dd><code>trackIndices</code> - The indices of the tracks in the <a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a> to select.</dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
@ -400,6 +406,16 @@ implements <a href="../Bundleable.html" title="interface in com.google.android.e
|
|||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="getTrackType()">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>getTrackType</h4>
|
||||
<pre class="methodSignature">public @com.google.android.exoplayer2.C.TrackType int getTrackType()</pre>
|
||||
<div class="block">Returns the <a href="../C.TrackType.html" title="annotation in com.google.android.exoplayer2"><code>C.TrackType</code></a> of the overriden track group.</div>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="toBundle()">
|
||||
<!-- -->
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -184,7 +184,7 @@ implements <a href="../Bundleable.html" title="interface in com.google.android.e
|
|||
<td class="colFirst"><code>static class </code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="TrackSelectionOverrides.TrackSelectionOverride.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionOverrides.TrackSelectionOverride</a></span></code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Forces the selection of <a href="TrackSelectionOverrides.TrackSelectionOverride.html#trackIndexes"><code>TrackSelectionOverrides.TrackSelectionOverride.trackIndexes</code></a> for a <a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a>.</div>
|
||||
<div class="block">Forces the selection of <a href="TrackSelectionOverrides.TrackSelectionOverride.html#trackIndices"><code>TrackSelectionOverrides.TrackSelectionOverride.trackIndices</code></a> for a <a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a>.</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
@ -248,7 +248,7 @@ implements <a href="../Bundleable.html" title="interface in com.google.android.e
|
|||
<td class="colFirst"><code><a href="https://guava.dev/releases/27.1-android/api/docs/com/google/common/collect/ImmutableList.html?is-external=true" title="class or interface in com.google.common.collect" class="externalLink">ImmutableList</a><<a href="TrackSelectionOverrides.TrackSelectionOverride.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionOverrides.TrackSelectionOverride</a>></code></td>
|
||||
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#asList()">asList</a></span>()</code></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Returns all <a href="TrackSelectionOverrides.TrackSelectionOverride.html" title="class in com.google.android.exoplayer2.trackselection"><code>TrackSelectionOverrides.TrackSelectionOverride</code></a> contained.</div>
|
||||
<div class="block">Returns a list of the <a href="TrackSelectionOverrides.TrackSelectionOverride.html" title="class in com.google.android.exoplayer2.trackselection"><code>overrides</code></a>.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i1" class="rowColor">
|
||||
|
|
@ -354,7 +354,7 @@ implements <a href="../Bundleable.html" title="interface in com.google.android.e
|
|||
<li class="blockList">
|
||||
<h4>asList</h4>
|
||||
<pre class="methodSignature">public <a href="https://guava.dev/releases/27.1-android/api/docs/com/google/common/collect/ImmutableList.html?is-external=true" title="class or interface in com.google.common.collect" class="externalLink">ImmutableList</a><<a href="TrackSelectionOverrides.TrackSelectionOverride.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionOverrides.TrackSelectionOverride</a>> asList()</pre>
|
||||
<div class="block">Returns all <a href="TrackSelectionOverrides.TrackSelectionOverride.html" title="class in com.google.android.exoplayer2.trackselection"><code>TrackSelectionOverrides.TrackSelectionOverride</code></a> contained.</div>
|
||||
<div class="block">Returns a list of the <a href="TrackSelectionOverrides.TrackSelectionOverride.html" title="class in com.google.android.exoplayer2.trackselection"><code>overrides</code></a>.</div>
|
||||
</li>
|
||||
</ul>
|
||||
<a id="getOverride(com.google.android.exoplayer2.source.TrackGroup)">
|
||||
|
|
|
|||
|
|
@ -277,7 +277,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<tr class="rowColor">
|
||||
<th class="colFirst" scope="row"><a href="TrackSelectionOverrides.TrackSelectionOverride.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionOverrides.TrackSelectionOverride</a></th>
|
||||
<td class="colLast">
|
||||
<div class="block">Forces the selection of <a href="TrackSelectionOverrides.TrackSelectionOverride.html#trackIndexes"><code>TrackSelectionOverrides.TrackSelectionOverride.trackIndexes</code></a> for a <a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a>.</div>
|
||||
<div class="block">Forces the selection of <a href="TrackSelectionOverrides.TrackSelectionOverride.html#trackIndices"><code>TrackSelectionOverrides.TrackSelectionOverride.trackIndices</code></a> for a <a href="../source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a>.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
|
|
|
|||
|
|
@ -1890,21 +1890,21 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<!-- -->
|
||||
</a><code>public static final <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><a href="com/google/android/exoplayer2/ExoPlayerLibraryInfo.html#VERSION">VERSION</a></code></th>
|
||||
<td class="colLast"><code>"2.16.0"</code></td>
|
||||
<td class="colLast"><code>"2.16.1"</code></td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<td class="colFirst"><a id="com.google.android.exoplayer2.ExoPlayerLibraryInfo.VERSION_INT">
|
||||
<!-- -->
|
||||
</a><code>public static final int</code></td>
|
||||
<th class="colSecond" scope="row"><code><a href="com/google/android/exoplayer2/ExoPlayerLibraryInfo.html#VERSION_INT">VERSION_INT</a></code></th>
|
||||
<td class="colLast"><code>2016000</code></td>
|
||||
<td class="colLast"><code>2016001</code></td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<td class="colFirst"><a id="com.google.android.exoplayer2.ExoPlayerLibraryInfo.VERSION_SLASHY">
|
||||
<!-- -->
|
||||
</a><code>public static final <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a></code></td>
|
||||
<th class="colSecond" scope="row"><code><a href="com/google/android/exoplayer2/ExoPlayerLibraryInfo.html#VERSION_SLASHY">VERSION_SLASHY</a></code></th>
|
||||
<td class="colLast"><code>"ExoPlayerLib/2.16.0"</code></td>
|
||||
<td class="colLast"><code>"ExoPlayerLib/2.16.1"</code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
@ -4355,12 +4355,26 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<td class="colLast"><code>1684108385</code></td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<td class="colFirst"><a id="com.google.android.exoplayer2.audio.WavUtil.DS64_FOURCC">
|
||||
<!-- -->
|
||||
</a><code>public static final int</code></td>
|
||||
<th class="colSecond" scope="row"><code><a href="com/google/android/exoplayer2/audio/WavUtil.html#DS64_FOURCC">DS64_FOURCC</a></code></th>
|
||||
<td class="colLast"><code>1685272116</code></td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<td class="colFirst"><a id="com.google.android.exoplayer2.audio.WavUtil.FMT_FOURCC">
|
||||
<!-- -->
|
||||
</a><code>public static final int</code></td>
|
||||
<th class="colSecond" scope="row"><code><a href="com/google/android/exoplayer2/audio/WavUtil.html#FMT_FOURCC">FMT_FOURCC</a></code></th>
|
||||
<td class="colLast"><code>1718449184</code></td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<td class="colFirst"><a id="com.google.android.exoplayer2.audio.WavUtil.RF64_FOURCC">
|
||||
<!-- -->
|
||||
</a><code>public static final int</code></td>
|
||||
<th class="colSecond" scope="row"><code><a href="com/google/android/exoplayer2/audio/WavUtil.html#RF64_FOURCC">RF64_FOURCC</a></code></th>
|
||||
<td class="colLast"><code>1380333108</code></td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<td class="colFirst"><a id="com.google.android.exoplayer2.audio.WavUtil.RIFF_FOURCC">
|
||||
<!-- -->
|
||||
|
|
|
|||
|
|
@ -1417,7 +1417,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/Player.html#getCurrentWindowIndex()">com.google.android.exoplayer2.Player.getCurrentWindowIndex()</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/Player.html#getCurrentMediaItem()"><code>Player.getCurrentMediaItem()</code></a> instead.</div>
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/Player.html#getCurrentMediaItemIndex()"><code>Player.getCurrentMediaItemIndex()</code></a> instead.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
|
|
@ -1698,6 +1698,18 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/dash/DashMediaSource.Factory.html#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">com.google.android.exoplayer2.source.dash.DashMediaSource.Factory.setDrmHttpDataSourceFactory​(HttpDataSource.Factory)</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/dash/DashMediaSource.Factory.html#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">com.google.android.exoplayer2.source.dash.DashMediaSource.Factory.setDrmSessionManager​(DrmSessionManager)</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/dash/DashMediaSource.Factory.html#setDrmUserAgent(java.lang.String)">com.google.android.exoplayer2.source.dash.DashMediaSource.Factory.setDrmUserAgent​(String)</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/dash/DashMediaSource.Factory.html#setLivePresentationDelayMs(long,boolean)">com.google.android.exoplayer2.source.dash.DashMediaSource.Factory.setLivePresentationDelayMs​(long, boolean)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/MediaItem.Builder.html#setLiveConfiguration(com.google.android.exoplayer2.MediaItem.LiveConfiguration)"><code>MediaItem.Builder.setLiveConfiguration(MediaItem.LiveConfiguration)</code></a>
|
||||
|
|
@ -1705,18 +1717,30 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
manifest, or <a href="com/google/android/exoplayer2/source/dash/DashMediaSource.Factory.html#setFallbackTargetLiveOffsetMs(long)"><code>DashMediaSource.Factory.setFallbackTargetLiveOffsetMs(long)</code></a> to provide a fallback value.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/dash/DashMediaSource.Factory.html#setStreamKeys(java.util.List)">com.google.android.exoplayer2.source.dash.DashMediaSource.Factory.setStreamKeys​(List<StreamKey>)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/MediaItem.Builder.html#setStreamKeys(java.util.List)"><code>MediaItem.Builder.setStreamKeys(List)</code></a> and <a href="com/google/android/exoplayer2/source/dash/DashMediaSource.Factory.html#createMediaSource(com.google.android.exoplayer2.MediaItem)"><code>DashMediaSource.Factory.createMediaSource(MediaItem)</code></a> instead.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/dash/DashMediaSource.Factory.html#setTag(java.lang.Object)">com.google.android.exoplayer2.source.dash.DashMediaSource.Factory.setTag​(Object)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/MediaItem.Builder.html#setTag(java.lang.Object)"><code>MediaItem.Builder.setTag(Object)</code></a> and <a href="com/google/android/exoplayer2/source/dash/DashMediaSource.Factory.html#createMediaSource(com.google.android.exoplayer2.MediaItem)"><code>DashMediaSource.Factory.createMediaSource(MediaItem)</code></a> instead.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/DefaultMediaSourceFactory.html#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">com.google.android.exoplayer2.source.DefaultMediaSourceFactory.setDrmHttpDataSourceFactory​(HttpDataSource.Factory)</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/DefaultMediaSourceFactory.html#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">com.google.android.exoplayer2.source.DefaultMediaSourceFactory.setDrmSessionManager​(DrmSessionManager)</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/DefaultMediaSourceFactory.html#setDrmUserAgent(java.lang.String)">com.google.android.exoplayer2.source.DefaultMediaSourceFactory.setDrmUserAgent​(String)</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/DefaultMediaSourceFactory.html#setStreamKeys(java.util.List)">com.google.android.exoplayer2.source.DefaultMediaSourceFactory.setStreamKeys​(List<StreamKey>)</a></th>
|
||||
<td class="colLast">
|
||||
|
|
@ -1730,24 +1754,36 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
</td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/hls/HlsMediaSource.Factory.html#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">com.google.android.exoplayer2.source.hls.HlsMediaSource.Factory.setDrmHttpDataSourceFactory​(HttpDataSource.Factory)</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/hls/HlsMediaSource.Factory.html#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">com.google.android.exoplayer2.source.hls.HlsMediaSource.Factory.setDrmSessionManager​(DrmSessionManager)</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/hls/HlsMediaSource.Factory.html#setDrmUserAgent(java.lang.String)">com.google.android.exoplayer2.source.hls.HlsMediaSource.Factory.setDrmUserAgent​(String)</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/hls/HlsMediaSource.Factory.html#setStreamKeys(java.util.List)">com.google.android.exoplayer2.source.hls.HlsMediaSource.Factory.setStreamKeys​(List<StreamKey>)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/MediaItem.Builder.html#setStreamKeys(java.util.List)"><code>MediaItem.Builder.setStreamKeys(List)</code></a> and <a href="com/google/android/exoplayer2/source/hls/HlsMediaSource.Factory.html#createMediaSource(com.google.android.exoplayer2.MediaItem)"><code>HlsMediaSource.Factory.createMediaSource(MediaItem)</code></a> instead.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/hls/HlsMediaSource.Factory.html#setTag(java.lang.Object)">com.google.android.exoplayer2.source.hls.HlsMediaSource.Factory.setTag​(Object)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/MediaItem.Builder.html#setTag(java.lang.Object)"><code>MediaItem.Builder.setTag(Object)</code></a> and <a href="com/google/android/exoplayer2/source/hls/HlsMediaSource.Factory.html#createMediaSource(com.google.android.exoplayer2.MediaItem)"><code>HlsMediaSource.Factory.createMediaSource(MediaItem)</code></a> instead.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/MediaSourceFactory.html#createMediaSource(android.net.Uri)">com.google.android.exoplayer2.source.MediaSourceFactory.createMediaSource​(Uri)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/source/MediaSourceFactory.html#createMediaSource(com.google.android.exoplayer2.MediaItem)"><code>MediaSourceFactory.createMediaSource(MediaItem)</code></a> instead.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/MediaSourceFactory.html#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">com.google.android.exoplayer2.source.MediaSourceFactory.setDrmHttpDataSourceFactory​(HttpDataSource.Factory)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/source/MediaSourceFactory.html#setDrmSessionManagerProvider(com.google.android.exoplayer2.drm.DrmSessionManagerProvider)"><code>MediaSourceFactory.setDrmSessionManagerProvider(DrmSessionManagerProvider)</code></a> and pass an
|
||||
|
|
@ -1755,14 +1791,14 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<a href="com/google/android/exoplayer2/upstream/HttpDataSource.Factory.html" title="interface in com.google.android.exoplayer2.upstream"><code>HttpDataSource.Factory</code></a>.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/MediaSourceFactory.html#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">com.google.android.exoplayer2.source.MediaSourceFactory.setDrmSessionManager​(DrmSessionManager)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/source/MediaSourceFactory.html#setDrmSessionManagerProvider(com.google.android.exoplayer2.drm.DrmSessionManagerProvider)"><code>MediaSourceFactory.setDrmSessionManagerProvider(DrmSessionManagerProvider)</code></a> and pass an
|
||||
implementation that always returns the same instance.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/MediaSourceFactory.html#setDrmUserAgent(java.lang.String)">com.google.android.exoplayer2.source.MediaSourceFactory.setDrmUserAgent​(String)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/source/MediaSourceFactory.html#setDrmSessionManagerProvider(com.google.android.exoplayer2.drm.DrmSessionManagerProvider)"><code>MediaSourceFactory.setDrmSessionManagerProvider(DrmSessionManagerProvider)</code></a> and pass an
|
||||
|
|
@ -1770,24 +1806,36 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<code>userAgent</code>.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/MediaSourceFactory.html#setStreamKeys(java.util.List)">com.google.android.exoplayer2.source.MediaSourceFactory.setStreamKeys​(List<StreamKey>)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/MediaItem.LocalConfiguration.html#streamKeys"><code>MediaItem.LocalConfiguration.streamKeys</code></a> instead.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/ProgressiveMediaSource.Factory.html#createMediaSource(android.net.Uri)">com.google.android.exoplayer2.source.ProgressiveMediaSource.Factory.createMediaSource​(Uri)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/source/ProgressiveMediaSource.Factory.html#createMediaSource(com.google.android.exoplayer2.MediaItem)"><code>ProgressiveMediaSource.Factory.createMediaSource(MediaItem)</code></a> instead.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/ProgressiveMediaSource.Factory.html#setCustomCacheKey(java.lang.String)">com.google.android.exoplayer2.source.ProgressiveMediaSource.Factory.setCustomCacheKey​(String)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/MediaItem.Builder.html#setCustomCacheKey(java.lang.String)"><code>MediaItem.Builder.setCustomCacheKey(String)</code></a> and <a href="com/google/android/exoplayer2/source/ProgressiveMediaSource.Factory.html#createMediaSource(com.google.android.exoplayer2.MediaItem)"><code>ProgressiveMediaSource.Factory.createMediaSource(MediaItem)</code></a> instead.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/ProgressiveMediaSource.Factory.html#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">com.google.android.exoplayer2.source.ProgressiveMediaSource.Factory.setDrmHttpDataSourceFactory​(HttpDataSource.Factory)</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/ProgressiveMediaSource.Factory.html#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">com.google.android.exoplayer2.source.ProgressiveMediaSource.Factory.setDrmSessionManager​(DrmSessionManager)</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/ProgressiveMediaSource.Factory.html#setDrmUserAgent(java.lang.String)">com.google.android.exoplayer2.source.ProgressiveMediaSource.Factory.setDrmUserAgent​(String)</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/ProgressiveMediaSource.Factory.html#setExtractorsFactory(com.google.android.exoplayer2.extractor.ExtractorsFactory)">com.google.android.exoplayer2.source.ProgressiveMediaSource.Factory.setExtractorsFactory​(ExtractorsFactory)</a></th>
|
||||
<td class="colLast">
|
||||
|
|
@ -1827,110 +1875,136 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.Factory.html#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">com.google.android.exoplayer2.source.smoothstreaming.SsMediaSource.Factory.setDrmHttpDataSourceFactory​(HttpDataSource.Factory)</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.Factory.html#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">com.google.android.exoplayer2.source.smoothstreaming.SsMediaSource.Factory.setDrmSessionManager​(DrmSessionManager)</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.Factory.html#setDrmUserAgent(java.lang.String)">com.google.android.exoplayer2.source.smoothstreaming.SsMediaSource.Factory.setDrmUserAgent​(String)</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.Factory.html#setStreamKeys(java.util.List)">com.google.android.exoplayer2.source.smoothstreaming.SsMediaSource.Factory.setStreamKeys​(List<StreamKey>)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/MediaItem.Builder.html#setStreamKeys(java.util.List)"><code>MediaItem.Builder.setStreamKeys(List)</code></a> and <a href="com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.Factory.html#createMediaSource(com.google.android.exoplayer2.MediaItem)"><code>SsMediaSource.Factory.createMediaSource(MediaItem)</code></a> instead.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.Factory.html#setTag(java.lang.Object)">com.google.android.exoplayer2.source.smoothstreaming.SsMediaSource.Factory.setTag​(Object)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/MediaItem.Builder.html#setTag(java.lang.Object)"><code>MediaItem.Builder.setTag(Object)</code></a> and <a href="com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.Factory.html#createMediaSource(com.google.android.exoplayer2.MediaItem)"><code>SsMediaSource.Factory.createMediaSource(MediaItem)</code></a> instead.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/testutil/FakeMediaSourceFactory.html#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">com.google.android.exoplayer2.testutil.FakeMediaSourceFactory.setDrmHttpDataSourceFactory​(HttpDataSource.Factory)</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/testutil/FakeMediaSourceFactory.html#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">com.google.android.exoplayer2.testutil.FakeMediaSourceFactory.setDrmSessionManager​(DrmSessionManager)</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/testutil/FakeMediaSourceFactory.html#setDrmUserAgent(java.lang.String)">com.google.android.exoplayer2.testutil.FakeMediaSourceFactory.setDrmUserAgent​(String)</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/testutil/StubExoPlayer.html#getAudioComponent()">com.google.android.exoplayer2.testutil.StubExoPlayer.getAudioComponent()</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/testutil/StubExoPlayer.html#getDeviceComponent()">com.google.android.exoplayer2.testutil.StubExoPlayer.getDeviceComponent()</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/testutil/StubExoPlayer.html#getTextComponent()">com.google.android.exoplayer2.testutil.StubExoPlayer.getTextComponent()</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/testutil/StubExoPlayer.html#getVideoComponent()">com.google.android.exoplayer2.testutil.StubExoPlayer.getVideoComponent()</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/testutil/StubExoPlayer.html#prepare(com.google.android.exoplayer2.source.MediaSource)">com.google.android.exoplayer2.testutil.StubExoPlayer.prepare​(MediaSource)</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/testutil/StubExoPlayer.html#retry()">com.google.android.exoplayer2.testutil.StubExoPlayer.retry()</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/testutil/StubExoPlayer.html#setHandleWakeLock(boolean)">com.google.android.exoplayer2.testutil.StubExoPlayer.setHandleWakeLock​(boolean)</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/testutil/StubExoPlayer.html#setThrowsWhenUsingWrongThread(boolean)">com.google.android.exoplayer2.testutil.StubExoPlayer.setThrowsWhenUsingWrongThread​(boolean)</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/testutil/StubPlayer.html#stop(boolean)">com.google.android.exoplayer2.testutil.StubPlayer.stop​(boolean)</a></th>
|
||||
<td class="colLast"></td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/Timeline.html#getPeriodPosition(com.google.android.exoplayer2.Timeline.Window,com.google.android.exoplayer2.Timeline.Period,int,long)">com.google.android.exoplayer2.Timeline.getPeriodPosition​(Timeline.Window, Timeline.Period, int, long)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/Timeline.html#getPeriodPositionUs(com.google.android.exoplayer2.Timeline.Window,com.google.android.exoplayer2.Timeline.Period,int,long)"><code>Timeline.getPeriodPositionUs(Window, Period, int, long)</code></a> instead.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/trackselection/DefaultTrackSelector.Parameters.html#getSelectionOverride(int,com.google.android.exoplayer2.source.TrackGroupArray)">com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters.getSelectionOverride​(int, TrackGroupArray)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Only works to retrieve the overrides set with the deprecated <a href="com/google/android/exoplayer2/trackselection/DefaultTrackSelector.ParametersBuilder.html#setSelectionOverride(int,com.google.android.exoplayer2.source.TrackGroupArray,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride)"><code>DefaultTrackSelector.ParametersBuilder.setSelectionOverride(int, TrackGroupArray, SelectionOverride)</code></a>. Use
|
||||
<a href="com/google/android/exoplayer2/trackselection/TrackSelectionParameters.html#trackSelectionOverrides"><code>TrackSelectionParameters.trackSelectionOverrides</code></a> instead.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/trackselection/DefaultTrackSelector.Parameters.html#hasSelectionOverride(int,com.google.android.exoplayer2.source.TrackGroupArray)">com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters.hasSelectionOverride​(int, TrackGroupArray)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Only works to retrieve the overrides set with the deprecated <a href="com/google/android/exoplayer2/trackselection/DefaultTrackSelector.ParametersBuilder.html#setSelectionOverride(int,com.google.android.exoplayer2.source.TrackGroupArray,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride)"><code>DefaultTrackSelector.ParametersBuilder.setSelectionOverride(int, TrackGroupArray, SelectionOverride)</code></a>. Use
|
||||
<a href="com/google/android/exoplayer2/trackselection/TrackSelectionParameters.html#trackSelectionOverrides"><code>TrackSelectionParameters.trackSelectionOverrides</code></a> instead.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/trackselection/DefaultTrackSelector.ParametersBuilder.html#clearSelectionOverride(int,com.google.android.exoplayer2.source.TrackGroupArray)">com.google.android.exoplayer2.trackselection.DefaultTrackSelector.ParametersBuilder.clearSelectionOverride​(int, TrackGroupArray)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/trackselection/TrackSelectionParameters.Builder.html#setTrackSelectionOverrides(com.google.android.exoplayer2.trackselection.TrackSelectionOverrides)"><code>TrackSelectionParameters.Builder.setTrackSelectionOverrides(com.google.android.exoplayer2.trackselection.TrackSelectionOverrides)</code></a>.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/trackselection/DefaultTrackSelector.ParametersBuilder.html#clearSelectionOverrides(int)">com.google.android.exoplayer2.trackselection.DefaultTrackSelector.ParametersBuilder.clearSelectionOverrides​(int)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/trackselection/TrackSelectionParameters.Builder.html#setTrackSelectionOverrides(com.google.android.exoplayer2.trackselection.TrackSelectionOverrides)"><code>TrackSelectionParameters.Builder.setTrackSelectionOverrides(com.google.android.exoplayer2.trackselection.TrackSelectionOverrides)</code></a>.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/trackselection/DefaultTrackSelector.ParametersBuilder.html#setSelectionOverride(int,com.google.android.exoplayer2.source.TrackGroupArray,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride)">com.google.android.exoplayer2.trackselection.DefaultTrackSelector.ParametersBuilder.setSelectionOverride​(int, TrackGroupArray, DefaultTrackSelector.SelectionOverride)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/trackselection/TrackSelectionParameters.Builder.html#setTrackSelectionOverrides(com.google.android.exoplayer2.trackselection.TrackSelectionOverrides)"><code>TrackSelectionParameters.Builder.setTrackSelectionOverrides(com.google.android.exoplayer2.trackselection.TrackSelectionOverrides)</code></a>.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/ui/DownloadNotificationHelper.html#buildProgressNotification(android.content.Context,int,android.app.PendingIntent,java.lang.String,java.util.List)">com.google.android.exoplayer2.ui.DownloadNotificationHelper.buildProgressNotification​(Context, int, PendingIntent, String, List<Download>)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/ui/DownloadNotificationHelper.html#buildProgressNotification(android.content.Context,int,android.app.PendingIntent,java.lang.String,java.util.List,int)"><code>DownloadNotificationHelper.buildProgressNotification(Context, int, PendingIntent, String, List,
|
||||
int)</code></a>.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/upstream/DefaultHttpDataSource.html#setContentTypePredicate(com.google.common.base.Predicate)">com.google.android.exoplayer2.upstream.DefaultHttpDataSource.setContentTypePredicate​(Predicate<String>)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/upstream/DefaultHttpDataSource.Factory.html#setContentTypePredicate(com.google.common.base.Predicate)"><code>DefaultHttpDataSource.Factory.setContentTypePredicate(Predicate)</code></a>
|
||||
instead.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<tr class="rowColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/video/VideoDecoderGLSurfaceView.html#getVideoDecoderOutputBufferRenderer()">com.google.android.exoplayer2.video.VideoDecoderGLSurfaceView.getVideoDecoderOutputBufferRenderer()</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">This class implements <a href="com/google/android/exoplayer2/video/VideoDecoderOutputBufferRenderer.html" title="interface in com.google.android.exoplayer2.video"><code>VideoDecoderOutputBufferRenderer</code></a> directly.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<tr class="altColor">
|
||||
<th class="colDeprecatedItemName" scope="row"><a href="com/google/android/exoplayer2/video/VideoRendererEventListener.html#onVideoInputFormatChanged(com.google.android.exoplayer2.Format)">com.google.android.exoplayer2.video.VideoRendererEventListener.onVideoInputFormatChanged​(Format)</a></th>
|
||||
<td class="colLast">
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/video/VideoRendererEventListener.html#onVideoInputFormatChanged(com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)"><code>VideoRendererEventListener.onVideoInputFormatChanged(Format, DecoderReuseEvaluation)</code></a>.</div>
|
||||
|
|
|
|||
|
|
@ -1489,7 +1489,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.html#asList()">asList()</a></span> - Method in class com.google.android.exoplayer2.trackselection.<a href="com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionOverrides</a></dt>
|
||||
<dd>
|
||||
<div class="block">Returns all <a href="com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.TrackSelectionOverride.html" title="class in com.google.android.exoplayer2.trackselection"><code>TrackSelectionOverrides.TrackSelectionOverride</code></a> contained.</div>
|
||||
<div class="block">Returns a list of the <a href="com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.TrackSelectionOverride.html" title="class in com.google.android.exoplayer2.trackselection"><code>overrides</code></a>.</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/util/NalUnitUtil.html#ASPECT_RATIO_IDC_VALUES">ASPECT_RATIO_IDC_VALUES</a></span> - Static variable in class com.google.android.exoplayer2.util.<a href="com/google/android/exoplayer2/util/NalUnitUtil.html" title="class in com.google.android.exoplayer2.util">NalUnitUtil</a></dt>
|
||||
<dd>
|
||||
|
|
@ -9564,6 +9564,10 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<dd>
|
||||
<div class="block">The number of times all buffers to a keyframe were dropped.</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/audio/WavUtil.html#DS64_FOURCC">DS64_FOURCC</a></span> - Static variable in class com.google.android.exoplayer2.audio.<a href="com/google/android/exoplayer2/audio/WavUtil.html" title="class in com.google.android.exoplayer2.audio">WavUtil</a></dt>
|
||||
<dd>
|
||||
<div class="block">Four character code for "ds64".</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/audio/DtsUtil.html#DTS_HD_MAX_RATE_BYTES_PER_SECOND">DTS_HD_MAX_RATE_BYTES_PER_SECOND</a></span> - Static variable in class com.google.android.exoplayer2.audio.<a href="com/google/android/exoplayer2/audio/DtsUtil.html" title="class in com.google.android.exoplayer2.audio">DtsUtil</a></dt>
|
||||
<dd>
|
||||
<div class="block">Maximum rate for a DTS-HD audio stream, in bytes per second.</div>
|
||||
|
|
@ -10571,6 +10575,12 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<dd>
|
||||
<div class="block">Essential properties in the adaptation set.</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.RepresentationInfo.html#essentialProperties">essentialProperties</a></span> - Variable in class com.google.android.exoplayer2.source.dash.manifest.<a href="com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.RepresentationInfo.html" title="class in com.google.android.exoplayer2.source.dash.manifest">DashManifestParser.RepresentationInfo</a></dt>
|
||||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/dash/manifest/Representation.html#essentialProperties">essentialProperties</a></span> - Variable in class com.google.android.exoplayer2.source.dash.manifest.<a href="com/google/android/exoplayer2/source/dash/manifest/Representation.html" title="class in com.google.android.exoplayer2.source.dash.manifest">Representation</a></dt>
|
||||
<dd>
|
||||
<div class="block">Essential properties in the representation.</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/metadata/id3/Id3Decoder.FramePredicate.html#evaluate(int,int,int,int,int)">evaluate(int, int, int, int, int)</a></span> - Method in interface com.google.android.exoplayer2.metadata.id3.<a href="com/google/android/exoplayer2/metadata/id3/Id3Decoder.FramePredicate.html" title="interface in com.google.android.exoplayer2.metadata.id3">Id3Decoder.FramePredicate</a></dt>
|
||||
<dd>
|
||||
<div class="block">Returns whether a frame with the specified parameters should be decoded.</div>
|
||||
|
|
@ -11285,6 +11295,16 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
instead.</div>
|
||||
</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/DefaultRenderersFactory.html#experimentalSetImmediateCodecStartAfterFlushEnabled(boolean)">experimentalSetImmediateCodecStartAfterFlushEnabled(boolean)</a></span> - Method in class com.google.android.exoplayer2.<a href="com/google/android/exoplayer2/DefaultRenderersFactory.html" title="class in com.google.android.exoplayer2">DefaultRenderersFactory</a></dt>
|
||||
<dd>
|
||||
<div class="block">Enable calling <a href="https://developer.android.com/reference/android/media/MediaCodec.html#start()" title="class or interface in android.media" class="externalLink"><code>MediaCodec.start()</code></a> immediately after <a href="https://developer.android.com/reference/android/media/MediaCodec.html?is-external=true#flush()" title="class or interface in android.media" class="externalLink" target="_top"><code>MediaCodec.flush()</code></a> on the
|
||||
playback thread, when operating the codec in asynchronous mode.</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/mediacodec/DefaultMediaCodecAdapterFactory.html#experimentalSetImmediateCodecStartAfterFlushEnabled(boolean)">experimentalSetImmediateCodecStartAfterFlushEnabled(boolean)</a></span> - Method in class com.google.android.exoplayer2.mediacodec.<a href="com/google/android/exoplayer2/mediacodec/DefaultMediaCodecAdapterFactory.html" title="class in com.google.android.exoplayer2.mediacodec">DefaultMediaCodecAdapterFactory</a></dt>
|
||||
<dd>
|
||||
<div class="block">Enable calling <a href="https://developer.android.com/reference/android/media/MediaCodec.html#start()" title="class or interface in android.media" class="externalLink"><code>MediaCodec.start()</code></a> immediately after <a href="https://developer.android.com/reference/android/media/MediaCodec.html?is-external=true#flush()" title="class or interface in android.media" class="externalLink" target="_top"><code>MediaCodec.flush()</code></a> on the
|
||||
playback thread, when operating the codec in asynchronous mode.</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/ExoPlayer.html#experimentalSetOffloadSchedulingEnabled(boolean)">experimentalSetOffloadSchedulingEnabled(boolean)</a></span> - Method in interface com.google.android.exoplayer2.<a href="com/google/android/exoplayer2/ExoPlayer.html" title="interface in com.google.android.exoplayer2">ExoPlayer</a></dt>
|
||||
<dd>
|
||||
<div class="block">Sets whether audio offload scheduling is enabled.</div>
|
||||
|
|
@ -13907,6 +13927,10 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.html#getCodec()">getCodec()</a></span> - Method in class com.google.android.exoplayer2.mediacodec.<a href="com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.html" title="class in com.google.android.exoplayer2.mediacodec">MediaCodecRenderer</a></dt>
|
||||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/DefaultRenderersFactory.html#getCodecAdapterFactory()">getCodecAdapterFactory()</a></span> - Method in class com.google.android.exoplayer2.<a href="com/google/android/exoplayer2/DefaultRenderersFactory.html" title="class in com.google.android.exoplayer2">DefaultRenderersFactory</a></dt>
|
||||
<dd>
|
||||
<div class="block">Returns the <a href="com/google/android/exoplayer2/mediacodec/MediaCodecAdapter.Factory.html" title="interface in com.google.android.exoplayer2.mediacodec"><code>MediaCodecAdapter.Factory</code></a> that will be used when creating <a href="com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.html" title="class in com.google.android.exoplayer2.mediacodec"><code>MediaCodecRenderer</code></a> instances.</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/util/Util.html#getCodecCountOfType(java.lang.String,@com.google.android.exoplayer2.C.TrackTypeint)">getCodecCountOfType(String, @com.google.android.exoplayer2.C.TrackType int)</a></span> - Static method in class com.google.android.exoplayer2.util.<a href="com/google/android/exoplayer2/util/Util.html" title="class in com.google.android.exoplayer2.util">Util</a></dt>
|
||||
<dd>
|
||||
<div class="block">Returns the number of codec strings in <code>codecs</code> whose type matches <code>trackType</code>.</div>
|
||||
|
|
@ -14392,7 +14416,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/Player.html#getCurrentWindowIndex()">getCurrentWindowIndex()</a></span> - Method in interface com.google.android.exoplayer2.<a href="com/google/android/exoplayer2/Player.html" title="interface in com.google.android.exoplayer2">Player</a></dt>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/Player.html#getCurrentMediaItem()"><code>Player.getCurrentMediaItem()</code></a> instead.</div>
|
||||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/Player.html#getCurrentMediaItemIndex()"><code>Player.getCurrentMediaItemIndex()</code></a> instead.</div>
|
||||
</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/ext/mediasession/MediaSessionConnector.CustomActionProvider.html#getCustomAction(com.google.android.exoplayer2.Player)">getCustomAction(Player)</a></span> - Method in interface com.google.android.exoplayer2.ext.mediasession.<a href="com/google/android/exoplayer2/ext/mediasession/MediaSessionConnector.CustomActionProvider.html" title="interface in com.google.android.exoplayer2.ext.mediasession">MediaSessionConnector.CustomActionProvider</a></dt>
|
||||
|
|
@ -16787,8 +16811,12 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/upstream/TeeDataSource.html#getResponseHeaders()">getResponseHeaders()</a></span> - Method in class com.google.android.exoplayer2.upstream.<a href="com/google/android/exoplayer2/upstream/TeeDataSource.html" title="class in com.google.android.exoplayer2.upstream">TeeDataSource</a></dt>
|
||||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/testutil/DataSourceContractTest.html#getResponseHeaders_caseInsensitive()">getResponseHeaders_caseInsensitive()</a></span> - Method in class com.google.android.exoplayer2.testutil.<a href="com/google/android/exoplayer2/testutil/DataSourceContractTest.html" title="class in com.google.android.exoplayer2.testutil">DataSourceContractTest</a></dt>
|
||||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/testutil/DataSourceContractTest.html#getResponseHeaders_isEmptyWhileNotOpen()">getResponseHeaders_isEmptyWhileNotOpen()</a></span> - Method in class com.google.android.exoplayer2.testutil.<a href="com/google/android/exoplayer2/testutil/DataSourceContractTest.html" title="class in com.google.android.exoplayer2.testutil">DataSourceContractTest</a></dt>
|
||||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/testutil/DataSourceContractTest.html#getResponseHeaders_noNullKeysOrValues()">getResponseHeaders_noNullKeysOrValues()</a></span> - Method in class com.google.android.exoplayer2.testutil.<a href="com/google/android/exoplayer2/testutil/DataSourceContractTest.html" title="class in com.google.android.exoplayer2.testutil">DataSourceContractTest</a></dt>
|
||||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/testutil/DataSourceContractTest.html#getResponseHeaders_resourceNotFound_isEmptyWhileNotOpen()">getResponseHeaders_resourceNotFound_isEmptyWhileNotOpen()</a></span> - Method in class com.google.android.exoplayer2.testutil.<a href="com/google/android/exoplayer2/testutil/DataSourceContractTest.html" title="class in com.google.android.exoplayer2.testutil">DataSourceContractTest</a></dt>
|
||||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/upstream/ParsingLoadable.html#getResult()">getResult()</a></span> - Method in class com.google.android.exoplayer2.upstream.<a href="com/google/android/exoplayer2/upstream/ParsingLoadable.html" title="class in com.google.android.exoplayer2.upstream">ParsingLoadable</a></dt>
|
||||
|
|
@ -17057,7 +17085,10 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/trackselection/DefaultTrackSelector.Parameters.html#getSelectionOverride(int,com.google.android.exoplayer2.source.TrackGroupArray)">getSelectionOverride(int, TrackGroupArray)</a></span> - Method in class com.google.android.exoplayer2.trackselection.<a href="com/google/android/exoplayer2/trackselection/DefaultTrackSelector.Parameters.html" title="class in com.google.android.exoplayer2.trackselection">DefaultTrackSelector.Parameters</a></dt>
|
||||
<dd>
|
||||
<div class="block">Returns the override for the specified renderer and <a href="com/google/android/exoplayer2/source/TrackGroupArray.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroupArray</code></a>.</div>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
|
||||
<div class="deprecationComment">Only works to retrieve the overrides set with the deprecated <a href="com/google/android/exoplayer2/trackselection/DefaultTrackSelector.ParametersBuilder.html#setSelectionOverride(int,com.google.android.exoplayer2.source.TrackGroupArray,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride)"><code>DefaultTrackSelector.ParametersBuilder.setSelectionOverride(int, TrackGroupArray, SelectionOverride)</code></a>. Use
|
||||
<a href="com/google/android/exoplayer2/trackselection/TrackSelectionParameters.html#trackSelectionOverrides"><code>TrackSelectionParameters.trackSelectionOverrides</code></a> instead.</div>
|
||||
</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/testutil/FakeTrackSelection.html#getSelectionReason()">getSelectionReason()</a></span> - Method in class com.google.android.exoplayer2.testutil.<a href="com/google/android/exoplayer2/testutil/FakeTrackSelection.html" title="class in com.google.android.exoplayer2.testutil">FakeTrackSelection</a></dt>
|
||||
<dd> </dd>
|
||||
|
|
@ -17623,6 +17654,10 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<dd>
|
||||
<div class="block">Returns the track type that the <a href="com/google/android/exoplayer2/Renderer.html" title="interface in com.google.android.exoplayer2"><code>Renderer</code></a> handles.</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.TrackSelectionOverride.html#getTrackType()">getTrackType()</a></span> - Method in class com.google.android.exoplayer2.trackselection.<a href="com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.TrackSelectionOverride.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionOverrides.TrackSelectionOverride</a></dt>
|
||||
<dd>
|
||||
<div class="block">Returns the <a href="com/google/android/exoplayer2/C.TrackType.html" title="annotation in com.google.android.exoplayer2"><code>C.TrackType</code></a> of the overriden track group.</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/TracksInfo.TrackGroupInfo.html#getTrackType()">getTrackType()</a></span> - Method in class com.google.android.exoplayer2.<a href="com/google/android/exoplayer2/TracksInfo.TrackGroupInfo.html" title="class in com.google.android.exoplayer2">TracksInfo.TrackGroupInfo</a></dt>
|
||||
<dd>
|
||||
<div class="block">Returns the <a href="com/google/android/exoplayer2/C.TrackType.html" title="annotation in com.google.android.exoplayer2"><code>C.TrackType</code></a> of the tracks in the <a href="com/google/android/exoplayer2/source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a>.</div>
|
||||
|
|
@ -18715,7 +18750,10 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/trackselection/DefaultTrackSelector.Parameters.html#hasSelectionOverride(int,com.google.android.exoplayer2.source.TrackGroupArray)">hasSelectionOverride(int, TrackGroupArray)</a></span> - Method in class com.google.android.exoplayer2.trackselection.<a href="com/google/android/exoplayer2/trackselection/DefaultTrackSelector.Parameters.html" title="class in com.google.android.exoplayer2.trackselection">DefaultTrackSelector.Parameters</a></dt>
|
||||
<dd>
|
||||
<div class="block">Returns whether there is an override for the specified renderer and <a href="com/google/android/exoplayer2/source/TrackGroupArray.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroupArray</code></a>.</div>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
|
||||
<div class="deprecationComment">Only works to retrieve the overrides set with the deprecated <a href="com/google/android/exoplayer2/trackselection/DefaultTrackSelector.ParametersBuilder.html#setSelectionOverride(int,com.google.android.exoplayer2.source.TrackGroupArray,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride)"><code>DefaultTrackSelector.ParametersBuilder.setSelectionOverride(int, TrackGroupArray, SelectionOverride)</code></a>. Use
|
||||
<a href="com/google/android/exoplayer2/trackselection/TrackSelectionParameters.html#trackSelectionOverrides"><code>TrackSelectionParameters.trackSelectionOverrides</code></a> instead.</div>
|
||||
</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/testutil/truth/SpannedSubject.html#hasStrikethroughSpanBetween(int,int)">hasStrikethroughSpanBetween(int, int)</a></span> - Method in class com.google.android.exoplayer2.testutil.truth.<a href="com/google/android/exoplayer2/testutil/truth/SpannedSubject.html" title="class in com.google.android.exoplayer2.testutil.truth">SpannedSubject</a></dt>
|
||||
<dd>
|
||||
|
|
@ -21652,11 +21690,6 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/smoothstreaming/manifest/SsManifest.StreamElement.html#maxWidth">maxWidth</a></span> - Variable in class com.google.android.exoplayer2.source.smoothstreaming.manifest.<a href="com/google/android/exoplayer2/source/smoothstreaming/manifest/SsManifest.StreamElement.html" title="class in com.google.android.exoplayer2.source.smoothstreaming.manifest">SsManifest.StreamElement</a></dt>
|
||||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/trackselection/DefaultTrackSelector.html#maybeApplyOverride(com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo,com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters,int,com.google.android.exoplayer2.trackselection.ExoTrackSelection.Definition)">maybeApplyOverride(MappingTrackSelector.MappedTrackInfo, DefaultTrackSelector.Parameters, int, ExoTrackSelection.Definition)</a></span> - Method in class com.google.android.exoplayer2.trackselection.<a href="com/google/android/exoplayer2/trackselection/DefaultTrackSelector.html" title="class in com.google.android.exoplayer2.trackselection">DefaultTrackSelector</a></dt>
|
||||
<dd>
|
||||
<div class="block">Returns the <a href="com/google/android/exoplayer2/trackselection/ExoTrackSelection.Definition.html" title="class in com.google.android.exoplayer2.trackselection"><code>ExoTrackSelection.Definition</code></a> of a renderer after applying selection
|
||||
overriding and renderer disabling.</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/video/DecoderVideoRenderer.html#maybeDropBuffersToKeyframe(long)">maybeDropBuffersToKeyframe(long)</a></span> - Method in class com.google.android.exoplayer2.video.<a href="com/google/android/exoplayer2/video/DecoderVideoRenderer.html" title="class in com.google.android.exoplayer2.video">DecoderVideoRenderer</a></dt>
|
||||
<dd>
|
||||
<div class="block">Drops frames from the current output buffer to the next keyframe at or before the playback
|
||||
|
|
@ -22895,7 +22928,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/dash/manifest/SegmentBase.MultiSegmentBase.html#%3Cinit%3E(com.google.android.exoplayer2.source.dash.manifest.RangedUri,long,long,long,long,java.util.List,long,long,long)">MultiSegmentBase(RangedUri, long, long, long, long, List<SegmentBase.SegmentTimelineElement>, long, long, long)</a></span> - Constructor for class com.google.android.exoplayer2.source.dash.manifest.<a href="com/google/android/exoplayer2/source/dash/manifest/SegmentBase.MultiSegmentBase.html" title="class in com.google.android.exoplayer2.source.dash.manifest">SegmentBase.MultiSegmentBase</a></dt>
|
||||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/dash/manifest/Representation.MultiSegmentRepresentation.html#%3Cinit%3E(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase.MultiSegmentBase,java.util.List)">MultiSegmentRepresentation(long, Format, List<BaseUrl>, SegmentBase.MultiSegmentBase, List<Descriptor>)</a></span> - Constructor for class com.google.android.exoplayer2.source.dash.manifest.<a href="com/google/android/exoplayer2/source/dash/manifest/Representation.MultiSegmentRepresentation.html" title="class in com.google.android.exoplayer2.source.dash.manifest">Representation.MultiSegmentRepresentation</a></dt>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/dash/manifest/Representation.MultiSegmentRepresentation.html#%3Cinit%3E(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase.MultiSegmentBase,java.util.List,java.util.List,java.util.List)">MultiSegmentRepresentation(long, Format, List<BaseUrl>, SegmentBase.MultiSegmentBase, List<Descriptor>, List<Descriptor>, List<Descriptor>)</a></span> - Constructor for class com.google.android.exoplayer2.source.dash.manifest.<a href="com/google/android/exoplayer2/source/dash/manifest/Representation.MultiSegmentRepresentation.html" title="class in com.google.android.exoplayer2.source.dash.manifest">Representation.MultiSegmentRepresentation</a></dt>
|
||||
<dd>
|
||||
<div class="block">Creates the multi-segment Representation.</div>
|
||||
</dd>
|
||||
|
|
@ -23073,11 +23106,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<dd>
|
||||
<div class="block">Constructs a new instance.</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/dash/manifest/Representation.html#newInstance(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase,java.util.List)">newInstance(long, Format, List<BaseUrl>, SegmentBase, List<Descriptor>)</a></span> - Static method in class com.google.android.exoplayer2.source.dash.manifest.<a href="com/google/android/exoplayer2/source/dash/manifest/Representation.html" title="class in com.google.android.exoplayer2.source.dash.manifest">Representation</a></dt>
|
||||
<dd>
|
||||
<div class="block">Constructs a new instance.</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/dash/manifest/Representation.html#newInstance(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase,java.util.List,java.lang.String)">newInstance(long, Format, List<BaseUrl>, SegmentBase, List<Descriptor>, String)</a></span> - Static method in class com.google.android.exoplayer2.source.dash.manifest.<a href="com/google/android/exoplayer2/source/dash/manifest/Representation.html" title="class in com.google.android.exoplayer2.source.dash.manifest">Representation</a></dt>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/dash/manifest/Representation.html#newInstance(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase,java.util.List,java.util.List,java.util.List,java.lang.String)">newInstance(long, Format, List<BaseUrl>, SegmentBase, List<Descriptor>, List<Descriptor>, List<Descriptor>, String)</a></span> - Static method in class com.google.android.exoplayer2.source.dash.manifest.<a href="com/google/android/exoplayer2/source/dash/manifest/Representation.html" title="class in com.google.android.exoplayer2.source.dash.manifest">Representation</a></dt>
|
||||
<dd>
|
||||
<div class="block">Constructs a new instance.</div>
|
||||
</dd>
|
||||
|
|
@ -27194,6 +27223,8 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/metadata/flac/VorbisComment.html#populateMediaMetadata(com.google.android.exoplayer2.MediaMetadata.Builder)">populateMediaMetadata(MediaMetadata.Builder)</a></span> - Method in class com.google.android.exoplayer2.metadata.flac.<a href="com/google/android/exoplayer2/metadata/flac/VorbisComment.html" title="class in com.google.android.exoplayer2.metadata.flac">VorbisComment</a></dt>
|
||||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/metadata/icy/IcyHeaders.html#populateMediaMetadata(com.google.android.exoplayer2.MediaMetadata.Builder)">populateMediaMetadata(MediaMetadata.Builder)</a></span> - Method in class com.google.android.exoplayer2.metadata.icy.<a href="com/google/android/exoplayer2/metadata/icy/IcyHeaders.html" title="class in com.google.android.exoplayer2.metadata.icy">IcyHeaders</a></dt>
|
||||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/metadata/icy/IcyInfo.html#populateMediaMetadata(com.google.android.exoplayer2.MediaMetadata.Builder)">populateMediaMetadata(MediaMetadata.Builder)</a></span> - Method in class com.google.android.exoplayer2.metadata.icy.<a href="com/google/android/exoplayer2/metadata/icy/IcyInfo.html" title="class in com.google.android.exoplayer2.metadata.icy">IcyInfo</a></dt>
|
||||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/metadata/id3/ApicFrame.html#populateMediaMetadata(com.google.android.exoplayer2.MediaMetadata.Builder)">populateMediaMetadata(MediaMetadata.Builder)</a></span> - Method in class com.google.android.exoplayer2.metadata.id3.<a href="com/google/android/exoplayer2/metadata/id3/ApicFrame.html" title="class in com.google.android.exoplayer2.metadata.id3">ApicFrame</a></dt>
|
||||
|
|
@ -29541,7 +29572,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/dash/DefaultDashChunkSource.html#representationHolders">representationHolders</a></span> - Variable in class com.google.android.exoplayer2.source.dash.<a href="com/google/android/exoplayer2/source/dash/DefaultDashChunkSource.html" title="class in com.google.android.exoplayer2.source.dash">DefaultDashChunkSource</a></dt>
|
||||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.RepresentationInfo.html#%3Cinit%3E(com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase,java.lang.String,java.util.ArrayList,java.util.ArrayList,long)">RepresentationInfo(Format, List<BaseUrl>, SegmentBase, String, ArrayList<DrmInitData.SchemeData>, ArrayList<Descriptor>, long)</a></span> - Constructor for class com.google.android.exoplayer2.source.dash.manifest.<a href="com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.RepresentationInfo.html" title="class in com.google.android.exoplayer2.source.dash.manifest">DashManifestParser.RepresentationInfo</a></dt>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.RepresentationInfo.html#%3Cinit%3E(com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase,java.lang.String,java.util.ArrayList,java.util.ArrayList,java.util.List,java.util.List,long)">RepresentationInfo(Format, List<BaseUrl>, SegmentBase, String, ArrayList<DrmInitData.SchemeData>, ArrayList<Descriptor>, List<Descriptor>, List<Descriptor>, long)</a></span> - Constructor for class com.google.android.exoplayer2.source.dash.manifest.<a href="com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.RepresentationInfo.html" title="class in com.google.android.exoplayer2.source.dash.manifest">DashManifestParser.RepresentationInfo</a></dt>
|
||||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/dash/manifest/AdaptationSet.html#representations">representations</a></span> - Variable in class com.google.android.exoplayer2.source.dash.manifest.<a href="com/google/android/exoplayer2/source/dash/manifest/AdaptationSet.html" title="class in com.google.android.exoplayer2.source.dash.manifest">AdaptationSet</a></dt>
|
||||
<dd>
|
||||
|
|
@ -30028,6 +30059,10 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/ui/PlayerNotificationManager.Builder.html#rewindActionIconResourceId">rewindActionIconResourceId</a></span> - Variable in class com.google.android.exoplayer2.ui.<a href="com/google/android/exoplayer2/ui/PlayerNotificationManager.Builder.html" title="class in com.google.android.exoplayer2.ui">PlayerNotificationManager.Builder</a></dt>
|
||||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/audio/WavUtil.html#RF64_FOURCC">RF64_FOURCC</a></span> - Static variable in class com.google.android.exoplayer2.audio.<a href="com/google/android/exoplayer2/audio/WavUtil.html" title="class in com.google.android.exoplayer2.audio">WavUtil</a></dt>
|
||||
<dd>
|
||||
<div class="block">Four character code for "RF64".</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/audio/WavUtil.html#RIFF_FOURCC">RIFF_FOURCC</a></span> - Static variable in class com.google.android.exoplayer2.audio.<a href="com/google/android/exoplayer2/audio/WavUtil.html" title="class in com.google.android.exoplayer2.audio">WavUtil</a></dt>
|
||||
<dd>
|
||||
<div class="block">Four character code for "RIFF".</div>
|
||||
|
|
@ -32395,11 +32430,17 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<div class="block">Sets the <a href="com/google/android/exoplayer2/upstream/HttpDataSource.Factory.html" title="interface in com.google.android.exoplayer2.upstream"><code>HttpDataSource.Factory</code></a> to be used for creating <a href="com/google/android/exoplayer2/drm/HttpMediaDrmCallback.html" title="class in com.google.android.exoplayer2.drm"><code>HttpMediaDrmCallbacks</code></a> which executes key and provisioning requests over HTTP.</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/dash/DashMediaSource.Factory.html#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">setDrmHttpDataSourceFactory(HttpDataSource.Factory)</a></span> - Method in class com.google.android.exoplayer2.source.dash.<a href="com/google/android/exoplayer2/source/dash/DashMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.dash">DashMediaSource.Factory</a></dt>
|
||||
<dd> </dd>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/DefaultMediaSourceFactory.html#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">setDrmHttpDataSourceFactory(HttpDataSource.Factory)</a></span> - Method in class com.google.android.exoplayer2.source.<a href="com/google/android/exoplayer2/source/DefaultMediaSourceFactory.html" title="class in com.google.android.exoplayer2.source">DefaultMediaSourceFactory</a></dt>
|
||||
<dd> </dd>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/hls/HlsMediaSource.Factory.html#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">setDrmHttpDataSourceFactory(HttpDataSource.Factory)</a></span> - Method in class com.google.android.exoplayer2.source.hls.<a href="com/google/android/exoplayer2/source/hls/HlsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.hls">HlsMediaSource.Factory</a></dt>
|
||||
<dd> </dd>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/MediaSourceFactory.html#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">setDrmHttpDataSourceFactory(HttpDataSource.Factory)</a></span> - Method in interface com.google.android.exoplayer2.source.<a href="com/google/android/exoplayer2/source/MediaSourceFactory.html" title="interface in com.google.android.exoplayer2.source">MediaSourceFactory</a></dt>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
|
||||
|
|
@ -32409,7 +32450,9 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/ProgressiveMediaSource.Factory.html#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">setDrmHttpDataSourceFactory(HttpDataSource.Factory)</a></span> - Method in class com.google.android.exoplayer2.source.<a href="com/google/android/exoplayer2/source/ProgressiveMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source">ProgressiveMediaSource.Factory</a></dt>
|
||||
<dd> </dd>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/rtsp/RtspMediaSource.Factory.html#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">setDrmHttpDataSourceFactory(HttpDataSource.Factory)</a></span> - Method in class com.google.android.exoplayer2.source.rtsp.<a href="com/google/android/exoplayer2/source/rtsp/RtspMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.rtsp">RtspMediaSource.Factory</a></dt>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
|
||||
|
|
@ -32417,7 +32460,9 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.Factory.html#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">setDrmHttpDataSourceFactory(HttpDataSource.Factory)</a></span> - Method in class com.google.android.exoplayer2.source.smoothstreaming.<a href="com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.smoothstreaming">SsMediaSource.Factory</a></dt>
|
||||
<dd> </dd>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/testutil/FakeMediaSourceFactory.html#setDrmHttpDataSourceFactory(com.google.android.exoplayer2.upstream.HttpDataSource.Factory)">setDrmHttpDataSourceFactory(HttpDataSource.Factory)</a></span> - Method in class com.google.android.exoplayer2.testutil.<a href="com/google/android/exoplayer2/testutil/FakeMediaSourceFactory.html" title="class in com.google.android.exoplayer2.testutil">FakeMediaSourceFactory</a></dt>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
|
|
@ -32477,11 +32522,17 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/dash/DashMediaSource.Factory.html#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">setDrmSessionManager(DrmSessionManager)</a></span> - Method in class com.google.android.exoplayer2.source.dash.<a href="com/google/android/exoplayer2/source/dash/DashMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.dash">DashMediaSource.Factory</a></dt>
|
||||
<dd> </dd>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/DefaultMediaSourceFactory.html#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">setDrmSessionManager(DrmSessionManager)</a></span> - Method in class com.google.android.exoplayer2.source.<a href="com/google/android/exoplayer2/source/DefaultMediaSourceFactory.html" title="class in com.google.android.exoplayer2.source">DefaultMediaSourceFactory</a></dt>
|
||||
<dd> </dd>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/hls/HlsMediaSource.Factory.html#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">setDrmSessionManager(DrmSessionManager)</a></span> - Method in class com.google.android.exoplayer2.source.hls.<a href="com/google/android/exoplayer2/source/hls/HlsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.hls">HlsMediaSource.Factory</a></dt>
|
||||
<dd> </dd>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/MediaSourceFactory.html#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">setDrmSessionManager(DrmSessionManager)</a></span> - Method in interface com.google.android.exoplayer2.source.<a href="com/google/android/exoplayer2/source/MediaSourceFactory.html" title="interface in com.google.android.exoplayer2.source">MediaSourceFactory</a></dt>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
|
||||
|
|
@ -32490,7 +32541,9 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/ProgressiveMediaSource.Factory.html#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">setDrmSessionManager(DrmSessionManager)</a></span> - Method in class com.google.android.exoplayer2.source.<a href="com/google/android/exoplayer2/source/ProgressiveMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source">ProgressiveMediaSource.Factory</a></dt>
|
||||
<dd> </dd>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/rtsp/RtspMediaSource.Factory.html#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">setDrmSessionManager(DrmSessionManager)</a></span> - Method in class com.google.android.exoplayer2.source.rtsp.<a href="com/google/android/exoplayer2/source/rtsp/RtspMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.rtsp">RtspMediaSource.Factory</a></dt>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
|
||||
|
|
@ -32498,7 +32551,9 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.Factory.html#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">setDrmSessionManager(DrmSessionManager)</a></span> - Method in class com.google.android.exoplayer2.source.smoothstreaming.<a href="com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.smoothstreaming">SsMediaSource.Factory</a></dt>
|
||||
<dd> </dd>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/testutil/FakeMediaSourceFactory.html#setDrmSessionManager(com.google.android.exoplayer2.drm.DrmSessionManager)">setDrmSessionManager(DrmSessionManager)</a></span> - Method in class com.google.android.exoplayer2.testutil.<a href="com/google/android/exoplayer2/testutil/FakeMediaSourceFactory.html" title="class in com.google.android.exoplayer2.testutil">FakeMediaSourceFactory</a></dt>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
|
|
@ -32529,11 +32584,17 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<div class="block">Sets the optional user agent to be used for DRM requests.</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/dash/DashMediaSource.Factory.html#setDrmUserAgent(java.lang.String)">setDrmUserAgent(String)</a></span> - Method in class com.google.android.exoplayer2.source.dash.<a href="com/google/android/exoplayer2/source/dash/DashMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.dash">DashMediaSource.Factory</a></dt>
|
||||
<dd> </dd>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/DefaultMediaSourceFactory.html#setDrmUserAgent(java.lang.String)">setDrmUserAgent(String)</a></span> - Method in class com.google.android.exoplayer2.source.<a href="com/google/android/exoplayer2/source/DefaultMediaSourceFactory.html" title="class in com.google.android.exoplayer2.source">DefaultMediaSourceFactory</a></dt>
|
||||
<dd> </dd>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/hls/HlsMediaSource.Factory.html#setDrmUserAgent(java.lang.String)">setDrmUserAgent(String)</a></span> - Method in class com.google.android.exoplayer2.source.hls.<a href="com/google/android/exoplayer2/source/hls/HlsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.hls">HlsMediaSource.Factory</a></dt>
|
||||
<dd> </dd>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/MediaSourceFactory.html#setDrmUserAgent(java.lang.String)">setDrmUserAgent(String)</a></span> - Method in interface com.google.android.exoplayer2.source.<a href="com/google/android/exoplayer2/source/MediaSourceFactory.html" title="interface in com.google.android.exoplayer2.source">MediaSourceFactory</a></dt>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
|
||||
|
|
@ -32543,7 +32604,9 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/ProgressiveMediaSource.Factory.html#setDrmUserAgent(java.lang.String)">setDrmUserAgent(String)</a></span> - Method in class com.google.android.exoplayer2.source.<a href="com/google/android/exoplayer2/source/ProgressiveMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source">ProgressiveMediaSource.Factory</a></dt>
|
||||
<dd> </dd>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/rtsp/RtspMediaSource.Factory.html#setDrmUserAgent(java.lang.String)">setDrmUserAgent(String)</a></span> - Method in class com.google.android.exoplayer2.source.rtsp.<a href="com/google/android/exoplayer2/source/rtsp/RtspMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.rtsp">RtspMediaSource.Factory</a></dt>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
|
||||
|
|
@ -32551,7 +32614,9 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.Factory.html#setDrmUserAgent(java.lang.String)">setDrmUserAgent(String)</a></span> - Method in class com.google.android.exoplayer2.source.smoothstreaming.<a href="com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.Factory.html" title="class in com.google.android.exoplayer2.source.smoothstreaming">SsMediaSource.Factory</a></dt>
|
||||
<dd> </dd>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/testutil/FakeMediaSourceFactory.html#setDrmUserAgent(java.lang.String)">setDrmUserAgent(String)</a></span> - Method in class com.google.android.exoplayer2.testutil.<a href="com/google/android/exoplayer2/testutil/FakeMediaSourceFactory.html" title="class in com.google.android.exoplayer2.testutil">FakeMediaSourceFactory</a></dt>
|
||||
<dd>
|
||||
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
|
||||
|
|
@ -34991,6 +35056,10 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<dd>
|
||||
<div class="block">Sets all states to <a href="com/google/android/exoplayer2/offline/Download.html#STATE_REMOVING"><code>Download.STATE_REMOVING</code></a>.</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/MediaMetadata.Builder.html#setStation(java.lang.CharSequence)">setStation(CharSequence)</a></span> - Method in class com.google.android.exoplayer2.<a href="com/google/android/exoplayer2/MediaMetadata.Builder.html" title="class in com.google.android.exoplayer2">MediaMetadata.Builder</a></dt>
|
||||
<dd>
|
||||
<div class="block">Sets the name of the station streaming the media.</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/Format.Builder.html#setStereoMode(int)">setStereoMode(int)</a></span> - Method in class com.google.android.exoplayer2.<a href="com/google/android/exoplayer2/Format.Builder.html" title="class in com.google.android.exoplayer2">Format.Builder</a></dt>
|
||||
<dd>
|
||||
<div class="block">Sets <a href="com/google/android/exoplayer2/Format.html#stereoMode"><code>Format.stereoMode</code></a>.</div>
|
||||
|
|
@ -36183,7 +36252,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/dash/manifest/SegmentBase.SingleSegmentBase.html#%3Cinit%3E(com.google.android.exoplayer2.source.dash.manifest.RangedUri,long,long,long,long)">SingleSegmentBase(RangedUri, long, long, long, long)</a></span> - Constructor for class com.google.android.exoplayer2.source.dash.manifest.<a href="com/google/android/exoplayer2/source/dash/manifest/SegmentBase.SingleSegmentBase.html" title="class in com.google.android.exoplayer2.source.dash.manifest">SegmentBase.SingleSegmentBase</a></dt>
|
||||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/dash/manifest/Representation.SingleSegmentRepresentation.html#%3Cinit%3E(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase.SingleSegmentBase,java.util.List,java.lang.String,long)">SingleSegmentRepresentation(long, Format, List<BaseUrl>, SegmentBase.SingleSegmentBase, List<Descriptor>, String, long)</a></span> - Constructor for class com.google.android.exoplayer2.source.dash.manifest.<a href="com/google/android/exoplayer2/source/dash/manifest/Representation.SingleSegmentRepresentation.html" title="class in com.google.android.exoplayer2.source.dash.manifest">Representation.SingleSegmentRepresentation</a></dt>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/dash/manifest/Representation.SingleSegmentRepresentation.html#%3Cinit%3E(long,com.google.android.exoplayer2.Format,java.util.List,com.google.android.exoplayer2.source.dash.manifest.SegmentBase.SingleSegmentBase,java.util.List,java.util.List,java.util.List,java.lang.String,long)">SingleSegmentRepresentation(long, Format, List<BaseUrl>, SegmentBase.SingleSegmentBase, List<Descriptor>, List<Descriptor>, List<Descriptor>, String, long)</a></span> - Constructor for class com.google.android.exoplayer2.source.dash.manifest.<a href="com/google/android/exoplayer2/source/dash/manifest/Representation.SingleSegmentRepresentation.html" title="class in com.google.android.exoplayer2.source.dash.manifest">Representation.SingleSegmentRepresentation</a></dt>
|
||||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/audio/AudioSink.html#SINK_FORMAT_SUPPORTED_DIRECTLY">SINK_FORMAT_SUPPORTED_DIRECTLY</a></span> - Static variable in interface com.google.android.exoplayer2.audio.<a href="com/google/android/exoplayer2/audio/AudioSink.html" title="interface in com.google.android.exoplayer2.audio">AudioSink</a></dt>
|
||||
<dd>
|
||||
|
|
@ -36935,7 +37004,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/Player.html#STATE_IDLE">STATE_IDLE</a></span> - Static variable in interface com.google.android.exoplayer2.<a href="com/google/android/exoplayer2/Player.html" title="interface in com.google.android.exoplayer2">Player</a></dt>
|
||||
<dd>
|
||||
<div class="block">The player is idle, and must be <a href="com/google/android/exoplayer2/Player.html#prepare()"><code>prepared</code></a> before it will play the media.</div>
|
||||
<div class="block">The player is idle, meaning it holds only limited resources.</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/drm/DrmSession.html#STATE_OPENED">STATE_OPENED</a></span> - Static variable in interface com.google.android.exoplayer2.drm.<a href="com/google/android/exoplayer2/drm/DrmSession.html" title="interface in com.google.android.exoplayer2.drm">DrmSession</a></dt>
|
||||
<dd>
|
||||
|
|
@ -36981,6 +37050,10 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<dd>
|
||||
<div class="block">The state of each ad in the ad group.</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/MediaMetadata.html#station">station</a></span> - Variable in class com.google.android.exoplayer2.<a href="com/google/android/exoplayer2/MediaMetadata.html" title="class in com.google.android.exoplayer2">MediaMetadata</a></dt>
|
||||
<dd>
|
||||
<div class="block">Optional name of the station streaming the media.</div>
|
||||
</dd>
|
||||
<dt><a href="com/google/android/exoplayer2/upstream/StatsDataSource.html" title="class in com.google.android.exoplayer2.upstream"><span class="typeNameLink">StatsDataSource</span></a> - Class in <a href="com/google/android/exoplayer2/upstream/package-summary.html">com.google.android.exoplayer2.upstream</a></dt>
|
||||
<dd>
|
||||
<div class="block"><a href="com/google/android/exoplayer2/upstream/DataSource.html" title="interface in com.google.android.exoplayer2.upstream"><code>DataSource</code></a> wrapper which keeps track of bytes transferred, redirected uris, and response
|
||||
|
|
@ -37021,7 +37094,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/Player.html#stop()">stop()</a></span> - Method in interface com.google.android.exoplayer2.<a href="com/google/android/exoplayer2/Player.html" title="interface in com.google.android.exoplayer2">Player</a></dt>
|
||||
<dd>
|
||||
<div class="block">Stops playback without resetting the player.</div>
|
||||
<div class="block">Stops playback without resetting the playlist.</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/Renderer.html#stop()">stop()</a></span> - Method in interface com.google.android.exoplayer2.<a href="com/google/android/exoplayer2/Renderer.html" title="interface in com.google.android.exoplayer2">Renderer</a></dt>
|
||||
<dd>
|
||||
|
|
@ -37406,6 +37479,12 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<dd>
|
||||
<div class="block">Supplemental properties in the adaptation set.</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.RepresentationInfo.html#supplementalProperties">supplementalProperties</a></span> - Variable in class com.google.android.exoplayer2.source.dash.manifest.<a href="com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.RepresentationInfo.html" title="class in com.google.android.exoplayer2.source.dash.manifest">DashManifestParser.RepresentationInfo</a></dt>
|
||||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/source/dash/manifest/Representation.html#supplementalProperties">supplementalProperties</a></span> - Variable in class com.google.android.exoplayer2.source.dash.manifest.<a href="com/google/android/exoplayer2/source/dash/manifest/Representation.html" title="class in com.google.android.exoplayer2.source.dash.manifest">Representation</a></dt>
|
||||
<dd>
|
||||
<div class="block">Supplemental properties in the adaptation set.</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/ext/opus/OpusLibrary.html#supportsCryptoType(@com.google.android.exoplayer2.C.CryptoTypeint)">supportsCryptoType(@com.google.android.exoplayer2.C.CryptoType int)</a></span> - Static method in class com.google.android.exoplayer2.ext.opus.<a href="com/google/android/exoplayer2/ext/opus/OpusLibrary.html" title="class in com.google.android.exoplayer2.ext.opus">OpusLibrary</a></dt>
|
||||
<dd>
|
||||
<div class="block">Returns whether the library supports the given <a href="com/google/android/exoplayer2/C.CryptoType.html" title="annotation in com.google.android.exoplayer2"><code>C.CryptoType</code></a>.</div>
|
||||
|
|
@ -38439,7 +38518,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.TrackSelectionOverride.html#trackGroup">trackGroup</a></span> - Variable in class com.google.android.exoplayer2.trackselection.<a href="com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.TrackSelectionOverride.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionOverrides.TrackSelectionOverride</a></dt>
|
||||
<dd>
|
||||
<div class="block">The <a href="com/google/android/exoplayer2/source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a> whose <a href="com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.TrackSelectionOverride.html#trackIndexes"><code>TrackSelectionOverrides.TrackSelectionOverride.trackIndexes</code></a> are forced to be selected.</div>
|
||||
<div class="block">The <a href="com/google/android/exoplayer2/source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a> whose <a href="com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.TrackSelectionOverride.html#trackIndices"><code>TrackSelectionOverrides.TrackSelectionOverride.trackIndices</code></a> are forced to be selected.</div>
|
||||
</dd>
|
||||
<dt><a href="com/google/android/exoplayer2/source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><span class="typeNameLink">TrackGroup</span></a> - Class in <a href="com/google/android/exoplayer2/source/package-summary.html">com.google.android.exoplayer2.source</a></dt>
|
||||
<dd>
|
||||
|
|
@ -38471,9 +38550,9 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
<div class="deprecationComment">Use <a href="com/google/android/exoplayer2/offline/StreamKey.html#streamIndex"><code>StreamKey.streamIndex</code></a>.</div>
|
||||
</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.TrackSelectionOverride.html#trackIndexes">trackIndexes</a></span> - Variable in class com.google.android.exoplayer2.trackselection.<a href="com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.TrackSelectionOverride.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionOverrides.TrackSelectionOverride</a></dt>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.TrackSelectionOverride.html#trackIndices">trackIndices</a></span> - Variable in class com.google.android.exoplayer2.trackselection.<a href="com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.TrackSelectionOverride.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionOverrides.TrackSelectionOverride</a></dt>
|
||||
<dd>
|
||||
<div class="block">The index of tracks in a <a href="com/google/android/exoplayer2/source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a> to be selected.</div>
|
||||
<div class="block">The indices of tracks in a <a href="com/google/android/exoplayer2/source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a> to be selected.</div>
|
||||
</dd>
|
||||
<dt><a href="com/google/android/exoplayer2/ui/TrackNameProvider.html" title="interface in com.google.android.exoplayer2.ui"><span class="typeNameLink">TrackNameProvider</span></a> - Interface in <a href="com/google/android/exoplayer2/ui/package-summary.html">com.google.android.exoplayer2.ui</a></dt>
|
||||
<dd>
|
||||
|
|
@ -38551,7 +38630,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.TrackSelectionOverride.html#%3Cinit%3E(com.google.android.exoplayer2.source.TrackGroup,java.util.List)">TrackSelectionOverride(TrackGroup, List<Integer>)</a></span> - Constructor for class com.google.android.exoplayer2.trackselection.<a href="com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.TrackSelectionOverride.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionOverrides.TrackSelectionOverride</a></dt>
|
||||
<dd>
|
||||
<div class="block">Constructs an instance to force <code>trackIndexes</code> in <code>trackGroup</code> to be selected.</div>
|
||||
<div class="block">Constructs an instance to force <code>trackIndices</code> in <code>trackGroup</code> to be selected.</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="com/google/android/exoplayer2/trackselection/TrackSelectionParameters.html#trackSelectionOverrides">trackSelectionOverrides</a></span> - Variable in class com.google.android.exoplayer2.trackselection.<a href="com/google/android/exoplayer2/trackselection/TrackSelectionParameters.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionParameters</a></dt>
|
||||
<dd>
|
||||
|
|
@ -38567,7 +38646,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
|
|||
</dd>
|
||||
<dt><a href="com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.TrackSelectionOverride.html" title="class in com.google.android.exoplayer2.trackselection"><span class="typeNameLink">TrackSelectionOverrides.TrackSelectionOverride</span></a> - Class in <a href="com/google/android/exoplayer2/trackselection/package-summary.html">com.google.android.exoplayer2.trackselection</a></dt>
|
||||
<dd>
|
||||
<div class="block">Forces the selection of <a href="com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.TrackSelectionOverride.html#trackIndexes"><code>TrackSelectionOverrides.TrackSelectionOverride.trackIndexes</code></a> for a <a href="com/google/android/exoplayer2/source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a>.</div>
|
||||
<div class="block">Forces the selection of <a href="com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.TrackSelectionOverride.html#trackIndices"><code>TrackSelectionOverrides.TrackSelectionOverride.trackIndices</code></a> for a <a href="com/google/android/exoplayer2/source/TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a>.</div>
|
||||
</dd>
|
||||
<dt><a href="com/google/android/exoplayer2/trackselection/TrackSelectionParameters.html" title="class in com.google.android.exoplayer2.trackselection"><span class="typeNameLink">TrackSelectionParameters</span></a> - Class in <a href="com/google/android/exoplayer2/trackselection/package-summary.html">com.google.android.exoplayer2.trackselection</a></dt>
|
||||
<dd>
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
Binary file not shown.
|
|
@ -1 +1 @@
|
|||
packageSearchIndex = [{"l":"All Packages","url":"allpackages-index.html"},{"l":"com.google.android.exoplayer2"},{"l":"com.google.android.exoplayer2.analytics"},{"l":"com.google.android.exoplayer2.audio"},{"l":"com.google.android.exoplayer2.database"},{"l":"com.google.android.exoplayer2.decoder"},{"l":"com.google.android.exoplayer2.drm"},{"l":"com.google.android.exoplayer2.ext.av1"},{"l":"com.google.android.exoplayer2.ext.cast"},{"l":"com.google.android.exoplayer2.ext.cronet"},{"l":"com.google.android.exoplayer2.ext.ffmpeg"},{"l":"com.google.android.exoplayer2.ext.flac"},{"l":"com.google.android.exoplayer2.ext.ima"},{"l":"com.google.android.exoplayer2.ext.leanback"},{"l":"com.google.android.exoplayer2.ext.media2"},{"l":"com.google.android.exoplayer2.ext.mediasession"},{"l":"com.google.android.exoplayer2.ext.okhttp"},{"l":"com.google.android.exoplayer2.ext.opus"},{"l":"com.google.android.exoplayer2.ext.rtmp"},{"l":"com.google.android.exoplayer2.ext.vp9"},{"l":"com.google.android.exoplayer2.ext.workmanager"},{"l":"com.google.android.exoplayer2.extractor"},{"l":"com.google.android.exoplayer2.extractor.amr"},{"l":"com.google.android.exoplayer2.extractor.flac"},{"l":"com.google.android.exoplayer2.extractor.flv"},{"l":"com.google.android.exoplayer2.extractor.jpeg"},{"l":"com.google.android.exoplayer2.extractor.mkv"},{"l":"com.google.android.exoplayer2.extractor.mp3"},{"l":"com.google.android.exoplayer2.extractor.mp4"},{"l":"com.google.android.exoplayer2.extractor.ogg"},{"l":"com.google.android.exoplayer2.extractor.rawcc"},{"l":"com.google.android.exoplayer2.extractor.ts"},{"l":"com.google.android.exoplayer2.extractor.wav"},{"l":"com.google.android.exoplayer2.mediacodec"},{"l":"com.google.android.exoplayer2.metadata"},{"l":"com.google.android.exoplayer2.metadata.dvbsi"},{"l":"com.google.android.exoplayer2.metadata.emsg"},{"l":"com.google.android.exoplayer2.metadata.flac"},{"l":"com.google.android.exoplayer2.metadata.icy"},{"l":"com.google.android.exoplayer2.metadata.id3"},{"l":"com.google.android.exoplayer2.metadata.mp4"},{"l":"com.google.android.exoplayer2.metadata.scte35"},{"l":"com.google.android.exoplayer2.offline"},{"l":"com.google.android.exoplayer2.robolectric"},{"l":"com.google.android.exoplayer2.scheduler"},{"l":"com.google.android.exoplayer2.source"},{"l":"com.google.android.exoplayer2.source.ads"},{"l":"com.google.android.exoplayer2.source.chunk"},{"l":"com.google.android.exoplayer2.source.dash"},{"l":"com.google.android.exoplayer2.source.dash.manifest"},{"l":"com.google.android.exoplayer2.source.dash.offline"},{"l":"com.google.android.exoplayer2.source.hls"},{"l":"com.google.android.exoplayer2.source.hls.offline"},{"l":"com.google.android.exoplayer2.source.hls.playlist"},{"l":"com.google.android.exoplayer2.source.mediaparser"},{"l":"com.google.android.exoplayer2.source.rtsp"},{"l":"com.google.android.exoplayer2.source.rtsp.reader"},{"l":"com.google.android.exoplayer2.source.smoothstreaming"},{"l":"com.google.android.exoplayer2.source.smoothstreaming.manifest"},{"l":"com.google.android.exoplayer2.source.smoothstreaming.offline"},{"l":"com.google.android.exoplayer2.testutil"},{"l":"com.google.android.exoplayer2.testutil.truth"},{"l":"com.google.android.exoplayer2.text"},{"l":"com.google.android.exoplayer2.text.cea"},{"l":"com.google.android.exoplayer2.text.dvb"},{"l":"com.google.android.exoplayer2.text.pgs"},{"l":"com.google.android.exoplayer2.text.span"},{"l":"com.google.android.exoplayer2.text.ssa"},{"l":"com.google.android.exoplayer2.text.subrip"},{"l":"com.google.android.exoplayer2.text.ttml"},{"l":"com.google.android.exoplayer2.text.tx3g"},{"l":"com.google.android.exoplayer2.text.webvtt"},{"l":"com.google.android.exoplayer2.trackselection"},{"l":"com.google.android.exoplayer2.transformer"},{"l":"com.google.android.exoplayer2.ui"},{"l":"com.google.android.exoplayer2.upstream"},{"l":"com.google.android.exoplayer2.upstream.cache"},{"l":"com.google.android.exoplayer2.upstream.crypto"},{"l":"com.google.android.exoplayer2.util"},{"l":"com.google.android.exoplayer2.video"},{"l":"com.google.android.exoplayer2.video.spherical"}]
|
||||
packageSearchIndex = [{"l":"All Packages","url":"allpackages-index.html"},{"l":"com.google.android.exoplayer2"},{"l":"com.google.android.exoplayer2.analytics"},{"l":"com.google.android.exoplayer2.audio"},{"l":"com.google.android.exoplayer2.database"},{"l":"com.google.android.exoplayer2.decoder"},{"l":"com.google.android.exoplayer2.drm"},{"l":"com.google.android.exoplayer2.ext.av1"},{"l":"com.google.android.exoplayer2.ext.cast"},{"l":"com.google.android.exoplayer2.ext.cronet"},{"l":"com.google.android.exoplayer2.ext.ffmpeg"},{"l":"com.google.android.exoplayer2.ext.flac"},{"l":"com.google.android.exoplayer2.ext.ima"},{"l":"com.google.android.exoplayer2.ext.leanback"},{"l":"com.google.android.exoplayer2.ext.media2"},{"l":"com.google.android.exoplayer2.ext.mediasession"},{"l":"com.google.android.exoplayer2.ext.okhttp"},{"l":"com.google.android.exoplayer2.ext.opus"},{"l":"com.google.android.exoplayer2.ext.rtmp"},{"l":"com.google.android.exoplayer2.ext.vp9"},{"l":"com.google.android.exoplayer2.ext.workmanager"},{"l":"com.google.android.exoplayer2.extractor"},{"l":"com.google.android.exoplayer2.extractor.amr"},{"l":"com.google.android.exoplayer2.extractor.flac"},{"l":"com.google.android.exoplayer2.extractor.flv"},{"l":"com.google.android.exoplayer2.extractor.jpeg"},{"l":"com.google.android.exoplayer2.extractor.mkv"},{"l":"com.google.android.exoplayer2.extractor.mp3"},{"l":"com.google.android.exoplayer2.extractor.mp4"},{"l":"com.google.android.exoplayer2.extractor.ogg"},{"l":"com.google.android.exoplayer2.extractor.rawcc"},{"l":"com.google.android.exoplayer2.extractor.ts"},{"l":"com.google.android.exoplayer2.extractor.wav"},{"l":"com.google.android.exoplayer2.mediacodec"},{"l":"com.google.android.exoplayer2.metadata"},{"l":"com.google.android.exoplayer2.metadata.dvbsi"},{"l":"com.google.android.exoplayer2.metadata.emsg"},{"l":"com.google.android.exoplayer2.metadata.flac"},{"l":"com.google.android.exoplayer2.metadata.icy"},{"l":"com.google.android.exoplayer2.metadata.id3"},{"l":"com.google.android.exoplayer2.metadata.mp4"},{"l":"com.google.android.exoplayer2.metadata.scte35"},{"l":"com.google.android.exoplayer2.offline"},{"l":"com.google.android.exoplayer2.robolectric"},{"l":"com.google.android.exoplayer2.scheduler"},{"l":"com.google.android.exoplayer2.source"},{"l":"com.google.android.exoplayer2.source.ads"},{"l":"com.google.android.exoplayer2.source.chunk"},{"l":"com.google.android.exoplayer2.source.dash"},{"l":"com.google.android.exoplayer2.source.dash.manifest"},{"l":"com.google.android.exoplayer2.source.dash.offline"},{"l":"com.google.android.exoplayer2.source.hls"},{"l":"com.google.android.exoplayer2.source.hls.offline"},{"l":"com.google.android.exoplayer2.source.hls.playlist"},{"l":"com.google.android.exoplayer2.source.mediaparser"},{"l":"com.google.android.exoplayer2.source.rtsp"},{"l":"com.google.android.exoplayer2.source.rtsp.reader"},{"l":"com.google.android.exoplayer2.source.smoothstreaming"},{"l":"com.google.android.exoplayer2.source.smoothstreaming.manifest"},{"l":"com.google.android.exoplayer2.source.smoothstreaming.offline"},{"l":"com.google.android.exoplayer2.testutil"},{"l":"com.google.android.exoplayer2.testutil.truth"},{"l":"com.google.android.exoplayer2.text"},{"l":"com.google.android.exoplayer2.text.cea"},{"l":"com.google.android.exoplayer2.text.dvb"},{"l":"com.google.android.exoplayer2.text.pgs"},{"l":"com.google.android.exoplayer2.text.span"},{"l":"com.google.android.exoplayer2.text.ssa"},{"l":"com.google.android.exoplayer2.text.subrip"},{"l":"com.google.android.exoplayer2.text.ttml"},{"l":"com.google.android.exoplayer2.text.tx3g"},{"l":"com.google.android.exoplayer2.text.webvtt"},{"l":"com.google.android.exoplayer2.trackselection"},{"l":"com.google.android.exoplayer2.transformer"},{"l":"com.google.android.exoplayer2.ui"},{"l":"com.google.android.exoplayer2.upstream"},{"l":"com.google.android.exoplayer2.upstream.cache"},{"l":"com.google.android.exoplayer2.upstream.crypto"},{"l":"com.google.android.exoplayer2.util"},{"l":"com.google.android.exoplayer2.video"},{"l":"com.google.android.exoplayer2.video.spherical"}]
|
||||
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
|
|
@ -6,7 +6,6 @@ The [Transformer API][] can be used to convert media streams. It takes an input
|
|||
media stream, applies changes to it as configured by the app, and produces the
|
||||
corresponding output file. The available transformations are:
|
||||
|
||||
* Transmuxing between container formats.
|
||||
* Track removal.
|
||||
* Flattening of slow motion videos or, in other words, their conversion into
|
||||
normal videos that retain the desired slow motion effects, but can be played
|
||||
|
|
@ -16,7 +15,7 @@ corresponding output file. The available transformations are:
|
|||
|
||||
## Starting a transformation ##
|
||||
|
||||
To transform media, you need add the following dependency to your app’s
|
||||
To transform media, you need to add the following dependency to your app’s
|
||||
`build.gradle` file:
|
||||
|
||||
~~~
|
||||
|
|
@ -28,8 +27,7 @@ where `2.X.X` is your preferred ExoPlayer version.
|
|||
|
||||
You can then start a transformation by building a `Transformer` instance and
|
||||
calling `startTransformation` on it. The code sample below starts a
|
||||
transformation that removes the audio track from the input and sets the output
|
||||
container format to WebM:
|
||||
transformation that removes the audio track from the input:
|
||||
|
||||
~~~
|
||||
// Configure and create a Transformer instance.
|
||||
|
|
@ -37,7 +35,6 @@ Transformer transformer =
|
|||
new Transformer.Builder()
|
||||
.setContext(context)
|
||||
.setRemoveAudio(true)
|
||||
.setOutputMimeType(MimeTypes.VIDEO_WEBM)
|
||||
.setListener(transformerListener)
|
||||
.build();
|
||||
// Start the transformation.
|
||||
|
|
@ -52,7 +49,9 @@ builder.
|
|||
a `ParcelFileDescriptor` indicating where the output should be written. The
|
||||
input can be a progressive or an adaptive stream, but the output is always a
|
||||
progressive stream. For adaptive inputs, the highest resolution tracks are
|
||||
always selected for the transformation.
|
||||
always selected for the transformation. The input can be of any container format
|
||||
supported by ExoPlayer (see the [Supported formats page][] for details), but the
|
||||
output is always an MP4 file.
|
||||
|
||||
Multiple transformations can be executed sequentially with the same
|
||||
`Transformer` instance, but concurrent transformations with the same instance
|
||||
|
|
@ -137,4 +136,5 @@ flattened version of the video instead of the original one.
|
|||
Currently, Samsung's slow motion format is the only one supported.
|
||||
|
||||
[Transformer API]: {{ site.exo_sdk }}/transformer/Transformer.html
|
||||
[Supported formats page]: {{ site.baseurl }}/supported-formats.html
|
||||
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@ public final class MediaMetadata implements Bundleable {
|
|||
@Nullable private Integer totalDiscCount;
|
||||
@Nullable private CharSequence genre;
|
||||
@Nullable private CharSequence compilation;
|
||||
@Nullable private CharSequence station;
|
||||
@Nullable private Bundle extras;
|
||||
|
||||
public Builder() {}
|
||||
|
|
@ -110,6 +111,7 @@ public final class MediaMetadata implements Bundleable {
|
|||
this.totalDiscCount = mediaMetadata.totalDiscCount;
|
||||
this.genre = mediaMetadata.genre;
|
||||
this.compilation = mediaMetadata.compilation;
|
||||
this.station = mediaMetadata.station;
|
||||
this.extras = mediaMetadata.extras;
|
||||
}
|
||||
|
||||
|
|
@ -346,6 +348,12 @@ public final class MediaMetadata implements Bundleable {
|
|||
return this;
|
||||
}
|
||||
|
||||
/** Sets the name of the station streaming the media. */
|
||||
public Builder setStation(@Nullable CharSequence station) {
|
||||
this.station = station;
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Sets the extras {@link Bundle}. */
|
||||
public Builder setExtras(@Nullable Bundle extras) {
|
||||
this.extras = extras;
|
||||
|
|
@ -485,6 +493,9 @@ public final class MediaMetadata implements Bundleable {
|
|||
if (mediaMetadata.compilation != null) {
|
||||
setCompilation(mediaMetadata.compilation);
|
||||
}
|
||||
if (mediaMetadata.station != null) {
|
||||
setStation(mediaMetadata.station);
|
||||
}
|
||||
if (mediaMetadata.extras != null) {
|
||||
setExtras(mediaMetadata.extras);
|
||||
}
|
||||
|
|
@ -679,6 +690,8 @@ public final class MediaMetadata implements Bundleable {
|
|||
@Nullable public final CharSequence genre;
|
||||
/** Optional compilation. */
|
||||
@Nullable public final CharSequence compilation;
|
||||
/** Optional name of the station streaming the media. */
|
||||
@Nullable public final CharSequence station;
|
||||
|
||||
/**
|
||||
* Optional extras {@link Bundle}.
|
||||
|
|
@ -720,6 +733,7 @@ public final class MediaMetadata implements Bundleable {
|
|||
this.totalDiscCount = builder.totalDiscCount;
|
||||
this.genre = builder.genre;
|
||||
this.compilation = builder.compilation;
|
||||
this.station = builder.station;
|
||||
this.extras = builder.extras;
|
||||
}
|
||||
|
||||
|
|
@ -766,7 +780,8 @@ public final class MediaMetadata implements Bundleable {
|
|||
&& Util.areEqual(discNumber, that.discNumber)
|
||||
&& Util.areEqual(totalDiscCount, that.totalDiscCount)
|
||||
&& Util.areEqual(genre, that.genre)
|
||||
&& Util.areEqual(compilation, that.compilation);
|
||||
&& Util.areEqual(compilation, that.compilation)
|
||||
&& Util.areEqual(station, that.station);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -801,7 +816,8 @@ public final class MediaMetadata implements Bundleable {
|
|||
discNumber,
|
||||
totalDiscCount,
|
||||
genre,
|
||||
compilation);
|
||||
compilation,
|
||||
station);
|
||||
}
|
||||
|
||||
// Bundleable implementation.
|
||||
|
|
@ -839,6 +855,7 @@ public final class MediaMetadata implements Bundleable {
|
|||
FIELD_TOTAL_DISC_COUNT,
|
||||
FIELD_GENRE,
|
||||
FIELD_COMPILATION,
|
||||
FIELD_STATION,
|
||||
FIELD_EXTRAS
|
||||
})
|
||||
private @interface FieldNumber {}
|
||||
|
|
@ -873,6 +890,7 @@ public final class MediaMetadata implements Bundleable {
|
|||
private static final int FIELD_GENRE = 27;
|
||||
private static final int FIELD_COMPILATION = 28;
|
||||
private static final int FIELD_ARTWORK_DATA_TYPE = 29;
|
||||
private static final int FIELD_STATION = 30;
|
||||
private static final int FIELD_EXTRAS = 1000;
|
||||
|
||||
@Override
|
||||
|
|
@ -893,6 +911,7 @@ public final class MediaMetadata implements Bundleable {
|
|||
bundle.putCharSequence(keyForField(FIELD_CONDUCTOR), conductor);
|
||||
bundle.putCharSequence(keyForField(FIELD_GENRE), genre);
|
||||
bundle.putCharSequence(keyForField(FIELD_COMPILATION), compilation);
|
||||
bundle.putCharSequence(keyForField(FIELD_STATION), station);
|
||||
|
||||
if (userRating != null) {
|
||||
bundle.putBundle(keyForField(FIELD_USER_RATING), userRating.toBundle());
|
||||
|
|
@ -970,6 +989,7 @@ public final class MediaMetadata implements Bundleable {
|
|||
.setConductor(bundle.getCharSequence(keyForField(FIELD_CONDUCTOR)))
|
||||
.setGenre(bundle.getCharSequence(keyForField(FIELD_GENRE)))
|
||||
.setCompilation(bundle.getCharSequence(keyForField(FIELD_COMPILATION)))
|
||||
.setStation(bundle.getCharSequence(keyForField(FIELD_STATION)))
|
||||
.setExtras(bundle.getBundle(keyForField(FIELD_EXTRAS)));
|
||||
|
||||
if (bundle.containsKey(keyForField(FIELD_USER_RATING))) {
|
||||
|
|
|
|||
|
|
@ -300,6 +300,28 @@ public final class AdPlaybackState implements Bundleable {
|
|||
timeUs, count, states, uris, durationsUs, contentResumeOffsetUs, isServerSideInserted);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an instance with all ads in final states (played, skipped, error) reset to either
|
||||
* available or unavailable, which allows to play them again.
|
||||
*/
|
||||
@CheckResult
|
||||
public AdGroup withAllAdsReset() {
|
||||
if (count == C.LENGTH_UNSET) {
|
||||
return this;
|
||||
}
|
||||
int count = this.states.length;
|
||||
@AdState int[] states = Arrays.copyOf(this.states, count);
|
||||
for (int i = 0; i < count; i++) {
|
||||
if (states[i] == AD_STATE_PLAYED
|
||||
|| states[i] == AD_STATE_SKIPPED
|
||||
|| states[i] == AD_STATE_ERROR) {
|
||||
states[i] = uris[i] == null ? AD_STATE_UNAVAILABLE : AD_STATE_AVAILABLE;
|
||||
}
|
||||
}
|
||||
return new AdGroup(
|
||||
timeUs, count, states, uris, durationsUs, contentResumeOffsetUs, isServerSideInserted);
|
||||
}
|
||||
|
||||
@CheckResult
|
||||
private static @AdState int[] copyStatesWithSpaceForAdCount(@AdState int[] states, int count) {
|
||||
int oldStateCount = states.length;
|
||||
|
|
@ -783,6 +805,19 @@ public final class AdPlaybackState implements Bundleable {
|
|||
adsId, adGroups, adResumePositionUs, contentDurationUs, removedAdGroupCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an instance with all ads in the specified ad group reset from final states (played,
|
||||
* skipped, error) to either available or unavailable, which allows to play them again.
|
||||
*/
|
||||
@CheckResult
|
||||
public AdPlaybackState withResetAdGroup(@IntRange(from = 0) int adGroupIndex) {
|
||||
int adjustedIndex = adGroupIndex - removedAdGroupCount;
|
||||
AdGroup[] adGroups = Util.nullSafeArrayCopy(this.adGroups, this.adGroups.length);
|
||||
adGroups[adjustedIndex] = adGroups[adjustedIndex].withAllAdsReset();
|
||||
return new AdPlaybackState(
|
||||
adsId, adGroups, adResumePositionUs, contentDurationUs, removedAdGroupCount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(@Nullable Object o) {
|
||||
if (this == o) {
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@ public class MediaMetadataTest {
|
|||
assertThat(mediaMetadata.totalDiscCount).isNull();
|
||||
assertThat(mediaMetadata.genre).isNull();
|
||||
assertThat(mediaMetadata.compilation).isNull();
|
||||
assertThat(mediaMetadata.station).isNull();
|
||||
assertThat(mediaMetadata.extras).isNull();
|
||||
}
|
||||
|
||||
|
|
@ -149,6 +150,7 @@ public class MediaMetadataTest {
|
|||
.setTotalDiscCount(3)
|
||||
.setGenre("Pop")
|
||||
.setCompilation("Amazing songs.")
|
||||
.setStation("radio station")
|
||||
.setExtras(extras)
|
||||
.build();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,10 @@
|
|||
package com.google.android.exoplayer2.source.ads;
|
||||
|
||||
import static com.google.android.exoplayer2.source.ads.AdPlaybackState.AD_STATE_AVAILABLE;
|
||||
import static com.google.android.exoplayer2.source.ads.AdPlaybackState.AD_STATE_ERROR;
|
||||
import static com.google.android.exoplayer2.source.ads.AdPlaybackState.AD_STATE_PLAYED;
|
||||
import static com.google.android.exoplayer2.source.ads.AdPlaybackState.AD_STATE_SKIPPED;
|
||||
import static com.google.android.exoplayer2.source.ads.AdPlaybackState.AD_STATE_UNAVAILABLE;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
|
|
@ -254,6 +257,60 @@ public class AdPlaybackStateTest {
|
|||
assertThat(state.getAdGroup(1).count).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void withResetAdGroup_beforeSetAdCount_doesNothing() {
|
||||
AdPlaybackState state = new AdPlaybackState(TEST_ADS_ID, TEST_AD_GROUP_TIMES_US);
|
||||
|
||||
state = state.withResetAdGroup(/* adGroupIndex= */ 1);
|
||||
|
||||
assertThat(state.getAdGroup(1).count).isEqualTo(C.LENGTH_UNSET);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void withResetAdGroup_resetsAdsInFinalStates() {
|
||||
AdPlaybackState state = new AdPlaybackState(TEST_ADS_ID, TEST_AD_GROUP_TIMES_US);
|
||||
state = state.withAdCount(/* adGroupIndex= */ 1, /* adCount= */ 5);
|
||||
state =
|
||||
state.withAdDurationsUs(
|
||||
/* adGroupIndex= */ 1, /* adDurationsUs...= */ 1_000L, 2_000L, 3_000L, 4_000L, 5_000L);
|
||||
state = state.withAdUri(/* adGroupIndex= */ 1, /* adIndexInAdGroup= */ 1, Uri.EMPTY);
|
||||
state = state.withAdUri(/* adGroupIndex= */ 1, /* adIndexInAdGroup= */ 2, Uri.EMPTY);
|
||||
state = state.withAdUri(/* adGroupIndex= */ 1, /* adIndexInAdGroup= */ 3, Uri.EMPTY);
|
||||
state = state.withAdUri(/* adGroupIndex= */ 1, /* adIndexInAdGroup= */ 4, Uri.EMPTY);
|
||||
state = state.withPlayedAd(/* adGroupIndex= */ 1, /* adIndexInAdGroup= */ 2);
|
||||
state = state.withSkippedAd(/* adGroupIndex= */ 1, /* adIndexInAdGroup= */ 3);
|
||||
state = state.withAdLoadError(/* adGroupIndex= */ 1, /* adIndexInAdGroup= */ 4);
|
||||
// Verify setup.
|
||||
assertThat(state.getAdGroup(/* adGroupIndex= */ 1).states)
|
||||
.asList()
|
||||
.containsExactly(
|
||||
AD_STATE_UNAVAILABLE,
|
||||
AD_STATE_AVAILABLE,
|
||||
AD_STATE_PLAYED,
|
||||
AD_STATE_SKIPPED,
|
||||
AD_STATE_ERROR)
|
||||
.inOrder();
|
||||
|
||||
state = state.withResetAdGroup(/* adGroupIndex= */ 1);
|
||||
|
||||
assertThat(state.getAdGroup(/* adGroupIndex= */ 1).states)
|
||||
.asList()
|
||||
.containsExactly(
|
||||
AD_STATE_UNAVAILABLE,
|
||||
AD_STATE_AVAILABLE,
|
||||
AD_STATE_AVAILABLE,
|
||||
AD_STATE_AVAILABLE,
|
||||
AD_STATE_AVAILABLE)
|
||||
.inOrder();
|
||||
assertThat(state.getAdGroup(/* adGroupIndex= */ 1).uris)
|
||||
.asList()
|
||||
.containsExactly(null, Uri.EMPTY, Uri.EMPTY, Uri.EMPTY, Uri.EMPTY)
|
||||
.inOrder();
|
||||
assertThat(state.getAdGroup(/* adGroupIndex= */ 1).durationsUs)
|
||||
.asList()
|
||||
.containsExactly(1_000L, 2_000L, 3_000L, 4_000L, 5_000L);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void roundTripViaBundle_yieldsEqualFieldsExceptAdsId() {
|
||||
AdPlaybackState originalState =
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ import android.view.Surface;
|
|||
import android.view.SurfaceHolder;
|
||||
import android.view.SurfaceView;
|
||||
import android.view.TextureView;
|
||||
import androidx.annotation.DoNotInline;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.RequiresApi;
|
||||
import com.google.android.exoplayer2.ExoPlayer.AudioOffloadListener;
|
||||
|
|
@ -1866,6 +1867,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
|
|||
private static final class Api31 {
|
||||
private Api31() {}
|
||||
|
||||
@DoNotInline
|
||||
public static PlayerId createPlayerId() {
|
||||
// TODO: Create a MediaMetricsListener and obtain LogSessionId from it.
|
||||
return new PlayerId(LogSessionId.LOG_SESSION_ID_NONE);
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import com.google.android.exoplayer2.Format;
|
|||
import com.google.android.exoplayer2.PlaybackException;
|
||||
import com.google.android.exoplayer2.PlaybackParameters;
|
||||
import com.google.android.exoplayer2.Player;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
|
@ -281,6 +282,13 @@ public interface AudioSink {
|
|||
*/
|
||||
void setListener(Listener listener);
|
||||
|
||||
/**
|
||||
* Sets the {@link PlayerId} of the player using this audio sink.
|
||||
*
|
||||
* @param playerId The {@link PlayerId}, or null to clear a previously set id.
|
||||
*/
|
||||
default void setPlayerId(@Nullable PlayerId playerId) {}
|
||||
|
||||
/**
|
||||
* Returns whether the sink supports a given {@link Format}.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -530,6 +530,7 @@ public abstract class DecoderAudioRenderer<
|
|||
} else {
|
||||
audioSink.disableTunneling();
|
||||
}
|
||||
audioSink.setPlayerId(getPlayerId());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -23,16 +23,19 @@ import android.media.AudioFormat;
|
|||
import android.media.AudioManager;
|
||||
import android.media.AudioTrack;
|
||||
import android.media.PlaybackParams;
|
||||
import android.media.metrics.LogSessionId;
|
||||
import android.os.ConditionVariable;
|
||||
import android.os.Handler;
|
||||
import android.os.SystemClock;
|
||||
import android.util.Pair;
|
||||
import androidx.annotation.DoNotInline;
|
||||
import androidx.annotation.IntDef;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.RequiresApi;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.PlaybackParameters;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.audio.AudioProcessor.UnhandledAudioFormatException;
|
||||
import com.google.android.exoplayer2.util.Assertions;
|
||||
import com.google.android.exoplayer2.util.Log;
|
||||
|
|
@ -323,6 +326,7 @@ public final class DefaultAudioSink implements AudioSink {
|
|||
initializationExceptionPendingExceptionHolder;
|
||||
private final PendingExceptionHolder<WriteException> writeExceptionPendingExceptionHolder;
|
||||
|
||||
@Nullable private PlayerId playerId;
|
||||
@Nullable private Listener listener;
|
||||
@Nullable private Configuration pendingConfiguration;
|
||||
@MonotonicNonNull private Configuration configuration;
|
||||
|
|
@ -477,6 +481,11 @@ public final class DefaultAudioSink implements AudioSink {
|
|||
this.listener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPlayerId(@Nullable PlayerId playerId) {
|
||||
this.playerId = playerId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsFormat(Format format) {
|
||||
return getFormatSupport(format) != SINK_FORMAT_UNSUPPORTED;
|
||||
|
|
@ -665,6 +674,9 @@ public final class DefaultAudioSink implements AudioSink {
|
|||
configuration.inputFormat.encoderDelay, configuration.inputFormat.encoderPadding);
|
||||
}
|
||||
}
|
||||
if (Util.SDK_INT >= 31 && playerId != null) {
|
||||
Api31.setLogSessionIdOnAudioTrack(audioTrack, playerId);
|
||||
}
|
||||
audioSessionId = audioTrack.getAudioSessionId();
|
||||
audioTrackPositionTracker.setAudioTrack(
|
||||
audioTrack,
|
||||
|
|
@ -2094,6 +2106,7 @@ public final class DefaultAudioSink implements AudioSink {
|
|||
audioSessionId);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation") // Using deprecated AudioTrack constructor.
|
||||
private AudioTrack createAudioTrackV9(AudioAttributes audioAttributes, int audioSessionId) {
|
||||
int streamType = Util.getStreamTypeForAudioUsage(audioAttributes.usage);
|
||||
if (audioSessionId == C.AUDIO_SESSION_ID_UNSET) {
|
||||
|
|
@ -2216,4 +2229,17 @@ public final class DefaultAudioSink implements AudioSink {
|
|||
pendingException = null;
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresApi(31)
|
||||
private static final class Api31 {
|
||||
private Api31() {}
|
||||
|
||||
@DoNotInline
|
||||
public static void setLogSessionIdOnAudioTrack(AudioTrack audioTrack, PlayerId playerId) {
|
||||
LogSessionId logSessionId = playerId.getLogSessionId();
|
||||
if (!logSessionId.equals(LogSessionId.LOG_SESSION_ID_NONE)) {
|
||||
audioTrack.setLogSessionId(logSessionId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ package com.google.android.exoplayer2.audio;
|
|||
import androidx.annotation.Nullable;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.PlaybackParameters;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
/** An overridable {@link AudioSink} implementation forwarding all methods to another sink. */
|
||||
|
|
@ -34,6 +35,11 @@ public class ForwardingAudioSink implements AudioSink {
|
|||
sink.setListener(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPlayerId(@Nullable PlayerId playerId) {
|
||||
sink.setPlayerId(playerId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsFormat(Format format) {
|
||||
return sink.supportsFormat(format);
|
||||
|
|
|
|||
|
|
@ -500,6 +500,7 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
|
|||
} else {
|
||||
audioSink.disableTunneling();
|
||||
}
|
||||
audioSink.setPlayerId(getPlayerId());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ package com.google.android.exoplayer2.drm;
|
|||
import static com.google.android.exoplayer2.util.Assertions.checkArgument;
|
||||
import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
|
||||
import static com.google.android.exoplayer2.util.Assertions.checkState;
|
||||
import static com.google.android.exoplayer2.util.Assertions.checkStateNotNull;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.media.ResourceBusyException;
|
||||
|
|
@ -31,6 +32,7 @@ import androidx.annotation.RequiresApi;
|
|||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.PlaybackException;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.drm.DrmInitData.SchemeData;
|
||||
import com.google.android.exoplayer2.drm.DrmSession.DrmSessionException;
|
||||
import com.google.android.exoplayer2.drm.ExoMediaDrm.OnEventListener;
|
||||
|
|
@ -59,7 +61,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||
* A {@link DrmSessionManager} that supports playbacks using {@link ExoMediaDrm}.
|
||||
*
|
||||
* <p>This implementation supports pre-acquisition of sessions using {@link
|
||||
* #preacquireSession(Looper, DrmSessionEventListener.EventDispatcher, Format)}.
|
||||
* #preacquireSession(DrmSessionEventListener.EventDispatcher, Format)}.
|
||||
*/
|
||||
@RequiresApi(18)
|
||||
public class DefaultDrmSessionManager implements DrmSessionManager {
|
||||
|
|
@ -419,8 +421,8 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
|
|||
|
||||
/**
|
||||
* Sets the mode, which determines the role of sessions acquired from the instance. This must be
|
||||
* called before {@link #acquireSession(Looper, DrmSessionEventListener.EventDispatcher, Format)}
|
||||
* is called.
|
||||
* called before {@link #acquireSession(DrmSessionEventListener.EventDispatcher, Format)} is
|
||||
* called.
|
||||
*
|
||||
* <p>By default, the mode is {@link #MODE_PLAYBACK} and a streaming license is requested when
|
||||
* required.
|
||||
|
|
@ -488,12 +490,15 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
|
|||
}
|
||||
|
||||
@Override
|
||||
public DrmSessionReference preacquireSession(
|
||||
Looper playbackLooper,
|
||||
@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher,
|
||||
Format format) {
|
||||
checkState(prepareCallsCount > 0);
|
||||
public void setPlayer(Looper playbackLooper, PlayerId playerId) {
|
||||
initPlaybackLooper(playbackLooper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DrmSessionReference preacquireSession(
|
||||
@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher, Format format) {
|
||||
checkState(prepareCallsCount > 0);
|
||||
checkStateNotNull(playbackLooper);
|
||||
PreacquiredSessionReference preacquiredSessionReference =
|
||||
new PreacquiredSessionReference(eventDispatcher);
|
||||
preacquiredSessionReference.acquire(format);
|
||||
|
|
@ -503,11 +508,9 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
|
|||
@Override
|
||||
@Nullable
|
||||
public DrmSession acquireSession(
|
||||
Looper playbackLooper,
|
||||
@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher,
|
||||
Format format) {
|
||||
@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher, Format format) {
|
||||
checkState(prepareCallsCount > 0);
|
||||
initPlaybackLooper(playbackLooper);
|
||||
checkStateNotNull(playbackLooper);
|
||||
return acquireSession(
|
||||
playbackLooper,
|
||||
eventDispatcher,
|
||||
|
|
@ -977,7 +980,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
|
|||
* Constructs an instance.
|
||||
*
|
||||
* @param eventDispatcher The {@link DrmSessionEventListener.EventDispatcher} passed to {@link
|
||||
* #acquireSession(Looper, DrmSessionEventListener.EventDispatcher, Format)}.
|
||||
* #acquireSession(DrmSessionEventListener.EventDispatcher, Format)}.
|
||||
*/
|
||||
public PreacquiredSessionReference(
|
||||
@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher) {
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import androidx.annotation.Nullable;
|
|||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.PlaybackException;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
|
||||
/** Manages a DRM session. */
|
||||
public interface DrmSessionManager {
|
||||
|
|
@ -45,12 +46,13 @@ public interface DrmSessionManager {
|
|||
DrmSessionManager DRM_UNSUPPORTED =
|
||||
new DrmSessionManager() {
|
||||
|
||||
@Override
|
||||
public void setPlayer(Looper playbackLooper, PlayerId playerId) {}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public DrmSession acquireSession(
|
||||
Looper playbackLooper,
|
||||
@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher,
|
||||
Format format) {
|
||||
@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher, Format format) {
|
||||
if (format.drmInitData == null) {
|
||||
return null;
|
||||
} else {
|
||||
|
|
@ -100,25 +102,33 @@ public interface DrmSessionManager {
|
|||
// Do nothing.
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets information about the player using this DRM session manager.
|
||||
*
|
||||
* @param playbackLooper The {@link Looper} associated with the player's playback thread.
|
||||
* @param playerId The {@link PlayerId} of the player.
|
||||
*/
|
||||
void setPlayer(Looper playbackLooper, PlayerId playerId);
|
||||
|
||||
/**
|
||||
* Pre-acquires a DRM session for the specified {@link Format}.
|
||||
*
|
||||
* <p>This notifies the manager that a subsequent call to {@link #acquireSession(Looper,
|
||||
* <p>This notifies the manager that a subsequent call to {@link #acquireSession(
|
||||
* DrmSessionEventListener.EventDispatcher, Format)} with the same {@link Format} is likely,
|
||||
* allowing a manager that supports pre-acquisition to get the required {@link DrmSession} ready
|
||||
* in the background.
|
||||
*
|
||||
* <p>The caller must call {@link DrmSessionReference#release()} on the returned instance when
|
||||
* they no longer require the pre-acquisition (i.e. they know they won't be making a matching call
|
||||
* to {@link #acquireSession(Looper, DrmSessionEventListener.EventDispatcher, Format)} in the near
|
||||
* to {@link #acquireSession(DrmSessionEventListener.EventDispatcher, Format)} in the near
|
||||
* future).
|
||||
*
|
||||
* <p>This manager may silently release the underlying session in order to allow another operation
|
||||
* to complete. This will result in a subsequent call to {@link #acquireSession(Looper,
|
||||
* to complete. This will result in a subsequent call to {@link #acquireSession(
|
||||
* DrmSessionEventListener.EventDispatcher, Format)} re-initializing a new session, including
|
||||
* repeating key loads and other async initialization steps.
|
||||
*
|
||||
* <p>The caller must separately call {@link #acquireSession(Looper,
|
||||
* <p>The caller must separately call {@link #acquireSession(
|
||||
* DrmSessionEventListener.EventDispatcher, Format)} in order to obtain a session suitable for
|
||||
* playback. The pre-acquired {@link DrmSessionReference} and full {@link DrmSession} instances
|
||||
* are distinct. The caller must release both, and can release the {@link DrmSessionReference}
|
||||
|
|
@ -129,19 +139,15 @@ public interface DrmSessionManager {
|
|||
* <p>Implementations that do not support pre-acquisition always return an empty {@link
|
||||
* DrmSessionReference} instance.
|
||||
*
|
||||
* @param playbackLooper The looper associated with the media playback thread.
|
||||
* @param eventDispatcher The {@link DrmSessionEventListener.EventDispatcher} used to distribute
|
||||
* events, and passed on to {@link
|
||||
* DrmSession#acquire(DrmSessionEventListener.EventDispatcher)}.
|
||||
* @param format The {@link Format} for which to pre-acquire a {@link DrmSession}.
|
||||
* @return A releaser for the pre-acquired session. Guaranteed to be non-null even if the matching
|
||||
* {@link #acquireSession(Looper, DrmSessionEventListener.EventDispatcher, Format)} would
|
||||
* return null.
|
||||
* {@link #acquireSession(DrmSessionEventListener.EventDispatcher, Format)} would return null.
|
||||
*/
|
||||
default DrmSessionReference preacquireSession(
|
||||
Looper playbackLooper,
|
||||
@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher,
|
||||
Format format) {
|
||||
@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher, Format format) {
|
||||
return DrmSessionReference.EMPTY;
|
||||
}
|
||||
|
||||
|
|
@ -158,7 +164,6 @@ public interface DrmSessionManager {
|
|||
* used to configure secure decoders for playback of clear content periods, which can reduce the
|
||||
* cost of transitioning between clear and encrypted content.
|
||||
*
|
||||
* @param playbackLooper The looper associated with the media playback thread.
|
||||
* @param eventDispatcher The {@link DrmSessionEventListener.EventDispatcher} used to distribute
|
||||
* events, and passed on to {@link
|
||||
* DrmSession#acquire(DrmSessionEventListener.EventDispatcher)}.
|
||||
|
|
@ -167,9 +172,7 @@ public interface DrmSessionManager {
|
|||
*/
|
||||
@Nullable
|
||||
DrmSession acquireSession(
|
||||
Looper playbackLooper,
|
||||
@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher,
|
||||
Format format);
|
||||
@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher, Format format);
|
||||
|
||||
/**
|
||||
* Returns the {@link C.CryptoType} that the DRM session manager will use for a given {@link
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import android.util.Pair;
|
|||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.RequiresApi;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.drm.DefaultDrmSessionManager.Mode;
|
||||
import com.google.android.exoplayer2.drm.DrmSession.DrmSessionException;
|
||||
import com.google.android.exoplayer2.source.MediaSource.MediaPeriodId;
|
||||
|
|
@ -235,6 +236,7 @@ public final class OfflineLicenseHelper {
|
|||
public synchronized Pair<Long, Long> getLicenseDurationRemainingSec(byte[] offlineLicenseKeySetId)
|
||||
throws DrmSessionException {
|
||||
Assertions.checkNotNull(offlineLicenseKeySetId);
|
||||
drmSessionManager.setPlayer(handlerThread.getLooper(), PlayerId.UNSET);
|
||||
drmSessionManager.prepare();
|
||||
DrmSession drmSession =
|
||||
openBlockingKeyRequest(
|
||||
|
|
@ -263,6 +265,7 @@ public final class OfflineLicenseHelper {
|
|||
private byte[] blockingKeyRequest(
|
||||
@Mode int licenseMode, @Nullable byte[] offlineLicenseKeySetId, Format format)
|
||||
throws DrmSessionException {
|
||||
drmSessionManager.setPlayer(handlerThread.getLooper(), PlayerId.UNSET);
|
||||
drmSessionManager.prepare();
|
||||
DrmSession drmSession = openBlockingKeyRequest(licenseMode, offlineLicenseKeySetId, format);
|
||||
DrmSessionException error = drmSession.getError();
|
||||
|
|
@ -280,8 +283,7 @@ public final class OfflineLicenseHelper {
|
|||
Assertions.checkNotNull(format.drmInitData);
|
||||
drmSessionManager.setMode(licenseMode, offlineLicenseKeySetId);
|
||||
conditionVariable.close();
|
||||
DrmSession drmSession =
|
||||
drmSessionManager.acquireSession(handlerThread.getLooper(), eventDispatcher, format);
|
||||
DrmSession drmSession = drmSessionManager.acquireSession(eventDispatcher, format);
|
||||
// Block current thread until key loading is finished
|
||||
conditionVariable.block();
|
||||
return Assertions.checkNotNull(drmSession);
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ public final class DefaultMediaCodecAdapterFactory implements MediaCodecAdapter.
|
|||
|
||||
public DefaultMediaCodecAdapterFactory() {
|
||||
asynchronousMode = MODE_DEFAULT;
|
||||
enableImmediateCodecStartAfterFlush = true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -92,7 +93,7 @@ public final class DefaultMediaCodecAdapterFactory implements MediaCodecAdapter.
|
|||
* playback thread, when operating the codec in asynchronous mode. If disabled, {@link
|
||||
* MediaCodec#start} will be called by the callback thread after pending callbacks are handled.
|
||||
*
|
||||
* <p>By default, this feature is disabled.
|
||||
* <p>By default, this feature is enabled.
|
||||
*
|
||||
* <p>This method is experimental, and will be renamed or removed in a future release.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -37,10 +37,12 @@ import android.media.MediaCodec.CryptoException;
|
|||
import android.media.MediaCrypto;
|
||||
import android.media.MediaCryptoException;
|
||||
import android.media.MediaFormat;
|
||||
import android.media.metrics.LogSessionId;
|
||||
import android.os.Bundle;
|
||||
import android.os.SystemClock;
|
||||
import androidx.annotation.CallSuper;
|
||||
import androidx.annotation.CheckResult;
|
||||
import androidx.annotation.DoNotInline;
|
||||
import androidx.annotation.IntDef;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
|
@ -50,6 +52,7 @@ import com.google.android.exoplayer2.ExoPlaybackException;
|
|||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.FormatHolder;
|
||||
import com.google.android.exoplayer2.PlaybackException;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.decoder.CryptoConfig;
|
||||
import com.google.android.exoplayer2.decoder.DecoderCounters;
|
||||
import com.google.android.exoplayer2.decoder.DecoderInputBuffer;
|
||||
|
|
@ -1060,6 +1063,9 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
|
|||
TraceUtil.beginSection("createCodec:" + codecName);
|
||||
MediaCodecAdapter.Configuration configuration =
|
||||
getMediaCodecConfiguration(codecInfo, inputFormat, crypto, codecOperatingRate);
|
||||
if (Util.SDK_INT >= 31) {
|
||||
Api31.setLogSessionIdToMediaCodecFormat(configuration, getPlayerId());
|
||||
}
|
||||
codec = codecAdapterFactory.createAdapter(configuration);
|
||||
codecInitializedTimestamp = SystemClock.elapsedRealtime();
|
||||
|
||||
|
|
@ -2421,4 +2427,18 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
|
|||
&& format.channelCount == 1
|
||||
&& "OMX.MTK.AUDIO.DECODER.MP3".equals(name);
|
||||
}
|
||||
|
||||
@RequiresApi(31)
|
||||
private static final class Api31 {
|
||||
private Api31() {}
|
||||
|
||||
@DoNotInline
|
||||
public static void setLogSessionIdToMediaCodecFormat(
|
||||
MediaCodecAdapter.Configuration codecConfiguration, PlayerId playerId) {
|
||||
LogSessionId logSessionId = playerId.getLogSessionId();
|
||||
if (!logSessionId.equals(LogSessionId.LOG_SESSION_ID_NONE)) {
|
||||
codecConfiguration.mediaFormat.setString("log-session-id", logSessionId.getStringId());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,12 +26,15 @@ import android.net.Uri;
|
|||
import android.util.Pair;
|
||||
import androidx.annotation.RequiresApi;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.extractor.Extractor;
|
||||
import com.google.android.exoplayer2.extractor.ExtractorOutput;
|
||||
import com.google.android.exoplayer2.extractor.PositionHolder;
|
||||
import com.google.android.exoplayer2.source.mediaparser.InputReaderAdapterV30;
|
||||
import com.google.android.exoplayer2.source.mediaparser.MediaParserUtil;
|
||||
import com.google.android.exoplayer2.source.mediaparser.OutputConsumerAdapterV30;
|
||||
import com.google.android.exoplayer2.upstream.DataReader;
|
||||
import com.google.android.exoplayer2.util.Util;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
|
@ -52,7 +55,7 @@ public final class MediaParserExtractorAdapter implements ProgressiveMediaExtrac
|
|||
private String parserName;
|
||||
|
||||
@SuppressLint("WrongConstant")
|
||||
public MediaParserExtractorAdapter() {
|
||||
public MediaParserExtractorAdapter(PlayerId playerId) {
|
||||
// TODO: Add support for injecting the desired extractor list.
|
||||
outputConsumerAdapter = new OutputConsumerAdapterV30();
|
||||
inputReaderAdapter = new InputReaderAdapterV30();
|
||||
|
|
@ -61,6 +64,9 @@ public final class MediaParserExtractorAdapter implements ProgressiveMediaExtrac
|
|||
mediaParser.setParameter(PARAMETER_IN_BAND_CRYPTO_INFO, true);
|
||||
mediaParser.setParameter(PARAMETER_INCLUDE_SUPPLEMENTAL_DATA, true);
|
||||
parserName = MediaParser.PARSER_NAME_UNKNOWN;
|
||||
if (Util.SDK_INT >= 31) {
|
||||
MediaParserUtil.setLogSessionIdOnMediaParser(mediaParser, playerId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ package com.google.android.exoplayer2.source;
|
|||
|
||||
import android.net.Uri;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.extractor.Extractor;
|
||||
import com.google.android.exoplayer2.extractor.ExtractorOutput;
|
||||
import com.google.android.exoplayer2.extractor.PositionHolder;
|
||||
|
|
@ -31,8 +32,12 @@ public interface ProgressiveMediaExtractor {
|
|||
/** Creates {@link ProgressiveMediaExtractor} instances. */
|
||||
interface Factory {
|
||||
|
||||
/** Returns a new {@link ProgressiveMediaExtractor} instance. */
|
||||
ProgressiveMediaExtractor createProgressiveMediaExtractor();
|
||||
/**
|
||||
* Returns a new {@link ProgressiveMediaExtractor} instance.
|
||||
*
|
||||
* @param playerId The {@link PlayerId} of the player this extractor is used for.
|
||||
*/
|
||||
ProgressiveMediaExtractor createProgressiveMediaExtractor(PlayerId playerId);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -717,11 +717,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||
}
|
||||
}
|
||||
SampleQueue trackOutput =
|
||||
SampleQueue.createWithDrm(
|
||||
allocator,
|
||||
/* playbackLooper= */ handler.getLooper(),
|
||||
drmSessionManager,
|
||||
drmEventDispatcher);
|
||||
SampleQueue.createWithDrm(allocator, drmSessionManager, drmEventDispatcher);
|
||||
trackOutput.setUpstreamFormatChangeListener(this);
|
||||
@NullableType
|
||||
TrackId[] sampleQueueTrackIds = Arrays.copyOf(this.sampleQueueTrackIds, trackCount + 1);
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ package com.google.android.exoplayer2.source;
|
|||
import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
|
||||
|
||||
import android.net.Uri;
|
||||
import android.os.Looper;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.MediaItem;
|
||||
|
|
@ -77,7 +78,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource
|
|||
* Factory(dataSourceFactory, () -> new BundledExtractorsAdapter(extractorsFactory)}.
|
||||
*/
|
||||
public Factory(DataSource.Factory dataSourceFactory, ExtractorsFactory extractorsFactory) {
|
||||
this(dataSourceFactory, () -> new BundledExtractorsAdapter(extractorsFactory));
|
||||
this(dataSourceFactory, playerId -> new BundledExtractorsAdapter(extractorsFactory));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -105,7 +106,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource
|
|||
@Deprecated
|
||||
public Factory setExtractorsFactory(@Nullable ExtractorsFactory extractorsFactory) {
|
||||
this.progressiveMediaExtractorFactory =
|
||||
() ->
|
||||
playerId ->
|
||||
new BundledExtractorsAdapter(
|
||||
extractorsFactory != null ? extractorsFactory : new DefaultExtractorsFactory());
|
||||
return this;
|
||||
|
|
@ -296,6 +297,8 @@ public final class ProgressiveMediaSource extends BaseMediaSource
|
|||
protected void prepareSourceInternal(@Nullable TransferListener mediaTransferListener) {
|
||||
transferListener = mediaTransferListener;
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()), getPlayerId());
|
||||
notifySourceInfoRefreshed();
|
||||
}
|
||||
|
||||
|
|
@ -313,7 +316,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource
|
|||
return new ProgressiveMediaPeriod(
|
||||
localConfiguration.uri,
|
||||
dataSource,
|
||||
progressiveMediaExtractorFactory.createProgressiveMediaExtractor(),
|
||||
progressiveMediaExtractorFactory.createProgressiveMediaExtractor(getPlayerId()),
|
||||
drmSessionManager,
|
||||
createDrmEventDispatcher(id),
|
||||
loadableLoadErrorHandlingPolicy,
|
||||
|
|
|
|||
|
|
@ -30,11 +30,13 @@ import androidx.annotation.VisibleForTesting;
|
|||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.FormatHolder;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.decoder.DecoderInputBuffer;
|
||||
import com.google.android.exoplayer2.decoder.DecoderInputBuffer.InsufficientCapacityException;
|
||||
import com.google.android.exoplayer2.drm.DrmInitData;
|
||||
import com.google.android.exoplayer2.drm.DrmSession;
|
||||
import com.google.android.exoplayer2.drm.DrmSessionEventListener;
|
||||
import com.google.android.exoplayer2.drm.DrmSessionEventListener.EventDispatcher;
|
||||
import com.google.android.exoplayer2.drm.DrmSessionManager;
|
||||
import com.google.android.exoplayer2.drm.DrmSessionManager.DrmSessionReference;
|
||||
import com.google.android.exoplayer2.extractor.TrackOutput;
|
||||
|
|
@ -71,7 +73,6 @@ public class SampleQueue implements TrackOutput {
|
|||
private final SpannedData<SharedSampleMetadata> sharedSampleMetadata;
|
||||
@Nullable private final DrmSessionManager drmSessionManager;
|
||||
@Nullable private final DrmSessionEventListener.EventDispatcher drmEventDispatcher;
|
||||
@Nullable private final Looper playbackLooper;
|
||||
@Nullable private UpstreamFormatChangedListener upstreamFormatChangeListener;
|
||||
|
||||
@Nullable private Format downstreamFormat;
|
||||
|
|
@ -113,10 +114,7 @@ public class SampleQueue implements TrackOutput {
|
|||
*/
|
||||
public static SampleQueue createWithoutDrm(Allocator allocator) {
|
||||
return new SampleQueue(
|
||||
allocator,
|
||||
/* playbackLooper= */ null,
|
||||
/* drmSessionManager= */ null,
|
||||
/* drmEventDispatcher= */ null);
|
||||
allocator, /* drmSessionManager= */ null, /* drmEventDispatcher= */ null);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -126,7 +124,6 @@ public class SampleQueue implements TrackOutput {
|
|||
* keys needed to decrypt it.
|
||||
*
|
||||
* @param allocator An {@link Allocator} from which allocations for sample data can be obtained.
|
||||
* @param playbackLooper The looper associated with the media playback thread.
|
||||
* @param drmSessionManager The {@link DrmSessionManager} to obtain {@link DrmSession DrmSessions}
|
||||
* from. The created instance does not take ownership of this {@link DrmSessionManager}.
|
||||
* @param drmEventDispatcher A {@link DrmSessionEventListener.EventDispatcher} to notify of events
|
||||
|
|
@ -134,22 +131,36 @@ public class SampleQueue implements TrackOutput {
|
|||
*/
|
||||
public static SampleQueue createWithDrm(
|
||||
Allocator allocator,
|
||||
Looper playbackLooper,
|
||||
DrmSessionManager drmSessionManager,
|
||||
DrmSessionEventListener.EventDispatcher drmEventDispatcher) {
|
||||
return new SampleQueue(
|
||||
allocator,
|
||||
Assertions.checkNotNull(playbackLooper),
|
||||
Assertions.checkNotNull(drmSessionManager),
|
||||
Assertions.checkNotNull(drmEventDispatcher));
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Use {@link #createWithDrm(Allocator, DrmSessionManager, EventDispatcher)} instead.
|
||||
* The {@code playbackLooper} should be configured on the {@link DrmSessionManager} with
|
||||
* {@link DrmSessionManager#setPlayer(Looper, PlayerId)}.
|
||||
*/
|
||||
@Deprecated
|
||||
public static SampleQueue createWithDrm(
|
||||
Allocator allocator,
|
||||
Looper playbackLooper,
|
||||
DrmSessionManager drmSessionManager,
|
||||
DrmSessionEventListener.EventDispatcher drmEventDispatcher) {
|
||||
drmSessionManager.setPlayer(playbackLooper, PlayerId.UNSET);
|
||||
return new SampleQueue(
|
||||
allocator,
|
||||
Assertions.checkNotNull(drmSessionManager),
|
||||
Assertions.checkNotNull(drmEventDispatcher));
|
||||
}
|
||||
|
||||
protected SampleQueue(
|
||||
Allocator allocator,
|
||||
@Nullable Looper playbackLooper,
|
||||
@Nullable DrmSessionManager drmSessionManager,
|
||||
@Nullable DrmSessionEventListener.EventDispatcher drmEventDispatcher) {
|
||||
this.playbackLooper = playbackLooper;
|
||||
this.drmSessionManager = drmSessionManager;
|
||||
this.drmEventDispatcher = drmEventDispatcher;
|
||||
sampleDataQueue = new SampleDataQueue(allocator);
|
||||
|
|
@ -803,8 +814,7 @@ public class SampleQueue implements TrackOutput {
|
|||
|| !sharedSampleMetadata.getEndValue().format.equals(upstreamFormat)) {
|
||||
DrmSessionReference drmSessionReference =
|
||||
drmSessionManager != null
|
||||
? drmSessionManager.preacquireSession(
|
||||
checkNotNull(playbackLooper), drmEventDispatcher, upstreamFormat)
|
||||
? drmSessionManager.preacquireSession(drmEventDispatcher, upstreamFormat)
|
||||
: DrmSessionReference.EMPTY;
|
||||
|
||||
sharedSampleMetadata.appendSpan(
|
||||
|
|
@ -913,9 +923,7 @@ public class SampleQueue implements TrackOutput {
|
|||
// Ensure we acquire the new session before releasing the previous one in case the same session
|
||||
// is being used for both DrmInitData.
|
||||
@Nullable DrmSession previousSession = currentDrmSession;
|
||||
currentDrmSession =
|
||||
drmSessionManager.acquireSession(
|
||||
Assertions.checkNotNull(playbackLooper), drmEventDispatcher, newFormat);
|
||||
currentDrmSession = drmSessionManager.acquireSession(drmEventDispatcher, newFormat);
|
||||
outputFormatHolder.drmSession = currentDrmSession;
|
||||
|
||||
if (previousSession != null) {
|
||||
|
|
|
|||
|
|
@ -51,7 +51,8 @@ public final class BundledChunkExtractor implements ExtractorOutput, ChunkExtrac
|
|||
format,
|
||||
enableEventMessageTrack,
|
||||
closedCaptionFormats,
|
||||
playerEmsgTrackOutput) -> {
|
||||
playerEmsgTrackOutput,
|
||||
playerId) -> {
|
||||
@Nullable String containerMimeType = format.containerMimeType;
|
||||
Extractor extractor;
|
||||
if (MimeTypes.isText(containerMimeType)) {
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ package com.google.android.exoplayer2.source.chunk;
|
|||
import androidx.annotation.Nullable;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.extractor.ChunkIndex;
|
||||
import com.google.android.exoplayer2.extractor.ExtractorInput;
|
||||
import com.google.android.exoplayer2.extractor.TrackOutput;
|
||||
|
|
@ -42,6 +43,8 @@ public interface ChunkExtractor {
|
|||
* @param representationFormat The format of the representation to extract from.
|
||||
* @param enableEventMessageTrack Whether to enable the event message track.
|
||||
* @param closedCaptionFormats The {@link Format Formats} of the Closed-Caption tracks.
|
||||
* @param playerEmsgTrackOutput The {@link TrackOutput} for extracted EMSG messages, or null.
|
||||
* @param playerId The {@link PlayerId} of the player using this chunk extractor.
|
||||
* @return A new {@link ChunkExtractor} instance, or null if not applicable.
|
||||
*/
|
||||
@Nullable
|
||||
|
|
@ -50,7 +53,8 @@ public interface ChunkExtractor {
|
|||
Format representationFormat,
|
||||
boolean enableEventMessageTrack,
|
||||
List<Format> closedCaptionFormats,
|
||||
@Nullable TrackOutput playerEmsgTrackOutput);
|
||||
@Nullable TrackOutput playerEmsgTrackOutput,
|
||||
PlayerId playerId);
|
||||
}
|
||||
|
||||
/** Provides {@link TrackOutput} instances to be written to during extraction. */
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
|
|||
import static java.lang.Math.max;
|
||||
import static java.lang.Math.min;
|
||||
|
||||
import android.os.Looper;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
|
|
@ -144,11 +143,7 @@ public class ChunkSampleStream<T extends ChunkSource>
|
|||
SampleQueue[] sampleQueues = new SampleQueue[1 + embeddedTrackCount];
|
||||
|
||||
primarySampleQueue =
|
||||
SampleQueue.createWithDrm(
|
||||
allocator,
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
drmSessionManager,
|
||||
drmEventDispatcher);
|
||||
SampleQueue.createWithDrm(allocator, drmSessionManager, drmEventDispatcher);
|
||||
trackTypes[0] = primaryTrackType;
|
||||
sampleQueues[0] = primarySampleQueue;
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ import androidx.annotation.Nullable;
|
|||
import androidx.annotation.RequiresApi;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.extractor.ChunkIndex;
|
||||
import com.google.android.exoplayer2.extractor.DummyTrackOutput;
|
||||
import com.google.android.exoplayer2.extractor.ExtractorInput;
|
||||
|
|
@ -42,6 +43,7 @@ import com.google.android.exoplayer2.source.mediaparser.OutputConsumerAdapterV30
|
|||
import com.google.android.exoplayer2.util.Assertions;
|
||||
import com.google.android.exoplayer2.util.Log;
|
||||
import com.google.android.exoplayer2.util.MimeTypes;
|
||||
import com.google.android.exoplayer2.util.Util;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
|
@ -58,10 +60,12 @@ public final class MediaParserChunkExtractor implements ChunkExtractor {
|
|||
format,
|
||||
enableEventMessageTrack,
|
||||
closedCaptionFormats,
|
||||
playerEmsgTrackOutput) -> {
|
||||
playerEmsgTrackOutput,
|
||||
playerId) -> {
|
||||
if (!MimeTypes.isText(format.containerMimeType)) {
|
||||
// Container is either Matroska or Fragmented MP4.
|
||||
return new MediaParserChunkExtractor(primaryTrackType, format, closedCaptionFormats);
|
||||
return new MediaParserChunkExtractor(
|
||||
primaryTrackType, format, closedCaptionFormats, playerId);
|
||||
} else {
|
||||
// This is either RAWCC (unsupported) or a text track that does not require an extractor.
|
||||
Log.w(TAG, "Ignoring an unsupported text track.");
|
||||
|
|
@ -86,10 +90,14 @@ public final class MediaParserChunkExtractor implements ChunkExtractor {
|
|||
* @param manifestFormat The chunks {@link Format} as obtained from the manifest.
|
||||
* @param closedCaptionFormats A list containing the {@link Format Formats} of the closed-caption
|
||||
* tracks in the chunks.
|
||||
* @param playerId The {@link PlayerId} of the player this chunk extractor is used for.
|
||||
*/
|
||||
@SuppressLint("WrongConstant")
|
||||
public MediaParserChunkExtractor(
|
||||
@C.TrackType int primaryTrackType, Format manifestFormat, List<Format> closedCaptionFormats) {
|
||||
@C.TrackType int primaryTrackType,
|
||||
Format manifestFormat,
|
||||
List<Format> closedCaptionFormats,
|
||||
PlayerId playerId) {
|
||||
outputConsumerAdapter =
|
||||
new OutputConsumerAdapterV30(
|
||||
manifestFormat, primaryTrackType, /* expectDummySeekMap= */ true);
|
||||
|
|
@ -114,6 +122,9 @@ public final class MediaParserChunkExtractor implements ChunkExtractor {
|
|||
MediaParserUtil.toCaptionsMediaFormat(closedCaptionFormats.get(i)));
|
||||
}
|
||||
mediaParser.setParameter(PARAMETER_EXPOSE_CAPTION_FORMATS, closedCaptionMediaFormats);
|
||||
if (Util.SDK_INT >= 31) {
|
||||
MediaParserUtil.setLogSessionIdOnMediaParser(mediaParser, playerId);
|
||||
}
|
||||
outputConsumerAdapter.setMuxedCaptionFormats(closedCaptionFormats);
|
||||
trackOutputProviderAdapter = new TrackOutputProviderAdapter();
|
||||
dummyTrackOutput = new DummyTrackOutput();
|
||||
|
|
|
|||
|
|
@ -17,7 +17,11 @@ package com.google.android.exoplayer2.source.mediaparser;
|
|||
|
||||
import android.media.MediaFormat;
|
||||
import android.media.MediaParser;
|
||||
import android.media.metrics.LogSessionId;
|
||||
import androidx.annotation.DoNotInline;
|
||||
import androidx.annotation.RequiresApi;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
|
||||
/**
|
||||
* Miscellaneous constants and utility methods related to the {@link MediaParser} integration.
|
||||
|
|
@ -57,4 +61,28 @@ public final class MediaParserUtil {
|
|||
}
|
||||
return mediaFormat;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calls {@link MediaParser#setLogSessionId(LogSessionId)}.
|
||||
*
|
||||
* @param mediaParser The {@link MediaParser} to call the method on.
|
||||
* @param playerId The {@link PlayerId} to obtain the {@link LogSessionId} from.
|
||||
*/
|
||||
@RequiresApi(31)
|
||||
public static void setLogSessionIdOnMediaParser(MediaParser mediaParser, PlayerId playerId) {
|
||||
Api31.setLogSessionIdOnMediaParser(mediaParser, playerId);
|
||||
}
|
||||
|
||||
@RequiresApi(31)
|
||||
private static final class Api31 {
|
||||
private Api31() {}
|
||||
|
||||
@DoNotInline
|
||||
public static void setLogSessionIdOnMediaParser(MediaParser mediaParser, PlayerId playerId) {
|
||||
LogSessionId logSessionId = playerId.getLogSessionId();
|
||||
if (!logSessionId.equals(LogSessionId.LOG_SESSION_ID_NONE)) {
|
||||
mediaParser.setLogSessionId(logSessionId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -567,6 +567,13 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||
* Sets whether to enable tunneling if possible. Tunneling will only be enabled if it's
|
||||
* supported by the audio and video renderers for the selected tracks.
|
||||
*
|
||||
* <p>Tunneling is known to have many device specific issues and limitations. Manual testing is
|
||||
* strongly recomended to check that the media plays correctly when this option is enabled. See
|
||||
* [#9661](https://github.com/google/ExoPlayer/issues/9661),
|
||||
* [#9133](https://github.com/google/ExoPlayer/issues/9133),
|
||||
* [#9317](https://github.com/google/ExoPlayer/issues/9317),
|
||||
* [#9502](https://github.com/google/ExoPlayer/issues/9502).
|
||||
*
|
||||
* @param tunnelingEnabled Whether to enable tunneling if possible.
|
||||
* @return This builder.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4;
|
|||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.RendererConfiguration;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.decoder.CryptoConfig;
|
||||
import com.google.android.exoplayer2.decoder.DecoderException;
|
||||
import com.google.android.exoplayer2.decoder.DecoderInputBuffer;
|
||||
|
|
@ -84,6 +85,7 @@ public class DecoderAudioRendererTest {
|
|||
return FORMAT;
|
||||
}
|
||||
};
|
||||
audioRenderer.init(/* index= */ 0, PlayerId.UNSET);
|
||||
}
|
||||
|
||||
@Config(sdk = 19)
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ import com.google.android.exoplayer2.ExoPlaybackException;
|
|||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.PlaybackException;
|
||||
import com.google.android.exoplayer2.RendererConfiguration;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.drm.DrmSessionEventListener;
|
||||
import com.google.android.exoplayer2.drm.DrmSessionManager;
|
||||
import com.google.android.exoplayer2.mediacodec.MediaCodecInfo;
|
||||
|
|
@ -110,6 +111,7 @@ public class MediaCodecAudioRendererTest {
|
|||
eventHandler,
|
||||
audioRendererEventListener,
|
||||
audioSink);
|
||||
mediaCodecAudioRenderer.init(/* index= */ 0, PlayerId.UNSET);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -264,6 +266,7 @@ public class MediaCodecAudioRendererTest {
|
|||
oneByteSample(/* timeUs= */ 0, C.BUFFER_FLAG_KEY_FRAME), END_OF_STREAM_ITEM));
|
||||
fakeSampleStream.writeData(/* startPositionUs= */ 0);
|
||||
|
||||
exceptionThrowingRenderer.init(/* index= */ 0, PlayerId.UNSET);
|
||||
exceptionThrowingRenderer.enable(
|
||||
RendererConfiguration.DEFAULT,
|
||||
new Format[] {AUDIO_AAC, changedFormat},
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import androidx.annotation.Nullable;
|
|||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.drm.DrmSessionManager.DrmSessionReference;
|
||||
import com.google.android.exoplayer2.drm.ExoMediaDrm.AppManagedProvider;
|
||||
import com.google.android.exoplayer2.source.MediaSource;
|
||||
|
|
@ -67,12 +68,11 @@ public class DefaultDrmSessionManagerTest {
|
|||
.setUuidAndExoMediaDrmProvider(DRM_SCHEME_UUID, uuid -> new FakeExoMediaDrm())
|
||||
.build(/* mediaDrmCallback= */ licenseServer);
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
|
||||
DrmSession drmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
waitForOpenedWithKeys(drmSession);
|
||||
|
||||
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENED_WITH_KEYS);
|
||||
|
|
@ -91,12 +91,11 @@ public class DefaultDrmSessionManagerTest {
|
|||
.build(/* mediaDrmCallback= */ licenseServer);
|
||||
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
|
||||
DrmSession drmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
waitForOpenedWithKeys(drmSession);
|
||||
|
||||
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENED_WITH_KEYS);
|
||||
|
|
@ -117,12 +116,11 @@ public class DefaultDrmSessionManagerTest {
|
|||
.build(/* mediaDrmCallback= */ licenseServer);
|
||||
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
|
||||
DrmSession drmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
waitForOpenedWithKeys(drmSession);
|
||||
drmSession.release(/* eventDispatcher= */ null);
|
||||
|
||||
|
|
@ -140,12 +138,11 @@ public class DefaultDrmSessionManagerTest {
|
|||
.build(/* mediaDrmCallback= */ licenseServer);
|
||||
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
|
||||
DrmSession drmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
waitForOpenedWithKeys(drmSession);
|
||||
drmSession.release(/* eventDispatcher= */ null);
|
||||
|
||||
|
|
@ -165,12 +162,11 @@ public class DefaultDrmSessionManagerTest {
|
|||
.build(/* mediaDrmCallback= */ licenseServer);
|
||||
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
|
||||
DrmSession drmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
waitForOpenedWithKeys(drmSession);
|
||||
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENED_WITH_KEYS);
|
||||
|
||||
|
|
@ -192,12 +188,11 @@ public class DefaultDrmSessionManagerTest {
|
|||
.build(/* mediaDrmCallback= */ licenseServer);
|
||||
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
|
||||
DrmSession drmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
drmSessionManager.release();
|
||||
|
||||
// The manager is now in a 'releasing' state because the session is still active - so the
|
||||
|
|
@ -238,12 +233,11 @@ public class DefaultDrmSessionManagerTest {
|
|||
.build(/* mediaDrmCallback= */ licenseServer);
|
||||
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
|
||||
DrmSession drmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
waitForOpenedWithKeys(drmSession);
|
||||
|
||||
// Release the manager (there's still an explicit reference to the session from acquireSession).
|
||||
|
|
@ -278,12 +272,11 @@ public class DefaultDrmSessionManagerTest {
|
|||
.build(/* mediaDrmCallback= */ licenseServer);
|
||||
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
|
||||
DrmSession firstDrmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
waitForOpenedWithKeys(firstDrmSession);
|
||||
firstDrmSession.release(/* eventDispatcher= */ null);
|
||||
|
||||
|
|
@ -293,9 +286,7 @@ public class DefaultDrmSessionManagerTest {
|
|||
DrmSession secondDrmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
secondFormatWithDrmInitData));
|
||||
/* eventDispatcher= */ null, secondFormatWithDrmInitData));
|
||||
// The drmSessionManager had to release firstDrmSession in order to acquire secondDrmSession.
|
||||
assertThat(firstDrmSession.getState()).isEqualTo(DrmSession.STATE_RELEASED);
|
||||
|
||||
|
|
@ -322,18 +313,15 @@ public class DefaultDrmSessionManagerTest {
|
|||
.build(/* mediaDrmCallback= */ licenseServer);
|
||||
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
|
||||
DrmSessionReference firstDrmSessionReference =
|
||||
checkNotNull(
|
||||
drmSessionManager.preacquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
DrmSession firstDrmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
waitForOpenedWithKeys(firstDrmSession);
|
||||
firstDrmSession.release(/* eventDispatcher= */ null);
|
||||
|
||||
|
|
@ -343,9 +331,7 @@ public class DefaultDrmSessionManagerTest {
|
|||
DrmSession secondDrmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
secondFormatWithDrmInitData));
|
||||
/* eventDispatcher= */ null, secondFormatWithDrmInitData));
|
||||
// The drmSessionManager had to release both it's internal keep-alive reference and the
|
||||
// reference represented by firstDrmSessionReference in order to acquire secondDrmSession.
|
||||
assertThat(firstDrmSession.getState()).isEqualTo(DrmSession.STATE_RELEASED);
|
||||
|
|
@ -372,12 +358,11 @@ public class DefaultDrmSessionManagerTest {
|
|||
.build(/* mediaDrmCallback= */ licenseServer);
|
||||
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
|
||||
DrmSession firstDrmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
waitForOpenedWithKeys(firstDrmSession);
|
||||
firstDrmSession.release(/* eventDispatcher= */ null);
|
||||
|
||||
|
|
@ -388,9 +373,7 @@ public class DefaultDrmSessionManagerTest {
|
|||
DrmSession secondDrmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
assertThat(secondDrmSession).isSameInstanceAs(firstDrmSession);
|
||||
|
||||
// Let the timeout definitely expire, and check the session didn't get released.
|
||||
|
|
@ -422,12 +405,10 @@ public class DefaultDrmSessionManagerTest {
|
|||
.build(/* mediaDrmCallback= */ licenseServer);
|
||||
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
|
||||
|
||||
DrmSessionReference sessionReference =
|
||||
drmSessionManager.preacquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
eventDispatcher,
|
||||
FORMAT_WITH_DRM_INIT_DATA);
|
||||
drmSessionManager.preacquireSession(eventDispatcher, FORMAT_WITH_DRM_INIT_DATA);
|
||||
|
||||
// Wait for the key load event to propagate, indicating the pre-acquired session is in
|
||||
// STATE_OPENED_WITH_KEYS.
|
||||
|
|
@ -439,9 +420,7 @@ public class DefaultDrmSessionManagerTest {
|
|||
DrmSession drmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
|
||||
// Without idling the main/playback looper, we assert the session is already in OPENED_WITH_KEYS
|
||||
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENED_WITH_KEYS);
|
||||
|
|
@ -471,12 +450,10 @@ public class DefaultDrmSessionManagerTest {
|
|||
.build(/* mediaDrmCallback= */ licenseServer);
|
||||
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
|
||||
|
||||
DrmSessionReference sessionReference =
|
||||
drmSessionManager.preacquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA);
|
||||
drmSessionManager.preacquireSession(/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA);
|
||||
|
||||
// Release the pre-acquired reference before the underlying session has had a chance to be
|
||||
// constructed.
|
||||
|
|
@ -487,9 +464,7 @@ public class DefaultDrmSessionManagerTest {
|
|||
DrmSession drmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENED);
|
||||
|
||||
waitForOpenedWithKeys(drmSession);
|
||||
|
|
@ -511,12 +486,10 @@ public class DefaultDrmSessionManagerTest {
|
|||
.build(/* mediaDrmCallback= */ licenseServer);
|
||||
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
|
||||
|
||||
DrmSessionReference sessionReference =
|
||||
drmSessionManager.preacquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA);
|
||||
drmSessionManager.preacquireSession(/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA);
|
||||
|
||||
// Release the manager before the underlying session has had a chance to be constructed. This
|
||||
// will release all pre-acquired sessions.
|
||||
|
|
@ -531,9 +504,7 @@ public class DefaultDrmSessionManagerTest {
|
|||
DrmSession drmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENED);
|
||||
waitForOpenedWithKeys(drmSession);
|
||||
|
||||
|
|
@ -559,14 +530,13 @@ public class DefaultDrmSessionManagerTest {
|
|||
.build(/* mediaDrmCallback= */ licenseServer);
|
||||
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
|
||||
|
||||
DefaultDrmSession drmSession =
|
||||
(DefaultDrmSession)
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
waitForOpenedWithKeys(drmSession);
|
||||
|
||||
assertThat(licenseServer.getReceivedSchemeDatas()).hasSize(1);
|
||||
|
|
@ -601,14 +571,13 @@ public class DefaultDrmSessionManagerTest {
|
|||
.build(/* mediaDrmCallback= */ licenseServer);
|
||||
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
|
||||
|
||||
DefaultDrmSession drmSession =
|
||||
(DefaultDrmSession)
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
waitForOpenedWithKeys(drmSession);
|
||||
|
||||
assertThat(licenseServer.getReceivedSchemeDatas()).hasSize(1);
|
||||
|
|
@ -646,12 +615,11 @@ public class DefaultDrmSessionManagerTest {
|
|||
uuid -> new FakeExoMediaDrm.Builder().setProvisionsRequired(1).build())
|
||||
.build(/* mediaDrmCallback= */ licenseServer);
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
|
||||
DrmSession drmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
// Confirm that opening the session threw NotProvisionedException (otherwise state would be
|
||||
// OPENED)
|
||||
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENING);
|
||||
|
|
@ -680,12 +648,11 @@ public class DefaultDrmSessionManagerTest {
|
|||
.build())
|
||||
.build(/* mediaDrmCallback= */ licenseServer);
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
|
||||
DrmSession drmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENED);
|
||||
waitForOpenedWithKeys(drmSession);
|
||||
|
||||
|
|
@ -707,12 +674,11 @@ public class DefaultDrmSessionManagerTest {
|
|||
uuid -> new FakeExoMediaDrm.Builder().setProvisionsRequired(2).build())
|
||||
.build(/* mediaDrmCallback= */ licenseServer);
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
|
||||
DrmSession drmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
// Confirm that opening the session threw NotProvisionedException (otherwise state would be
|
||||
// OPENED)
|
||||
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENING);
|
||||
|
|
@ -736,12 +702,11 @@ public class DefaultDrmSessionManagerTest {
|
|||
DRM_SCHEME_UUID, uuid -> new FakeExoMediaDrm.Builder().build())
|
||||
.build(/* mediaDrmCallback= */ licenseServer);
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
|
||||
DrmSession drmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENED);
|
||||
waitForOpenedWithKeys(drmSession);
|
||||
|
||||
|
|
@ -763,12 +728,11 @@ public class DefaultDrmSessionManagerTest {
|
|||
.setSessionKeepaliveMs(C.TIME_UNSET)
|
||||
.build(/* mediaDrmCallback= */ licenseServer);
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
|
||||
DrmSession drmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
// Confirm that opening the session threw NotProvisionedException (otherwise state would be
|
||||
// OPENED)
|
||||
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENING);
|
||||
|
|
@ -780,9 +744,7 @@ public class DefaultDrmSessionManagerTest {
|
|||
drmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
// Confirm that opening the session threw NotProvisionedException (otherwise state would be
|
||||
// OPENED)
|
||||
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENING);
|
||||
|
|
@ -803,16 +765,12 @@ public class DefaultDrmSessionManagerTest {
|
|||
Exception.class,
|
||||
() ->
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
assertThrows(
|
||||
Exception.class,
|
||||
() ->
|
||||
drmSessionManager.preacquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -825,12 +783,11 @@ public class DefaultDrmSessionManagerTest {
|
|||
.build(/* mediaDrmCallback= */ licenseServer);
|
||||
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
|
||||
DrmSession drmSession =
|
||||
checkNotNull(
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
drmSessionManager.release();
|
||||
|
||||
// The manager's prepareCount is now zero, but the drmSession is keeping it in a 'releasing'
|
||||
|
|
@ -839,16 +796,12 @@ public class DefaultDrmSessionManagerTest {
|
|||
Exception.class,
|
||||
() ->
|
||||
drmSessionManager.acquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
assertThrows(
|
||||
Exception.class,
|
||||
() ->
|
||||
drmSessionManager.preacquireSession(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()),
|
||||
/* eventDispatcher= */ null,
|
||||
FORMAT_WITH_DRM_INIT_DATA));
|
||||
/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
|
||||
|
||||
drmSession.release(/* eventDispatcher= */ null);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import android.net.Uri;
|
|||
import androidx.test.core.app.ApplicationProvider;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.drm.DrmSessionEventListener;
|
||||
import com.google.android.exoplayer2.drm.DrmSessionManager;
|
||||
import com.google.android.exoplayer2.extractor.mp4.Mp4Extractor;
|
||||
|
|
@ -48,7 +49,8 @@ public final class ProgressiveMediaPeriodTest {
|
|||
@Test
|
||||
public void prepareUsingMediaParser_updatesSourceInfoBeforeOnPreparedCallback()
|
||||
throws TimeoutException {
|
||||
testExtractorsUpdatesSourceInfoBeforeOnPreparedCallback(new MediaParserExtractorAdapter());
|
||||
testExtractorsUpdatesSourceInfoBeforeOnPreparedCallback(
|
||||
new MediaParserExtractorAdapter(PlayerId.UNSET));
|
||||
}
|
||||
|
||||
private static void testExtractorsUpdatesSourceInfoBeforeOnPreparedCallback(
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ import com.google.android.exoplayer2.C;
|
|||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.FormatHolder;
|
||||
import com.google.android.exoplayer2.PlaybackException;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.decoder.DecoderInputBuffer;
|
||||
import com.google.android.exoplayer2.drm.DrmInitData;
|
||||
import com.google.android.exoplayer2.drm.DrmSession;
|
||||
|
|
@ -46,7 +47,6 @@ import com.google.android.exoplayer2.testutil.FakeCryptoConfig;
|
|||
import com.google.android.exoplayer2.testutil.TestUtil;
|
||||
import com.google.android.exoplayer2.upstream.Allocator;
|
||||
import com.google.android.exoplayer2.upstream.DefaultAllocator;
|
||||
import com.google.android.exoplayer2.util.Assertions;
|
||||
import com.google.android.exoplayer2.util.MimeTypes;
|
||||
import com.google.android.exoplayer2.util.ParsableByteArray;
|
||||
import com.google.common.primitives.Bytes;
|
||||
|
|
@ -146,12 +146,7 @@ public final class SampleQueueTest {
|
|||
mockDrmSession = Mockito.mock(DrmSession.class);
|
||||
mockDrmSessionManager = new MockDrmSessionManager(mockDrmSession);
|
||||
eventDispatcher = new DrmSessionEventListener.EventDispatcher();
|
||||
sampleQueue =
|
||||
new SampleQueue(
|
||||
allocator,
|
||||
/* playbackLooper= */ Assertions.checkNotNull(Looper.myLooper()),
|
||||
mockDrmSessionManager,
|
||||
eventDispatcher);
|
||||
sampleQueue = new SampleQueue(allocator, mockDrmSessionManager, eventDispatcher);
|
||||
formatHolder = new FormatHolder();
|
||||
inputBuffer = new DecoderInputBuffer(DecoderInputBuffer.BUFFER_REPLACEMENT_MODE_NORMAL);
|
||||
}
|
||||
|
|
@ -424,12 +419,7 @@ public final class SampleQueueTest {
|
|||
public void isReadyReturnsTrueForClearSampleAndPlayClearSamplesWithoutKeysIsTrue() {
|
||||
when(mockDrmSession.playClearSamplesWithoutKeys()).thenReturn(true);
|
||||
// We recreate the queue to ensure the mock DRM session manager flags are taken into account.
|
||||
sampleQueue =
|
||||
new SampleQueue(
|
||||
allocator,
|
||||
/* playbackLooper= */ Assertions.checkNotNull(Looper.myLooper()),
|
||||
mockDrmSessionManager,
|
||||
eventDispatcher);
|
||||
sampleQueue = new SampleQueue(allocator, mockDrmSessionManager, eventDispatcher);
|
||||
writeTestDataWithEncryptedSections();
|
||||
assertThat(sampleQueue.isReady(/* loadingFinished= */ false)).isTrue();
|
||||
}
|
||||
|
|
@ -574,12 +564,7 @@ public final class SampleQueueTest {
|
|||
public void allowPlayClearSamplesWithoutKeysReadsClearSamples() {
|
||||
when(mockDrmSession.playClearSamplesWithoutKeys()).thenReturn(true);
|
||||
// We recreate the queue to ensure the mock DRM session manager flags are taken into account.
|
||||
sampleQueue =
|
||||
new SampleQueue(
|
||||
allocator,
|
||||
/* playbackLooper= */ Assertions.checkNotNull(Looper.myLooper()),
|
||||
mockDrmSessionManager,
|
||||
eventDispatcher);
|
||||
sampleQueue = new SampleQueue(allocator, mockDrmSessionManager, eventDispatcher);
|
||||
when(mockDrmSession.getState()).thenReturn(DrmSession.STATE_OPENED);
|
||||
writeTestDataWithEncryptedSections();
|
||||
|
||||
|
|
@ -1246,11 +1231,7 @@ public final class SampleQueueTest {
|
|||
public void adjustUpstreamFormat() {
|
||||
String label = "label";
|
||||
sampleQueue =
|
||||
new SampleQueue(
|
||||
allocator,
|
||||
/* playbackLooper= */ Assertions.checkNotNull(Looper.myLooper()),
|
||||
mockDrmSessionManager,
|
||||
eventDispatcher) {
|
||||
new SampleQueue(allocator, mockDrmSessionManager, eventDispatcher) {
|
||||
@Override
|
||||
public Format getAdjustedUpstreamFormat(Format format) {
|
||||
return super.getAdjustedUpstreamFormat(copyWithLabel(format, label));
|
||||
|
|
@ -1266,11 +1247,7 @@ public final class SampleQueueTest {
|
|||
public void invalidateUpstreamFormatAdjustment() {
|
||||
AtomicReference<String> label = new AtomicReference<>("label1");
|
||||
sampleQueue =
|
||||
new SampleQueue(
|
||||
allocator,
|
||||
/* playbackLooper= */ Assertions.checkNotNull(Looper.myLooper()),
|
||||
mockDrmSessionManager,
|
||||
eventDispatcher) {
|
||||
new SampleQueue(allocator, mockDrmSessionManager, eventDispatcher) {
|
||||
@Override
|
||||
public Format getAdjustedUpstreamFormat(Format format) {
|
||||
return super.getAdjustedUpstreamFormat(copyWithLabel(format, label.get()));
|
||||
|
|
@ -1770,12 +1747,13 @@ public final class SampleQueueTest {
|
|||
this.mockDrmSession = mockDrmSession;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPlayer(Looper playbackLooper, PlayerId playerId) {}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public DrmSession acquireSession(
|
||||
Looper playbackLooper,
|
||||
@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher,
|
||||
Format format) {
|
||||
@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher, Format format) {
|
||||
return format.drmInitData != null ? mockDrmSession : mockPlaceholderDrmSession;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ import android.os.SystemClock;
|
|||
import androidx.annotation.Nullable;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.source.chunk.ChunkSource;
|
||||
import com.google.android.exoplayer2.source.dash.PlayerEmsgHandler.PlayerTrackEmsgHandler;
|
||||
import com.google.android.exoplayer2.source.dash.manifest.DashManifest;
|
||||
|
|
@ -49,6 +50,7 @@ public interface DashChunkSource extends ChunkSource {
|
|||
* @param closedCaptionFormats The {@link Format Formats} of closed caption tracks to be output.
|
||||
* @param transferListener The transfer listener which should be informed of any data transfers.
|
||||
* May be null if no listener is available.
|
||||
* @param playerId The {@link PlayerId} of the player using this chunk source.
|
||||
* @return The created {@link DashChunkSource}.
|
||||
*/
|
||||
DashChunkSource createDashChunkSource(
|
||||
|
|
@ -63,7 +65,8 @@ public interface DashChunkSource extends ChunkSource {
|
|||
boolean enableEventMessageTrack,
|
||||
List<Format> closedCaptionFormats,
|
||||
@Nullable PlayerTrackEmsgHandler playerEmsgHandler,
|
||||
@Nullable TransferListener transferListener);
|
||||
@Nullable TransferListener transferListener,
|
||||
PlayerId playerId);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import androidx.annotation.Nullable;
|
|||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.SeekParameters;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.drm.DrmSessionEventListener;
|
||||
import com.google.android.exoplayer2.drm.DrmSessionManager;
|
||||
import com.google.android.exoplayer2.offline.StreamKey;
|
||||
|
|
@ -96,6 +97,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
|
|||
trackEmsgHandlerBySampleStream;
|
||||
private final MediaSourceEventListener.EventDispatcher mediaSourceEventDispatcher;
|
||||
private final DrmSessionEventListener.EventDispatcher drmEventDispatcher;
|
||||
private final PlayerId playerId;
|
||||
|
||||
@Nullable private Callback callback;
|
||||
private ChunkSampleStream<DashChunkSource>[] sampleStreams;
|
||||
|
|
@ -120,7 +122,8 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
|
|||
LoaderErrorThrower manifestLoaderErrorThrower,
|
||||
Allocator allocator,
|
||||
CompositeSequenceableLoaderFactory compositeSequenceableLoaderFactory,
|
||||
PlayerEmsgCallback playerEmsgCallback) {
|
||||
PlayerEmsgCallback playerEmsgCallback,
|
||||
PlayerId playerId) {
|
||||
this.id = id;
|
||||
this.manifest = manifest;
|
||||
this.baseUrlExclusionList = baseUrlExclusionList;
|
||||
|
|
@ -135,6 +138,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
|
|||
this.manifestLoaderErrorThrower = manifestLoaderErrorThrower;
|
||||
this.allocator = allocator;
|
||||
this.compositeSequenceableLoaderFactory = compositeSequenceableLoaderFactory;
|
||||
this.playerId = playerId;
|
||||
playerEmsgHandler = new PlayerEmsgHandler(manifest, playerEmsgCallback, allocator);
|
||||
sampleStreams = newSampleStreamArray(0);
|
||||
eventSampleStreams = new EventSampleStream[0];
|
||||
|
|
@ -777,7 +781,8 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
|
|||
enableEventMessageTrack,
|
||||
embeddedClosedCaptionTrackFormats,
|
||||
trackPlayerEmsgHandler,
|
||||
transferListener);
|
||||
transferListener,
|
||||
playerId);
|
||||
ChunkSampleStream<DashChunkSource> stream =
|
||||
new ChunkSampleStream<>(
|
||||
trackGroupInfo.trackType,
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import static java.lang.Math.min;
|
|||
|
||||
import android.net.Uri;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.SystemClock;
|
||||
import android.text.TextUtils;
|
||||
import android.util.SparseArray;
|
||||
|
|
@ -559,6 +560,7 @@ public final class DashMediaSource extends BaseMediaSource {
|
|||
protected void prepareSourceInternal(@Nullable TransferListener mediaTransferListener) {
|
||||
this.mediaTransferListener = mediaTransferListener;
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), getPlayerId());
|
||||
if (sideloadedManifest) {
|
||||
processManifest(false);
|
||||
} else {
|
||||
|
|
@ -596,7 +598,8 @@ public final class DashMediaSource extends BaseMediaSource {
|
|||
manifestLoadErrorThrower,
|
||||
allocator,
|
||||
compositeSequenceableLoaderFactory,
|
||||
playerEmsgCallback);
|
||||
playerEmsgCallback,
|
||||
getPlayerId());
|
||||
periodsById.put(mediaPeriod.id, mediaPeriod);
|
||||
return mediaPeriod;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import androidx.annotation.Nullable;
|
|||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.SeekParameters;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.extractor.ChunkIndex;
|
||||
import com.google.android.exoplayer2.source.BehindLiveWindowException;
|
||||
import com.google.android.exoplayer2.source.chunk.BaseMediaChunkIterator;
|
||||
|
|
@ -110,7 +111,8 @@ public class DefaultDashChunkSource implements DashChunkSource {
|
|||
boolean enableEventMessageTrack,
|
||||
List<Format> closedCaptionFormats,
|
||||
@Nullable PlayerTrackEmsgHandler playerEmsgHandler,
|
||||
@Nullable TransferListener transferListener) {
|
||||
@Nullable TransferListener transferListener,
|
||||
PlayerId playerId) {
|
||||
DataSource dataSource = dataSourceFactory.createDataSource();
|
||||
if (transferListener != null) {
|
||||
dataSource.addTransferListener(transferListener);
|
||||
|
|
@ -129,7 +131,8 @@ public class DefaultDashChunkSource implements DashChunkSource {
|
|||
maxSegmentsPerLoad,
|
||||
enableEventMessageTrack,
|
||||
closedCaptionFormats,
|
||||
playerEmsgHandler);
|
||||
playerEmsgHandler,
|
||||
playerId);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -171,6 +174,7 @@ public class DefaultDashChunkSource implements DashChunkSource {
|
|||
* @param closedCaptionFormats The {@link Format Formats} of closed caption tracks to be output.
|
||||
* @param playerTrackEmsgHandler The {@link PlayerTrackEmsgHandler} instance to handle emsg
|
||||
* messages targeting the player. Maybe null if this is not necessary.
|
||||
* @param playerId The {@link PlayerId} of the player using this chunk source.
|
||||
*/
|
||||
public DefaultDashChunkSource(
|
||||
ChunkExtractor.Factory chunkExtractorFactory,
|
||||
|
|
@ -186,7 +190,8 @@ public class DefaultDashChunkSource implements DashChunkSource {
|
|||
int maxSegmentsPerLoad,
|
||||
boolean enableEventMessageTrack,
|
||||
List<Format> closedCaptionFormats,
|
||||
@Nullable PlayerTrackEmsgHandler playerTrackEmsgHandler) {
|
||||
@Nullable PlayerTrackEmsgHandler playerTrackEmsgHandler,
|
||||
PlayerId playerId) {
|
||||
this.manifestLoaderErrorThrower = manifestLoaderErrorThrower;
|
||||
this.manifest = manifest;
|
||||
this.baseUrlExclusionList = baseUrlExclusionList;
|
||||
|
|
@ -217,7 +222,8 @@ public class DefaultDashChunkSource implements DashChunkSource {
|
|||
representation.format,
|
||||
enableEventMessageTrack,
|
||||
closedCaptionFormats,
|
||||
playerTrackEmsgHandler),
|
||||
playerTrackEmsgHandler,
|
||||
playerId),
|
||||
/* segmentNumShift= */ 0,
|
||||
representation.getIndex());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import android.net.Uri;
|
|||
import androidx.test.core.app.ApplicationProvider;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.drm.DrmSessionEventListener;
|
||||
import com.google.android.exoplayer2.drm.DrmSessionManager;
|
||||
import com.google.android.exoplayer2.source.CompositeSequenceableLoaderFactory;
|
||||
|
|
@ -212,7 +213,8 @@ public final class DashMediaPeriodTest {
|
|||
mock(LoaderErrorThrower.class),
|
||||
mock(Allocator.class),
|
||||
mock(CompositeSequenceableLoaderFactory.class),
|
||||
mock(PlayerEmsgCallback.class));
|
||||
mock(PlayerEmsgCallback.class),
|
||||
PlayerId.UNSET);
|
||||
}
|
||||
|
||||
private static DashManifest parseManifest(String fileName) throws IOException {
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import androidx.test.core.app.ApplicationProvider;
|
|||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.source.LoadEventInfo;
|
||||
import com.google.android.exoplayer2.source.MediaLoadData;
|
||||
import com.google.android.exoplayer2.source.TrackGroup;
|
||||
|
|
@ -95,7 +96,8 @@ public class DefaultDashChunkSourceTest {
|
|||
/* maxSegmentsPerLoad= */ 1,
|
||||
/* enableEventMessageTrack= */ false,
|
||||
/* closedCaptionFormats */ ImmutableList.of(),
|
||||
/* playerTrackEmsgHandler= */ null);
|
||||
/* playerTrackEmsgHandler= */ null,
|
||||
PlayerId.UNSET);
|
||||
|
||||
long nowInPeriodUs = Util.msToUs(nowMs - manifest.availabilityStartTimeMs);
|
||||
ChunkHolder output = new ChunkHolder();
|
||||
|
|
@ -143,7 +145,8 @@ public class DefaultDashChunkSourceTest {
|
|||
/* maxSegmentsPerLoad= */ 1,
|
||||
/* enableEventMessageTrack= */ false,
|
||||
/* closedCaptionFormats */ ImmutableList.of(),
|
||||
/* playerTrackEmsgHandler= */ null);
|
||||
/* playerTrackEmsgHandler= */ null,
|
||||
PlayerId.UNSET);
|
||||
|
||||
ChunkHolder output = new ChunkHolder();
|
||||
chunkSource.getNextChunk(
|
||||
|
|
@ -326,7 +329,8 @@ public class DefaultDashChunkSourceTest {
|
|||
/* maxSegmentsPerLoad= */ 1,
|
||||
/* enableEventMessageTrack= */ false,
|
||||
/* closedCaptionFormats */ ImmutableList.of(),
|
||||
/* playerTrackEmsgHandler= */ null);
|
||||
/* playerTrackEmsgHandler= */ null,
|
||||
PlayerId.UNSET);
|
||||
}
|
||||
|
||||
private LoadErrorHandlingPolicy.LoadErrorInfo createFakeLoadErrorInfo(
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@ import androidx.test.ext.junit.runners.AndroidJUnit4;
|
|||
import com.google.android.exoplayer2.testutil.DataSourceContractTest;
|
||||
import com.google.android.exoplayer2.testutil.HttpDataSourceTestEnv;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Rule;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
|
|
@ -44,8 +43,4 @@ public class DefaultHttpDataSourceContractTest extends DataSourceContractTest {
|
|||
protected Uri getNotFoundUri() {
|
||||
return Uri.parse(httpDataSourceTestEnv.getNonexistentUrl());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Ignore("internal b/205811776")
|
||||
public void getResponseHeaders_noNullKeysOrValues() {}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,6 +29,9 @@ import com.google.android.exoplayer2.upstream.DataSpec.HttpMethod;
|
|||
import com.google.android.exoplayer2.util.Log;
|
||||
import com.google.android.exoplayer2.util.Util;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.ForwardingMap;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.common.net.HttpHeaders;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
|
@ -39,10 +42,10 @@ import java.net.HttpURLConnection;
|
|||
import java.net.MalformedURLException;
|
||||
import java.net.NoRouteToHostException;
|
||||
import java.net.URL;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
|
||||
/**
|
||||
|
|
@ -310,7 +313,18 @@ public class DefaultHttpDataSource extends BaseDataSource implements HttpDataSou
|
|||
|
||||
@Override
|
||||
public Map<String, List<String>> getResponseHeaders() {
|
||||
return connection == null ? Collections.emptyMap() : connection.getHeaderFields();
|
||||
if (connection == null) {
|
||||
return ImmutableMap.of();
|
||||
}
|
||||
// connection.getHeaderFields() always contains a null key with a value like
|
||||
// ["HTTP/1.1 200 OK"]. The response code is available from HttpURLConnection#getResponseCode()
|
||||
// and the HTTP version is fixed when establishing the connection.
|
||||
// DataSource#getResponseHeaders() doesn't allow null keys in the returned map, so we need to
|
||||
// remove it.
|
||||
// connection.getHeaderFields() returns a special unmodifiable case-insensitive Map
|
||||
// so we can't just remove the null key or make a copy without the null key. Instead we wrap it
|
||||
// in a ForwardingMap subclass that ignores and filters out null keys in the read methods.
|
||||
return new NullFilteringHeadersMap(connection.getHeaderFields());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -815,4 +829,64 @@ public class DefaultHttpDataSource extends BaseDataSource implements HttpDataSou
|
|||
String contentEncoding = connection.getHeaderField("Content-Encoding");
|
||||
return "gzip".equalsIgnoreCase(contentEncoding);
|
||||
}
|
||||
|
||||
private static class NullFilteringHeadersMap extends ForwardingMap<String, List<String>> {
|
||||
|
||||
private final Map<String, List<String>> headers;
|
||||
|
||||
public NullFilteringHeadersMap(Map<String, List<String>> headers) {
|
||||
this.headers = headers;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Map<String, List<String>> delegate() {
|
||||
return headers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsKey(@Nullable Object key) {
|
||||
return key != null && super.containsKey(key);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public List<String> get(@Nullable Object key) {
|
||||
return key == null ? null : super.get(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> keySet() {
|
||||
return Sets.filter(super.keySet(), key -> key != null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Entry<String, List<String>>> entrySet() {
|
||||
return Sets.filter(super.entrySet(), entry -> entry.getKey() != null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int size() {
|
||||
return super.size() - (super.containsKey(null) ? 1 : 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
return super.isEmpty() || (super.size() == 1 && super.containsKey(null));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsValue(@Nullable Object value) {
|
||||
return super.standardContainsValue(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(@Nullable Object object) {
|
||||
return object != null && super.standardEquals(object);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return super.standardHashCode();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import android.os.Parcelable;
|
|||
import androidx.annotation.Nullable;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.MediaMetadata;
|
||||
import com.google.android.exoplayer2.metadata.Metadata;
|
||||
import com.google.android.exoplayer2.util.Assertions;
|
||||
import com.google.android.exoplayer2.util.Log;
|
||||
|
|
@ -169,6 +170,16 @@ public final class IcyHeaders implements Metadata.Entry {
|
|||
metadataInterval = in.readInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void populateMediaMetadata(MediaMetadata.Builder builder) {
|
||||
if (name != null) {
|
||||
builder.setStation(name);
|
||||
}
|
||||
if (genre != null) {
|
||||
builder.setGenre(genre);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(@Nullable Object obj) {
|
||||
if (this == obj) {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ import static com.google.common.truth.Truth.assertThat;
|
|||
|
||||
import android.os.Parcel;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import com.google.android.exoplayer2.MediaMetadata;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
|
|
@ -45,4 +46,23 @@ public final class IcyHeadersTest {
|
|||
// Assert equals.
|
||||
assertThat(fromParcelIcyHeaders).isEqualTo(icyHeaders);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void populateMediaMetadata() {
|
||||
IcyHeaders headers =
|
||||
new IcyHeaders(
|
||||
/* bitrate= */ 1234,
|
||||
/* genre= */ "pop",
|
||||
/* name= */ "radio station",
|
||||
/* url= */ "url",
|
||||
/* isPublic= */ true,
|
||||
/* metadataInterval= */ 5678);
|
||||
MediaMetadata.Builder builder = new MediaMetadata.Builder();
|
||||
|
||||
headers.populateMediaMetadata(builder);
|
||||
MediaMetadata mediaMetadata = builder.build();
|
||||
|
||||
assertThat(mediaMetadata.station.toString()).isEqualTo("radio station");
|
||||
assertThat(mediaMetadata.genre.toString()).isEqualTo("pop");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import android.net.Uri;
|
|||
import android.text.TextUtils;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.extractor.Extractor;
|
||||
import com.google.android.exoplayer2.extractor.ExtractorInput;
|
||||
import com.google.android.exoplayer2.extractor.mp3.Mp3Extractor;
|
||||
|
|
@ -94,7 +95,8 @@ public final class DefaultHlsExtractorFactory implements HlsExtractorFactory {
|
|||
@Nullable List<Format> muxedCaptionFormats,
|
||||
TimestampAdjuster timestampAdjuster,
|
||||
Map<String, List<String>> responseHeaders,
|
||||
ExtractorInput sniffingExtractorInput)
|
||||
ExtractorInput sniffingExtractorInput,
|
||||
PlayerId playerId)
|
||||
throws IOException {
|
||||
@FileTypes.Type
|
||||
int formatInferredFileType = FileTypes.inferFileTypeFromMimeType(format.sampleMimeType);
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import androidx.annotation.Nullable;
|
|||
import androidx.annotation.VisibleForTesting;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.source.BehindLiveWindowException;
|
||||
import com.google.android.exoplayer2.source.TrackGroup;
|
||||
import com.google.android.exoplayer2.source.chunk.BaseMediaChunkIterator;
|
||||
|
|
@ -122,6 +123,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||
private final TrackGroup trackGroup;
|
||||
@Nullable private final List<Format> muxedCaptionFormats;
|
||||
private final FullSegmentEncryptionKeyCache keyCache;
|
||||
private final PlayerId playerId;
|
||||
|
||||
private boolean isTimestampMaster;
|
||||
private byte[] scratchSpace;
|
||||
|
|
@ -161,13 +163,15 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||
HlsDataSourceFactory dataSourceFactory,
|
||||
@Nullable TransferListener mediaTransferListener,
|
||||
TimestampAdjusterProvider timestampAdjusterProvider,
|
||||
@Nullable List<Format> muxedCaptionFormats) {
|
||||
@Nullable List<Format> muxedCaptionFormats,
|
||||
PlayerId playerId) {
|
||||
this.extractorFactory = extractorFactory;
|
||||
this.playlistTracker = playlistTracker;
|
||||
this.playlistUrls = playlistUrls;
|
||||
this.playlistFormats = playlistFormats;
|
||||
this.timestampAdjusterProvider = timestampAdjusterProvider;
|
||||
this.muxedCaptionFormats = muxedCaptionFormats;
|
||||
this.playerId = playerId;
|
||||
keyCache = new FullSegmentEncryptionKeyCache(KEY_CACHE_SIZE);
|
||||
scratchSpace = Util.EMPTY_BYTE_ARRAY;
|
||||
liveEdgeInPeriodTimeUs = C.TIME_UNSET;
|
||||
|
|
@ -453,7 +457,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||
previous,
|
||||
/* mediaSegmentKey= */ keyCache.get(mediaSegmentKeyUri),
|
||||
/* initSegmentKey= */ keyCache.get(initSegmentKeyUri),
|
||||
shouldSpliceIn);
|
||||
shouldSpliceIn,
|
||||
playerId);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ package com.google.android.exoplayer2.source.hls;
|
|||
import android.net.Uri;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.extractor.Extractor;
|
||||
import com.google.android.exoplayer2.extractor.ExtractorInput;
|
||||
import com.google.android.exoplayer2.extractor.PositionHolder;
|
||||
|
|
@ -44,6 +45,7 @@ public interface HlsExtractorFactory {
|
|||
* @param sniffingExtractorInput The first extractor input that will be passed to the returned
|
||||
* extractor's {@link Extractor#read(ExtractorInput, PositionHolder)}. Must only be used to
|
||||
* call {@link Extractor#sniff(ExtractorInput)}.
|
||||
* @param playerId The {@link PlayerId} of the player using this extractors factory.
|
||||
* @return An {@link HlsMediaChunkExtractor}.
|
||||
* @throws IOException If an I/O error is encountered while sniffing.
|
||||
*/
|
||||
|
|
@ -53,6 +55,7 @@ public interface HlsExtractorFactory {
|
|||
@Nullable List<Format> muxedCaptionFormats,
|
||||
TimestampAdjuster timestampAdjuster,
|
||||
Map<String, List<String>> responseHeaders,
|
||||
ExtractorInput sniffingExtractorInput)
|
||||
ExtractorInput sniffingExtractorInput,
|
||||
PlayerId playerId)
|
||||
throws IOException;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import android.net.Uri;
|
|||
import androidx.annotation.Nullable;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.drm.DrmInitData;
|
||||
import com.google.android.exoplayer2.extractor.DefaultExtractorInput;
|
||||
import com.google.android.exoplayer2.extractor.ExtractorInput;
|
||||
|
|
@ -91,7 +92,8 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
|||
@Nullable HlsMediaChunk previousChunk,
|
||||
@Nullable byte[] mediaSegmentKey,
|
||||
@Nullable byte[] initSegmentKey,
|
||||
boolean shouldSpliceIn) {
|
||||
boolean shouldSpliceIn,
|
||||
PlayerId playerId) {
|
||||
// Media segment.
|
||||
HlsMediaPlaylist.SegmentBase mediaSegment = segmentBaseHolder.segmentBase;
|
||||
DataSpec dataSpec =
|
||||
|
|
@ -184,7 +186,8 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
|||
previousExtractor,
|
||||
id3Decoder,
|
||||
scratchId3Data,
|
||||
shouldSpliceIn);
|
||||
shouldSpliceIn,
|
||||
playerId);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -256,6 +259,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
|||
private final ParsableByteArray scratchId3Data;
|
||||
private final boolean mediaSegmentEncrypted;
|
||||
private final boolean initSegmentEncrypted;
|
||||
private final PlayerId playerId;
|
||||
|
||||
private @MonotonicNonNull HlsMediaChunkExtractor extractor;
|
||||
private @MonotonicNonNull HlsSampleStreamWrapper output;
|
||||
|
|
@ -295,7 +299,8 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
|||
@Nullable HlsMediaChunkExtractor previousExtractor,
|
||||
Id3Decoder id3Decoder,
|
||||
ParsableByteArray scratchId3Data,
|
||||
boolean shouldSpliceIn) {
|
||||
boolean shouldSpliceIn,
|
||||
PlayerId playerId) {
|
||||
super(
|
||||
mediaDataSource,
|
||||
dataSpec,
|
||||
|
|
@ -324,6 +329,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
|||
this.id3Decoder = id3Decoder;
|
||||
this.scratchId3Data = scratchId3Data;
|
||||
this.shouldSpliceIn = shouldSpliceIn;
|
||||
this.playerId = playerId;
|
||||
sampleQueueFirstSampleIndices = ImmutableList.of();
|
||||
uid = uidSource.getAndIncrement();
|
||||
}
|
||||
|
|
@ -497,7 +503,8 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
|||
muxedCaptionFormats,
|
||||
timestampAdjuster,
|
||||
dataSource.getResponseHeaders(),
|
||||
extractorInput);
|
||||
extractorInput,
|
||||
playerId);
|
||||
if (extractor.isPackedAudioExtractor()) {
|
||||
output.setSampleOffsetUs(
|
||||
id3Timestamp != C.TIME_UNSET
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import androidx.annotation.Nullable;
|
|||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.SeekParameters;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.drm.DrmInitData;
|
||||
import com.google.android.exoplayer2.drm.DrmSession;
|
||||
import com.google.android.exoplayer2.drm.DrmSessionEventListener;
|
||||
|
|
@ -80,6 +81,7 @@ public final class HlsMediaPeriod
|
|||
private final boolean allowChunklessPreparation;
|
||||
private final @HlsMediaSource.MetadataType int metadataType;
|
||||
private final boolean useSessionKeys;
|
||||
private final PlayerId playerId;
|
||||
|
||||
@Nullable private Callback callback;
|
||||
private int pendingPrepareCount;
|
||||
|
|
@ -123,7 +125,8 @@ public final class HlsMediaPeriod
|
|||
CompositeSequenceableLoaderFactory compositeSequenceableLoaderFactory,
|
||||
boolean allowChunklessPreparation,
|
||||
@HlsMediaSource.MetadataType int metadataType,
|
||||
boolean useSessionKeys) {
|
||||
boolean useSessionKeys,
|
||||
PlayerId playerId) {
|
||||
this.extractorFactory = extractorFactory;
|
||||
this.playlistTracker = playlistTracker;
|
||||
this.dataSourceFactory = dataSourceFactory;
|
||||
|
|
@ -137,6 +140,7 @@ public final class HlsMediaPeriod
|
|||
this.allowChunklessPreparation = allowChunklessPreparation;
|
||||
this.metadataType = metadataType;
|
||||
this.useSessionKeys = useSessionKeys;
|
||||
this.playerId = playerId;
|
||||
compositeSequenceableLoader =
|
||||
compositeSequenceableLoaderFactory.createCompositeSequenceableLoader();
|
||||
streamWrapperIndices = new IdentityHashMap<>();
|
||||
|
|
@ -771,7 +775,8 @@ public final class HlsMediaPeriod
|
|||
dataSourceFactory,
|
||||
mediaTransferListener,
|
||||
timestampAdjusterProvider,
|
||||
muxedCaptionFormats);
|
||||
muxedCaptionFormats,
|
||||
playerId);
|
||||
return new HlsSampleStreamWrapper(
|
||||
trackType,
|
||||
/* callback= */ this,
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
|
|||
import static java.lang.annotation.RetentionPolicy.SOURCE;
|
||||
|
||||
import android.net.Uri;
|
||||
import android.os.Looper;
|
||||
import android.os.SystemClock;
|
||||
import androidx.annotation.IntDef;
|
||||
import androidx.annotation.Nullable;
|
||||
|
|
@ -466,6 +467,8 @@ public final class HlsMediaSource extends BaseMediaSource
|
|||
protected void prepareSourceInternal(@Nullable TransferListener mediaTransferListener) {
|
||||
this.mediaTransferListener = mediaTransferListener;
|
||||
drmSessionManager.prepare();
|
||||
drmSessionManager.setPlayer(
|
||||
/* playbackLooper= */ checkNotNull(Looper.myLooper()), getPlayerId());
|
||||
MediaSourceEventListener.EventDispatcher eventDispatcher =
|
||||
createEventDispatcher(/* mediaPeriodId= */ null);
|
||||
playlistTracker.start(
|
||||
|
|
@ -494,7 +497,8 @@ public final class HlsMediaSource extends BaseMediaSource
|
|||
compositeSequenceableLoaderFactory,
|
||||
allowChunklessPreparation,
|
||||
metadataType,
|
||||
useSessionKeys);
|
||||
useSessionKeys,
|
||||
getPlayerId());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -23,7 +23,6 @@ import static java.lang.Math.min;
|
|||
|
||||
import android.net.Uri;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.util.SparseIntArray;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.google.android.exoplayer2.C;
|
||||
|
|
@ -1100,12 +1099,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
|||
|
||||
boolean isAudioVideo = type == C.TRACK_TYPE_AUDIO || type == C.TRACK_TYPE_VIDEO;
|
||||
HlsSampleQueue sampleQueue =
|
||||
new HlsSampleQueue(
|
||||
allocator,
|
||||
/* playbackLooper= */ handler.getLooper(),
|
||||
drmSessionManager,
|
||||
drmEventDispatcher,
|
||||
overridingDrmInitData);
|
||||
new HlsSampleQueue(allocator, drmSessionManager, drmEventDispatcher, overridingDrmInitData);
|
||||
sampleQueue.setStartTimeUs(lastSeekPositionUs);
|
||||
if (isAudioVideo) {
|
||||
sampleQueue.setDrmInitData(drmInitData);
|
||||
|
|
@ -1392,23 +1386,31 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
|||
Format sampleFormat = Assertions.checkStateNotNull(sampleQueues[i].getUpstreamFormat());
|
||||
if (i == primaryExtractorTrackIndex) {
|
||||
Format[] formats = new Format[chunkSourceTrackCount];
|
||||
if (chunkSourceTrackCount == 1) {
|
||||
formats[0] = sampleFormat.withManifestFormatInfo(chunkSourceTrackGroup.getFormat(0));
|
||||
} else {
|
||||
for (int j = 0; j < chunkSourceTrackCount; j++) {
|
||||
formats[j] = deriveFormat(chunkSourceTrackGroup.getFormat(j), sampleFormat, true);
|
||||
for (int j = 0; j < chunkSourceTrackCount; j++) {
|
||||
Format playlistFormat = chunkSourceTrackGroup.getFormat(j);
|
||||
if (primaryExtractorTrackType == C.TRACK_TYPE_AUDIO && muxedAudioFormat != null) {
|
||||
playlistFormat = playlistFormat.withManifestFormatInfo(muxedAudioFormat);
|
||||
}
|
||||
// If there's only a single variant (chunkSourceTrackCount == 1) then we can safely
|
||||
// retain all fields from sampleFormat. Else we need to use deriveFormat to retain only
|
||||
// the fields that will be the same for all variants.
|
||||
formats[j] =
|
||||
chunkSourceTrackCount == 1
|
||||
? sampleFormat.withManifestFormatInfo(playlistFormat)
|
||||
: deriveFormat(playlistFormat, sampleFormat, /* propagateBitrates= */ true);
|
||||
}
|
||||
trackGroups[i] = new TrackGroup(formats);
|
||||
primaryTrackGroupIndex = i;
|
||||
} else {
|
||||
@Nullable
|
||||
Format trackFormat =
|
||||
Format playlistFormat =
|
||||
primaryExtractorTrackType == C.TRACK_TYPE_VIDEO
|
||||
&& MimeTypes.isAudio(sampleFormat.sampleMimeType)
|
||||
? muxedAudioFormat
|
||||
: null;
|
||||
trackGroups[i] = new TrackGroup(deriveFormat(trackFormat, sampleFormat, false));
|
||||
trackGroups[i] =
|
||||
new TrackGroup(
|
||||
deriveFormat(playlistFormat, sampleFormat, /* propagateBitrates= */ false));
|
||||
}
|
||||
}
|
||||
this.trackGroups = createTrackGroupArrayWithDrmInfo(trackGroups);
|
||||
|
|
@ -1496,8 +1498,12 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
|||
* sample format that may have been obtained from a chunk belonging to a different track in the
|
||||
* same track group.
|
||||
*
|
||||
* <p>Note: Since the sample format may have been obtained from a chunk belonging to a different
|
||||
* track, it should not be used as a source for data that may vary between tracks.
|
||||
*
|
||||
* @param playlistFormat The format information obtained from the master playlist.
|
||||
* @param sampleFormat The format information obtained from the samples.
|
||||
* @param sampleFormat The format information obtained from samples within a chunk. The chunk may
|
||||
* belong to a different track in the same track group.
|
||||
* @param propagateBitrates Whether the bitrates from the playlist format should be included in
|
||||
* the derived format.
|
||||
* @return The derived track format.
|
||||
|
|
@ -1627,11 +1633,10 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
|||
|
||||
private HlsSampleQueue(
|
||||
Allocator allocator,
|
||||
Looper playbackLooper,
|
||||
DrmSessionManager drmSessionManager,
|
||||
DrmSessionEventListener.EventDispatcher eventDispatcher,
|
||||
Map<String, DrmInitData> overridingDrmInitData) {
|
||||
super(allocator, playbackLooper, drmSessionManager, eventDispatcher);
|
||||
super(allocator, drmSessionManager, eventDispatcher);
|
||||
this.overridingDrmInitData = overridingDrmInitData;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ import android.text.TextUtils;
|
|||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.RequiresApi;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.extractor.ExtractorInput;
|
||||
import com.google.android.exoplayer2.extractor.ExtractorOutput;
|
||||
import com.google.android.exoplayer2.source.mediaparser.InputReaderAdapterV30;
|
||||
|
|
@ -42,6 +43,7 @@ import com.google.android.exoplayer2.source.mediaparser.OutputConsumerAdapterV30
|
|||
import com.google.android.exoplayer2.util.Assertions;
|
||||
import com.google.android.exoplayer2.util.FileTypes;
|
||||
import com.google.android.exoplayer2.util.MimeTypes;
|
||||
import com.google.android.exoplayer2.util.Util;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import java.io.IOException;
|
||||
|
||||
|
|
@ -60,7 +62,8 @@ public final class MediaParserHlsMediaChunkExtractor implements HlsMediaChunkExt
|
|||
muxedCaptionFormats,
|
||||
timestampAdjuster,
|
||||
responseHeaders,
|
||||
sniffingExtractorInput) -> {
|
||||
sniffingExtractorInput,
|
||||
playerId) -> {
|
||||
if (FileTypes.inferFileTypeFromMimeType(format.sampleMimeType) == FileTypes.WEBVTT) {
|
||||
// The segment contains WebVTT. MediaParser does not support WebVTT parsing, so we use the
|
||||
// bundled extractor.
|
||||
|
|
@ -100,6 +103,7 @@ public final class MediaParserHlsMediaChunkExtractor implements HlsMediaChunkExt
|
|||
format,
|
||||
overrideInBandCaptionDeclarations,
|
||||
muxedCaptionMediaFormats,
|
||||
playerId,
|
||||
MediaParser.PARSER_NAME_FMP4,
|
||||
MediaParser.PARSER_NAME_AC3,
|
||||
MediaParser.PARSER_NAME_AC4,
|
||||
|
|
@ -119,7 +123,8 @@ public final class MediaParserHlsMediaChunkExtractor implements HlsMediaChunkExt
|
|||
format,
|
||||
overrideInBandCaptionDeclarations,
|
||||
muxedCaptionMediaFormats,
|
||||
/* leadingBytesToSkip= */ peekingInputReader.totalPeekedBytes);
|
||||
/* leadingBytesToSkip= */ peekingInputReader.totalPeekedBytes,
|
||||
playerId);
|
||||
};
|
||||
|
||||
private final OutputConsumerAdapterV30 outputConsumerAdapter;
|
||||
|
|
@ -128,6 +133,8 @@ public final class MediaParserHlsMediaChunkExtractor implements HlsMediaChunkExt
|
|||
private final Format format;
|
||||
private final boolean overrideInBandCaptionDeclarations;
|
||||
private final ImmutableList<MediaFormat> muxedCaptionMediaFormats;
|
||||
private final PlayerId playerId;
|
||||
|
||||
private int pendingSkipBytes;
|
||||
|
||||
/**
|
||||
|
|
@ -146,6 +153,7 @@ public final class MediaParserHlsMediaChunkExtractor implements HlsMediaChunkExt
|
|||
* that {@link MediaParser} should expose.
|
||||
* @param leadingBytesToSkip The number of bytes to skip from the start of the input before
|
||||
* starting extraction.
|
||||
* @param playerId The {@link PlayerId} of the player using this chunk extractor.
|
||||
*/
|
||||
public MediaParserHlsMediaChunkExtractor(
|
||||
MediaParser mediaParser,
|
||||
|
|
@ -153,12 +161,14 @@ public final class MediaParserHlsMediaChunkExtractor implements HlsMediaChunkExt
|
|||
Format format,
|
||||
boolean overrideInBandCaptionDeclarations,
|
||||
ImmutableList<MediaFormat> muxedCaptionMediaFormats,
|
||||
int leadingBytesToSkip) {
|
||||
int leadingBytesToSkip,
|
||||
PlayerId playerId) {
|
||||
this.mediaParser = mediaParser;
|
||||
this.outputConsumerAdapter = outputConsumerAdapter;
|
||||
this.overrideInBandCaptionDeclarations = overrideInBandCaptionDeclarations;
|
||||
this.muxedCaptionMediaFormats = muxedCaptionMediaFormats;
|
||||
this.format = format;
|
||||
this.playerId = playerId;
|
||||
pendingSkipBytes = leadingBytesToSkip;
|
||||
inputReaderAdapter = new InputReaderAdapterV30();
|
||||
}
|
||||
|
|
@ -203,12 +213,14 @@ public final class MediaParserHlsMediaChunkExtractor implements HlsMediaChunkExt
|
|||
format,
|
||||
overrideInBandCaptionDeclarations,
|
||||
muxedCaptionMediaFormats,
|
||||
playerId,
|
||||
mediaParser.getParserName()),
|
||||
outputConsumerAdapter,
|
||||
format,
|
||||
overrideInBandCaptionDeclarations,
|
||||
muxedCaptionMediaFormats,
|
||||
/* leadingBytesToSkip= */ 0);
|
||||
/* leadingBytesToSkip= */ 0,
|
||||
playerId);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -223,6 +235,7 @@ public final class MediaParserHlsMediaChunkExtractor implements HlsMediaChunkExt
|
|||
Format format,
|
||||
boolean overrideInBandCaptionDeclarations,
|
||||
ImmutableList<MediaFormat> muxedCaptionMediaFormats,
|
||||
PlayerId playerId,
|
||||
String... parserNames) {
|
||||
MediaParser mediaParser =
|
||||
parserNames.length == 1
|
||||
|
|
@ -248,6 +261,9 @@ public final class MediaParserHlsMediaChunkExtractor implements HlsMediaChunkExt
|
|||
mediaParser.setParameter(PARAMETER_TS_IGNORE_AVC_STREAM, true);
|
||||
}
|
||||
}
|
||||
if (Util.SDK_INT >= 31) {
|
||||
MediaParserUtil.setLogSessionIdOnMediaParser(mediaParser, playerId);
|
||||
}
|
||||
return mediaParser;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import android.net.Uri;
|
|||
import androidx.test.core.app.ApplicationProvider;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory;
|
||||
import com.google.android.exoplayer2.extractor.ExtractorInput;
|
||||
import com.google.android.exoplayer2.extractor.mp3.Mp3Extractor;
|
||||
|
|
@ -79,7 +80,8 @@ public class DefaultHlsExtractorFactoryTest {
|
|||
/* muxedCaptionFormats= */ null,
|
||||
timestampAdjuster,
|
||||
ac3ResponseHeaders,
|
||||
webVttExtractorInput);
|
||||
webVttExtractorInput,
|
||||
PlayerId.UNSET);
|
||||
|
||||
assertThat(result.extractor.getClass()).isEqualTo(WebvttExtractor.class);
|
||||
}
|
||||
|
|
@ -103,7 +105,8 @@ public class DefaultHlsExtractorFactoryTest {
|
|||
/* muxedCaptionFormats= */ null,
|
||||
timestampAdjuster,
|
||||
ac3ResponseHeaders,
|
||||
ac3ExtractorInput);
|
||||
ac3ExtractorInput,
|
||||
PlayerId.UNSET);
|
||||
|
||||
assertThat(result.extractor.getClass()).isEqualTo(Ac3Extractor.class);
|
||||
}
|
||||
|
|
@ -125,7 +128,8 @@ public class DefaultHlsExtractorFactoryTest {
|
|||
/* muxedCaptionFormats= */ null,
|
||||
timestampAdjuster,
|
||||
ac3ResponseHeaders,
|
||||
tsExtractorInput);
|
||||
tsExtractorInput,
|
||||
PlayerId.UNSET);
|
||||
|
||||
assertThat(result.extractor.getClass()).isEqualTo(TsExtractor.class);
|
||||
}
|
||||
|
|
@ -148,7 +152,8 @@ public class DefaultHlsExtractorFactoryTest {
|
|||
/* muxedCaptionFormats= */ null,
|
||||
timestampAdjuster,
|
||||
ac3ResponseHeaders,
|
||||
mp3ExtractorInput);
|
||||
mp3ExtractorInput,
|
||||
PlayerId.UNSET);
|
||||
|
||||
assertThat(result.extractor.getClass()).isEqualTo(Mp3Extractor.class);
|
||||
}
|
||||
|
|
@ -170,7 +175,8 @@ public class DefaultHlsExtractorFactoryTest {
|
|||
/* muxedCaptionFormats= */ null,
|
||||
timestampAdjuster,
|
||||
ImmutableMap.of("Content-Type", ImmutableList.of(MimeTypes.IMAGE_JPEG)),
|
||||
tsExtractorInput);
|
||||
tsExtractorInput,
|
||||
PlayerId.UNSET);
|
||||
|
||||
assertThat(result.extractor.getClass()).isEqualTo(TsExtractor.class);
|
||||
}
|
||||
|
|
@ -187,7 +193,8 @@ public class DefaultHlsExtractorFactoryTest {
|
|||
/* muxedCaptionFormats= */ null,
|
||||
timestampAdjuster,
|
||||
ac3ResponseHeaders,
|
||||
emptyExtractorInput);
|
||||
emptyExtractorInput,
|
||||
PlayerId.UNSET);
|
||||
|
||||
// The format indicates WebVTT so we expect a WebVTT extractor.
|
||||
assertThat(result.extractor.getClass()).isEqualTo(WebvttExtractor.class);
|
||||
|
|
@ -205,7 +212,8 @@ public class DefaultHlsExtractorFactoryTest {
|
|||
/* muxedCaptionFormats= */ null,
|
||||
timestampAdjuster,
|
||||
ac3ResponseHeaders,
|
||||
emptyExtractorInput);
|
||||
emptyExtractorInput,
|
||||
PlayerId.UNSET);
|
||||
|
||||
// No format info, so we expect an AC-3 Extractor, as per HTTP Content-Type header.
|
||||
assertThat(result.extractor.getClass()).isEqualTo(Ac3Extractor.class);
|
||||
|
|
@ -223,7 +231,8 @@ public class DefaultHlsExtractorFactoryTest {
|
|||
/* muxedCaptionFormats= */ null,
|
||||
timestampAdjuster,
|
||||
/* responseHeaders= */ ImmutableMap.of(),
|
||||
emptyExtractorInput);
|
||||
emptyExtractorInput,
|
||||
PlayerId.UNSET);
|
||||
|
||||
// No format info, and no HTTP headers, so we expect an fMP4 extractor, as per file extension.
|
||||
assertThat(result.extractor.getClass()).isEqualTo(FragmentedMp4Extractor.class);
|
||||
|
|
@ -241,7 +250,8 @@ public class DefaultHlsExtractorFactoryTest {
|
|||
/* muxedCaptionFormats= */ null,
|
||||
timestampAdjuster,
|
||||
/* responseHeaders= */ ImmutableMap.of(),
|
||||
emptyExtractorInput);
|
||||
emptyExtractorInput,
|
||||
PlayerId.UNSET);
|
||||
|
||||
// There's no information for inferring the file type, we expect the factory to fall back on
|
||||
// Transport Stream.
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import static org.mockito.Mockito.when;
|
|||
import android.net.Uri;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.drm.DrmSessionEventListener;
|
||||
import com.google.android.exoplayer2.drm.DrmSessionManager;
|
||||
import com.google.android.exoplayer2.source.CompositeSequenceableLoaderFactory;
|
||||
|
|
@ -92,7 +93,8 @@ public final class HlsMediaPeriodTest {
|
|||
mock(CompositeSequenceableLoaderFactory.class),
|
||||
/* allowChunklessPreparation= */ true,
|
||||
HlsMediaSource.METADATA_TYPE_ID3,
|
||||
/* useSessionKeys= */ false);
|
||||
/* useSessionKeys= */ false,
|
||||
PlayerId.UNSET);
|
||||
};
|
||||
|
||||
MediaPeriodAsserts.assertGetStreamKeysAndManifestFilterIntegration(
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import androidx.annotation.Nullable;
|
|||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.util.ParsableByteArray;
|
||||
import com.google.android.exoplayer2.util.Util;
|
||||
import com.google.common.math.IntMath;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
/**
|
||||
|
|
@ -132,6 +133,16 @@ public final class RtpPacket {
|
|||
public static final int MAX_SEQUENCE_NUMBER = 0xFFFF;
|
||||
public static final int CSRC_SIZE = 4;
|
||||
|
||||
/** Returns the next sequence number of the {@code sequenceNumber}. */
|
||||
public static int getNextSequenceNumber(int sequenceNumber) {
|
||||
return IntMath.mod(sequenceNumber + 1, MAX_SEQUENCE_NUMBER + 1);
|
||||
}
|
||||
|
||||
/** Returns the previous sequence number from the {@code sequenceNumber}. */
|
||||
public static int getPreviousSequenceNumber(int sequenceNumber) {
|
||||
return IntMath.mod(sequenceNumber - 1, MAX_SEQUENCE_NUMBER + 1);
|
||||
}
|
||||
|
||||
private static final byte[] EMPTY = new byte[0];
|
||||
|
||||
/** The RTP version field (Word 0, bits 0-1), should always be 2. */
|
||||
|
|
|
|||
|
|
@ -34,8 +34,6 @@ import java.util.TreeSet;
|
|||
/** The maximum sequence number discontinuity allowed without resetting the re-ordering buffer. */
|
||||
@VisibleForTesting /* package */ static final int MAX_SEQUENCE_LEAP_ALLOWED = 1000;
|
||||
|
||||
private static final int MAX_SEQUENCE_NUMBER = RtpPacket.MAX_SEQUENCE_NUMBER;
|
||||
|
||||
/** Queue size threshold for resetting the queue. 5000 packets equate about 7MB in buffer size. */
|
||||
private static final int QUEUE_SIZE_THRESHOLD_FOR_RESET = 5000;
|
||||
|
||||
|
|
@ -96,13 +94,13 @@ import java.util.TreeSet;
|
|||
int packetSequenceNumber = packet.sequenceNumber;
|
||||
if (!started) {
|
||||
reset();
|
||||
lastDequeuedSequenceNumber = prevSequenceNumber(packetSequenceNumber);
|
||||
lastDequeuedSequenceNumber = RtpPacket.getPreviousSequenceNumber(packetSequenceNumber);
|
||||
started = true;
|
||||
addToQueue(new RtpPacketContainer(packet, receivedTimestampMs));
|
||||
return true;
|
||||
}
|
||||
|
||||
int expectedSequenceNumber = nextSequenceNumber(lastReceivedSequenceNumber);
|
||||
int expectedSequenceNumber = RtpPacket.getNextSequenceNumber(lastReceivedSequenceNumber);
|
||||
// A positive shift means the packet succeeds the last received packet.
|
||||
int sequenceNumberShift =
|
||||
calculateSequenceNumberShift(packetSequenceNumber, expectedSequenceNumber);
|
||||
|
|
@ -114,7 +112,7 @@ import java.util.TreeSet;
|
|||
}
|
||||
} else {
|
||||
// Discard all previous received packets and start subsequent receiving from here.
|
||||
lastDequeuedSequenceNumber = prevSequenceNumber(packetSequenceNumber);
|
||||
lastDequeuedSequenceNumber = RtpPacket.getPreviousSequenceNumber(packetSequenceNumber);
|
||||
packetQueue.clear();
|
||||
addToQueue(new RtpPacketContainer(packet, receivedTimestampMs));
|
||||
return true;
|
||||
|
|
@ -140,7 +138,7 @@ import java.util.TreeSet;
|
|||
RtpPacketContainer packetContainer = packetQueue.first();
|
||||
int packetSequenceNumber = packetContainer.packet.sequenceNumber;
|
||||
|
||||
if (packetSequenceNumber == nextSequenceNumber(lastDequeuedSequenceNumber)
|
||||
if (packetSequenceNumber == RtpPacket.getNextSequenceNumber(lastDequeuedSequenceNumber)
|
||||
|| cutoffTimestampMs >= packetContainer.receivedTimestampMs) {
|
||||
packetQueue.pollFirst();
|
||||
lastDequeuedSequenceNumber = packetSequenceNumber;
|
||||
|
|
@ -168,16 +166,6 @@ import java.util.TreeSet;
|
|||
}
|
||||
}
|
||||
|
||||
private static int nextSequenceNumber(int sequenceNumber) {
|
||||
return (sequenceNumber + 1) % MAX_SEQUENCE_NUMBER;
|
||||
}
|
||||
|
||||
private static int prevSequenceNumber(int sequenceNumber) {
|
||||
return sequenceNumber == 0
|
||||
? MAX_SEQUENCE_NUMBER - 1
|
||||
: (sequenceNumber - 1) % MAX_SEQUENCE_NUMBER;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the sequence number shift, accounting for wrapping around.
|
||||
*
|
||||
|
|
@ -193,7 +181,7 @@ import java.util.TreeSet;
|
|||
int shift =
|
||||
min(sequenceNumber, previousSequenceNumber)
|
||||
- max(sequenceNumber, previousSequenceNumber)
|
||||
+ MAX_SEQUENCE_NUMBER;
|
||||
+ RtpPacket.MAX_SEQUENCE_NUMBER;
|
||||
// Check whether this is actually an wrap-over. For example, it is a wrap around if receiving
|
||||
// 65500 (prevSequenceNumber) after 1 (sequenceNumber); but it is not when prevSequenceNumber
|
||||
// is 30000.
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue