Add maxVideoBitrate to DefaultTrackSelector.Parameters
------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=149097876
This commit is contained in:
parent
8e9711e8aa
commit
e7462f05f5
@ -54,6 +54,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
public final boolean allowNonSeamlessAdaptiveness;
|
public final boolean allowNonSeamlessAdaptiveness;
|
||||||
public final int maxVideoWidth;
|
public final int maxVideoWidth;
|
||||||
public final int maxVideoHeight;
|
public final int maxVideoHeight;
|
||||||
|
public final int maxVideoBitrate;
|
||||||
public final boolean exceedVideoConstraintsIfNecessary;
|
public final boolean exceedVideoConstraintsIfNecessary;
|
||||||
public final boolean exceedRendererCapabilitiesIfNecessary;
|
public final boolean exceedRendererCapabilitiesIfNecessary;
|
||||||
public final int viewportWidth;
|
public final int viewportWidth;
|
||||||
@ -68,14 +69,15 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
* <li>Adaptation between different mime types is not allowed.</li>
|
* <li>Adaptation between different mime types is not allowed.</li>
|
||||||
* <li>Non seamless adaptation is allowed.</li>
|
* <li>Non seamless adaptation is allowed.</li>
|
||||||
* <li>No max limit for video width/height.</li>
|
* <li>No max limit for video width/height.</li>
|
||||||
|
* <li>No max video bitrate.</li>
|
||||||
* <li>Video constraints are exceeded if no supported selection can be made otherwise.</li>
|
* <li>Video constraints are exceeded if no supported selection can be made otherwise.</li>
|
||||||
* <li>Renderer capabilities are exceeded if no supported selection can be made.</li>
|
* <li>Renderer capabilities are exceeded if no supported selection can be made.</li>
|
||||||
* <li>No viewport width/height constraints are set.</li>
|
* <li>No viewport width/height constraints are set.</li>
|
||||||
* </ul>
|
* </ul>
|
||||||
*/
|
*/
|
||||||
public Parameters() {
|
public Parameters() {
|
||||||
this(null, null, false, true, Integer.MAX_VALUE, Integer.MAX_VALUE, true, true,
|
this(null, null, false, true, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, true,
|
||||||
Integer.MAX_VALUE, Integer.MAX_VALUE, true);
|
true, Integer.MAX_VALUE, Integer.MAX_VALUE, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -88,6 +90,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
* @param allowNonSeamlessAdaptiveness Whether non-seamless adaptation is allowed.
|
* @param allowNonSeamlessAdaptiveness Whether non-seamless adaptation is allowed.
|
||||||
* @param maxVideoWidth Maximum allowed video width.
|
* @param maxVideoWidth Maximum allowed video width.
|
||||||
* @param maxVideoHeight Maximum allowed video height.
|
* @param maxVideoHeight Maximum allowed video height.
|
||||||
|
* @param maxVideoBitrate Maximum allowed video bitrate.
|
||||||
* @param exceedVideoConstraintsIfNecessary Whether to exceed video constraints when no
|
* @param exceedVideoConstraintsIfNecessary Whether to exceed video constraints when no
|
||||||
* selection can be made otherwise.
|
* selection can be made otherwise.
|
||||||
* @param exceedRendererCapabilitiesIfNecessary Whether to exceed renderer capabilities when no
|
* @param exceedRendererCapabilitiesIfNecessary Whether to exceed renderer capabilities when no
|
||||||
@ -98,15 +101,16 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
*/
|
*/
|
||||||
public Parameters(String preferredAudioLanguage, String preferredTextLanguage,
|
public Parameters(String preferredAudioLanguage, String preferredTextLanguage,
|
||||||
boolean allowMixedMimeAdaptiveness, boolean allowNonSeamlessAdaptiveness,
|
boolean allowMixedMimeAdaptiveness, boolean allowNonSeamlessAdaptiveness,
|
||||||
int maxVideoWidth, int maxVideoHeight, boolean exceedVideoConstraintsIfNecessary,
|
int maxVideoWidth, int maxVideoHeight, int maxVideoBitrate,
|
||||||
boolean exceedRendererCapabilitiesIfNecessary, int viewportWidth, int viewportHeight,
|
boolean exceedVideoConstraintsIfNecessary, boolean exceedRendererCapabilitiesIfNecessary,
|
||||||
boolean orientationMayChange) {
|
int viewportWidth, int viewportHeight, boolean orientationMayChange) {
|
||||||
this.preferredAudioLanguage = preferredAudioLanguage;
|
this.preferredAudioLanguage = preferredAudioLanguage;
|
||||||
this.preferredTextLanguage = preferredTextLanguage;
|
this.preferredTextLanguage = preferredTextLanguage;
|
||||||
this.allowMixedMimeAdaptiveness = allowMixedMimeAdaptiveness;
|
this.allowMixedMimeAdaptiveness = allowMixedMimeAdaptiveness;
|
||||||
this.allowNonSeamlessAdaptiveness = allowNonSeamlessAdaptiveness;
|
this.allowNonSeamlessAdaptiveness = allowNonSeamlessAdaptiveness;
|
||||||
this.maxVideoWidth = maxVideoWidth;
|
this.maxVideoWidth = maxVideoWidth;
|
||||||
this.maxVideoHeight = maxVideoHeight;
|
this.maxVideoHeight = maxVideoHeight;
|
||||||
|
this.maxVideoBitrate = maxVideoBitrate;
|
||||||
this.exceedVideoConstraintsIfNecessary = exceedVideoConstraintsIfNecessary;
|
this.exceedVideoConstraintsIfNecessary = exceedVideoConstraintsIfNecessary;
|
||||||
this.exceedRendererCapabilitiesIfNecessary = exceedRendererCapabilitiesIfNecessary;
|
this.exceedRendererCapabilitiesIfNecessary = exceedRendererCapabilitiesIfNecessary;
|
||||||
this.viewportWidth = viewportWidth;
|
this.viewportWidth = viewportWidth;
|
||||||
@ -130,8 +134,8 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
}
|
}
|
||||||
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
|
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
|
||||||
allowMixedMimeAdaptiveness, allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight,
|
allowMixedMimeAdaptiveness, allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight,
|
||||||
exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary, viewportWidth,
|
maxVideoBitrate, exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary,
|
||||||
viewportHeight, orientationMayChange);
|
viewportWidth, viewportHeight, orientationMayChange);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -148,8 +152,8 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
}
|
}
|
||||||
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
|
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
|
||||||
allowMixedMimeAdaptiveness, allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight,
|
allowMixedMimeAdaptiveness, allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight,
|
||||||
exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary, viewportWidth,
|
maxVideoBitrate, exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary,
|
||||||
viewportHeight, orientationMayChange);
|
viewportWidth, viewportHeight, orientationMayChange);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -164,8 +168,8 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
}
|
}
|
||||||
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
|
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
|
||||||
allowMixedMimeAdaptiveness, allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight,
|
allowMixedMimeAdaptiveness, allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight,
|
||||||
exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary, viewportWidth,
|
maxVideoBitrate, exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary,
|
||||||
viewportHeight, orientationMayChange);
|
viewportWidth, viewportHeight, orientationMayChange);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -180,8 +184,8 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
}
|
}
|
||||||
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
|
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
|
||||||
allowMixedMimeAdaptiveness, allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight,
|
allowMixedMimeAdaptiveness, allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight,
|
||||||
exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary, viewportWidth,
|
maxVideoBitrate, exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary,
|
||||||
viewportHeight, orientationMayChange);
|
viewportWidth, viewportHeight, orientationMayChange);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -197,8 +201,24 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
}
|
}
|
||||||
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
|
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
|
||||||
allowMixedMimeAdaptiveness, allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight,
|
allowMixedMimeAdaptiveness, allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight,
|
||||||
exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary, viewportWidth,
|
maxVideoBitrate, exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary,
|
||||||
viewportHeight, orientationMayChange);
|
viewportWidth, viewportHeight, orientationMayChange);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a {@link Parameters} instance with the provided max video bitrate.
|
||||||
|
*
|
||||||
|
* @param maxVideoBitrate The max video bitrate.
|
||||||
|
* @return A {@link Parameters} instance with the provided max video bitrate.
|
||||||
|
*/
|
||||||
|
public Parameters withMaxVideoBitrate(int maxVideoBitrate) {
|
||||||
|
if (maxVideoBitrate == this.maxVideoBitrate) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
|
||||||
|
allowMixedMimeAdaptiveness, allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight,
|
||||||
|
maxVideoBitrate, exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary,
|
||||||
|
viewportWidth, viewportHeight, orientationMayChange);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -235,8 +255,8 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
}
|
}
|
||||||
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
|
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
|
||||||
allowMixedMimeAdaptiveness, allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight,
|
allowMixedMimeAdaptiveness, allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight,
|
||||||
exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary, viewportWidth,
|
maxVideoBitrate, exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary,
|
||||||
viewportHeight, orientationMayChange);
|
viewportWidth, viewportHeight, orientationMayChange);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -255,8 +275,8 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
}
|
}
|
||||||
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
|
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
|
||||||
allowMixedMimeAdaptiveness, allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight,
|
allowMixedMimeAdaptiveness, allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight,
|
||||||
exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary, viewportWidth,
|
maxVideoBitrate, exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary,
|
||||||
viewportHeight, orientationMayChange);
|
viewportWidth, viewportHeight, orientationMayChange);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -275,8 +295,8 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
}
|
}
|
||||||
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
|
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
|
||||||
allowMixedMimeAdaptiveness, allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight,
|
allowMixedMimeAdaptiveness, allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight,
|
||||||
exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary, viewportWidth,
|
maxVideoBitrate, exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary,
|
||||||
viewportHeight, orientationMayChange);
|
viewportWidth, viewportHeight, orientationMayChange);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -319,6 +339,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
&& exceedRendererCapabilitiesIfNecessary == other.exceedRendererCapabilitiesIfNecessary
|
&& exceedRendererCapabilitiesIfNecessary == other.exceedRendererCapabilitiesIfNecessary
|
||||||
&& orientationMayChange == other.orientationMayChange
|
&& orientationMayChange == other.orientationMayChange
|
||||||
&& viewportWidth == other.viewportWidth && viewportHeight == other.viewportHeight
|
&& viewportWidth == other.viewportWidth && viewportHeight == other.viewportHeight
|
||||||
|
&& maxVideoBitrate == other.maxVideoBitrate
|
||||||
&& TextUtils.equals(preferredAudioLanguage, other.preferredAudioLanguage)
|
&& TextUtils.equals(preferredAudioLanguage, other.preferredAudioLanguage)
|
||||||
&& TextUtils.equals(preferredTextLanguage, other.preferredTextLanguage);
|
&& TextUtils.equals(preferredTextLanguage, other.preferredTextLanguage);
|
||||||
}
|
}
|
||||||
@ -331,6 +352,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
result = 31 * result + (allowNonSeamlessAdaptiveness ? 1 : 0);
|
result = 31 * result + (allowNonSeamlessAdaptiveness ? 1 : 0);
|
||||||
result = 31 * result + maxVideoWidth;
|
result = 31 * result + maxVideoWidth;
|
||||||
result = 31 * result + maxVideoHeight;
|
result = 31 * result + maxVideoHeight;
|
||||||
|
result = 31 * result + maxVideoBitrate;
|
||||||
result = 31 * result + (exceedVideoConstraintsIfNecessary ? 1 : 0);
|
result = 31 * result + (exceedVideoConstraintsIfNecessary ? 1 : 0);
|
||||||
result = 31 * result + (exceedRendererCapabilitiesIfNecessary ? 1 : 0);
|
result = 31 * result + (exceedRendererCapabilitiesIfNecessary ? 1 : 0);
|
||||||
result = 31 * result + (orientationMayChange ? 1 : 0);
|
result = 31 * result + (orientationMayChange ? 1 : 0);
|
||||||
@ -406,7 +428,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
case C.TRACK_TYPE_VIDEO:
|
case C.TRACK_TYPE_VIDEO:
|
||||||
rendererTrackSelections[i] = selectVideoTrack(rendererCapabilities[i],
|
rendererTrackSelections[i] = selectVideoTrack(rendererCapabilities[i],
|
||||||
rendererTrackGroupArrays[i], rendererFormatSupports[i], params.maxVideoWidth,
|
rendererTrackGroupArrays[i], rendererFormatSupports[i], params.maxVideoWidth,
|
||||||
params.maxVideoHeight, params.allowNonSeamlessAdaptiveness,
|
params.maxVideoHeight, params.maxVideoBitrate, params.allowNonSeamlessAdaptiveness,
|
||||||
params.allowMixedMimeAdaptiveness, params.viewportWidth, params.viewportHeight,
|
params.allowMixedMimeAdaptiveness, params.viewportWidth, params.viewportHeight,
|
||||||
params.orientationMayChange, adaptiveVideoTrackSelectionFactory,
|
params.orientationMayChange, adaptiveVideoTrackSelectionFactory,
|
||||||
params.exceedVideoConstraintsIfNecessary,
|
params.exceedVideoConstraintsIfNecessary,
|
||||||
@ -436,30 +458,30 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
|
|
||||||
protected TrackSelection selectVideoTrack(RendererCapabilities rendererCapabilities,
|
protected TrackSelection selectVideoTrack(RendererCapabilities rendererCapabilities,
|
||||||
TrackGroupArray groups, int[][] formatSupport, int maxVideoWidth, int maxVideoHeight,
|
TrackGroupArray groups, int[][] formatSupport, int maxVideoWidth, int maxVideoHeight,
|
||||||
boolean allowNonSeamlessAdaptiveness, boolean allowMixedMimeAdaptiveness, int viewportWidth,
|
int maxVideoBitrate, boolean allowNonSeamlessAdaptiveness, boolean allowMixedMimeAdaptiveness,
|
||||||
int viewportHeight, boolean orientationMayChange,
|
int viewportWidth, int viewportHeight, boolean orientationMayChange,
|
||||||
TrackSelection.Factory adaptiveVideoTrackSelectionFactory,
|
TrackSelection.Factory adaptiveVideoTrackSelectionFactory,
|
||||||
boolean exceedConstraintsIfNecessary, boolean exceedRendererCapabilitiesIfNecessary)
|
boolean exceedConstraintsIfNecessary, boolean exceedRendererCapabilitiesIfNecessary)
|
||||||
throws ExoPlaybackException {
|
throws ExoPlaybackException {
|
||||||
TrackSelection selection = null;
|
TrackSelection selection = null;
|
||||||
if (adaptiveVideoTrackSelectionFactory != null) {
|
if (adaptiveVideoTrackSelectionFactory != null) {
|
||||||
selection = selectAdaptiveVideoTrack(rendererCapabilities, groups, formatSupport,
|
selection = selectAdaptiveVideoTrack(rendererCapabilities, groups, formatSupport,
|
||||||
maxVideoWidth, maxVideoHeight, allowNonSeamlessAdaptiveness,
|
maxVideoWidth, maxVideoHeight, maxVideoBitrate, allowNonSeamlessAdaptiveness,
|
||||||
allowMixedMimeAdaptiveness, viewportWidth, viewportHeight,
|
allowMixedMimeAdaptiveness, viewportWidth, viewportHeight,
|
||||||
orientationMayChange, adaptiveVideoTrackSelectionFactory);
|
orientationMayChange, adaptiveVideoTrackSelectionFactory);
|
||||||
}
|
}
|
||||||
if (selection == null) {
|
if (selection == null) {
|
||||||
selection = selectFixedVideoTrack(groups, formatSupport, maxVideoWidth, maxVideoHeight,
|
selection = selectFixedVideoTrack(groups, formatSupport, maxVideoWidth, maxVideoHeight,
|
||||||
viewportWidth, viewportHeight, orientationMayChange, exceedConstraintsIfNecessary,
|
maxVideoBitrate, viewportWidth, viewportHeight, orientationMayChange,
|
||||||
exceedRendererCapabilitiesIfNecessary);
|
exceedConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary);
|
||||||
}
|
}
|
||||||
return selection;
|
return selection;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static TrackSelection selectAdaptiveVideoTrack(RendererCapabilities rendererCapabilities,
|
private static TrackSelection selectAdaptiveVideoTrack(RendererCapabilities rendererCapabilities,
|
||||||
TrackGroupArray groups, int[][] formatSupport, int maxVideoWidth, int maxVideoHeight,
|
TrackGroupArray groups, int[][] formatSupport, int maxVideoWidth, int maxVideoHeight,
|
||||||
boolean allowNonSeamlessAdaptiveness, boolean allowMixedMimeAdaptiveness, int viewportWidth,
|
int maxVideoBitrate, boolean allowNonSeamlessAdaptiveness, boolean allowMixedMimeAdaptiveness,
|
||||||
int viewportHeight, boolean orientationMayChange,
|
int viewportWidth, int viewportHeight, boolean orientationMayChange,
|
||||||
TrackSelection.Factory adaptiveVideoTrackSelectionFactory) throws ExoPlaybackException {
|
TrackSelection.Factory adaptiveVideoTrackSelectionFactory) throws ExoPlaybackException {
|
||||||
int requiredAdaptiveSupport = allowNonSeamlessAdaptiveness
|
int requiredAdaptiveSupport = allowNonSeamlessAdaptiveness
|
||||||
? (RendererCapabilities.ADAPTIVE_NOT_SEAMLESS | RendererCapabilities.ADAPTIVE_SEAMLESS)
|
? (RendererCapabilities.ADAPTIVE_NOT_SEAMLESS | RendererCapabilities.ADAPTIVE_SEAMLESS)
|
||||||
@ -470,7 +492,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
TrackGroup group = groups.get(i);
|
TrackGroup group = groups.get(i);
|
||||||
int[] adaptiveTracks = getAdaptiveTracksForGroup(group, formatSupport[i],
|
int[] adaptiveTracks = getAdaptiveTracksForGroup(group, formatSupport[i],
|
||||||
allowMixedMimeTypes, requiredAdaptiveSupport, maxVideoWidth, maxVideoHeight,
|
allowMixedMimeTypes, requiredAdaptiveSupport, maxVideoWidth, maxVideoHeight,
|
||||||
viewportWidth, viewportHeight, orientationMayChange);
|
maxVideoBitrate, viewportWidth, viewportHeight, orientationMayChange);
|
||||||
if (adaptiveTracks.length > 0) {
|
if (adaptiveTracks.length > 0) {
|
||||||
return adaptiveVideoTrackSelectionFactory.createTrackSelection(group, adaptiveTracks);
|
return adaptiveVideoTrackSelectionFactory.createTrackSelection(group, adaptiveTracks);
|
||||||
}
|
}
|
||||||
@ -480,7 +502,8 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
|
|
||||||
private static int[] getAdaptiveTracksForGroup(TrackGroup group, int[] formatSupport,
|
private static int[] getAdaptiveTracksForGroup(TrackGroup group, int[] formatSupport,
|
||||||
boolean allowMixedMimeTypes, int requiredAdaptiveSupport, int maxVideoWidth,
|
boolean allowMixedMimeTypes, int requiredAdaptiveSupport, int maxVideoWidth,
|
||||||
int maxVideoHeight, int viewportWidth, int viewportHeight, boolean orientationMayChange) {
|
int maxVideoHeight, int maxVideoBitrate, int viewportWidth, int viewportHeight,
|
||||||
|
boolean orientationMayChange) {
|
||||||
if (group.length < 2) {
|
if (group.length < 2) {
|
||||||
return NO_TRACKS;
|
return NO_TRACKS;
|
||||||
}
|
}
|
||||||
@ -499,11 +522,10 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
for (int i = 0; i < selectedTrackIndices.size(); i++) {
|
for (int i = 0; i < selectedTrackIndices.size(); i++) {
|
||||||
int trackIndex = selectedTrackIndices.get(i);
|
int trackIndex = selectedTrackIndices.get(i);
|
||||||
String sampleMimeType = group.getFormat(trackIndex).sampleMimeType;
|
String sampleMimeType = group.getFormat(trackIndex).sampleMimeType;
|
||||||
if (!seenMimeTypes.contains(sampleMimeType)) {
|
if (seenMimeTypes.add(sampleMimeType)) {
|
||||||
seenMimeTypes.add(sampleMimeType);
|
|
||||||
int countForMimeType = getAdaptiveTrackCountForMimeType(group, formatSupport,
|
int countForMimeType = getAdaptiveTrackCountForMimeType(group, formatSupport,
|
||||||
requiredAdaptiveSupport, sampleMimeType, maxVideoWidth, maxVideoHeight,
|
requiredAdaptiveSupport, sampleMimeType, maxVideoWidth, maxVideoHeight,
|
||||||
selectedTrackIndices);
|
maxVideoBitrate, selectedTrackIndices);
|
||||||
if (countForMimeType > selectedMimeTypeTrackCount) {
|
if (countForMimeType > selectedMimeTypeTrackCount) {
|
||||||
selectedMimeType = sampleMimeType;
|
selectedMimeType = sampleMimeType;
|
||||||
selectedMimeTypeTrackCount = countForMimeType;
|
selectedMimeTypeTrackCount = countForMimeType;
|
||||||
@ -514,19 +536,20 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
|
|
||||||
// Filter by the selected mime type.
|
// Filter by the selected mime type.
|
||||||
filterAdaptiveTrackCountForMimeType(group, formatSupport, requiredAdaptiveSupport,
|
filterAdaptiveTrackCountForMimeType(group, formatSupport, requiredAdaptiveSupport,
|
||||||
selectedMimeType, maxVideoWidth, maxVideoHeight, selectedTrackIndices);
|
selectedMimeType, maxVideoWidth, maxVideoHeight, maxVideoBitrate, selectedTrackIndices);
|
||||||
|
|
||||||
return selectedTrackIndices.size() < 2 ? NO_TRACKS : Util.toArray(selectedTrackIndices);
|
return selectedTrackIndices.size() < 2 ? NO_TRACKS : Util.toArray(selectedTrackIndices);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int getAdaptiveTrackCountForMimeType(TrackGroup group, int[] formatSupport,
|
private static int getAdaptiveTrackCountForMimeType(TrackGroup group, int[] formatSupport,
|
||||||
int requiredAdaptiveSupport, String mimeType, int maxVideoWidth, int maxVideoHeight,
|
int requiredAdaptiveSupport, String mimeType, int maxVideoWidth, int maxVideoHeight,
|
||||||
List<Integer> selectedTrackIndices) {
|
int maxVideoBitrate, List<Integer> selectedTrackIndices) {
|
||||||
int adaptiveTrackCount = 0;
|
int adaptiveTrackCount = 0;
|
||||||
for (int i = 0; i < selectedTrackIndices.size(); i++) {
|
for (int i = 0; i < selectedTrackIndices.size(); i++) {
|
||||||
int trackIndex = selectedTrackIndices.get(i);
|
int trackIndex = selectedTrackIndices.get(i);
|
||||||
if (isSupportedAdaptiveVideoTrack(group.getFormat(trackIndex), mimeType,
|
if (isSupportedAdaptiveVideoTrack(group.getFormat(trackIndex), mimeType,
|
||||||
formatSupport[trackIndex], requiredAdaptiveSupport, maxVideoWidth, maxVideoHeight)) {
|
formatSupport[trackIndex], requiredAdaptiveSupport, maxVideoWidth, maxVideoHeight,
|
||||||
|
maxVideoBitrate)) {
|
||||||
adaptiveTrackCount++;
|
adaptiveTrackCount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -535,28 +558,31 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
|
|
||||||
private static void filterAdaptiveTrackCountForMimeType(TrackGroup group, int[] formatSupport,
|
private static void filterAdaptiveTrackCountForMimeType(TrackGroup group, int[] formatSupport,
|
||||||
int requiredAdaptiveSupport, String mimeType, int maxVideoWidth, int maxVideoHeight,
|
int requiredAdaptiveSupport, String mimeType, int maxVideoWidth, int maxVideoHeight,
|
||||||
List<Integer> selectedTrackIndices) {
|
int maxVideoBitrate, List<Integer> selectedTrackIndices) {
|
||||||
for (int i = selectedTrackIndices.size() - 1; i >= 0; i--) {
|
for (int i = selectedTrackIndices.size() - 1; i >= 0; i--) {
|
||||||
int trackIndex = selectedTrackIndices.get(i);
|
int trackIndex = selectedTrackIndices.get(i);
|
||||||
if (!isSupportedAdaptiveVideoTrack(group.getFormat(trackIndex), mimeType,
|
if (!isSupportedAdaptiveVideoTrack(group.getFormat(trackIndex), mimeType,
|
||||||
formatSupport[trackIndex], requiredAdaptiveSupport, maxVideoWidth, maxVideoHeight)) {
|
formatSupport[trackIndex], requiredAdaptiveSupport, maxVideoWidth, maxVideoHeight,
|
||||||
|
maxVideoBitrate)) {
|
||||||
selectedTrackIndices.remove(i);
|
selectedTrackIndices.remove(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isSupportedAdaptiveVideoTrack(Format format, String mimeType,
|
private static boolean isSupportedAdaptiveVideoTrack(Format format, String mimeType,
|
||||||
int formatSupport, int requiredAdaptiveSupport, int maxVideoWidth, int maxVideoHeight) {
|
int formatSupport, int requiredAdaptiveSupport, int maxVideoWidth, int maxVideoHeight,
|
||||||
|
int maxVideoBitrate) {
|
||||||
return isSupported(formatSupport, false) && ((formatSupport & requiredAdaptiveSupport) != 0)
|
return isSupported(formatSupport, false) && ((formatSupport & requiredAdaptiveSupport) != 0)
|
||||||
&& (mimeType == null || Util.areEqual(format.sampleMimeType, mimeType))
|
&& (mimeType == null || Util.areEqual(format.sampleMimeType, mimeType))
|
||||||
&& (format.width == Format.NO_VALUE || format.width <= maxVideoWidth)
|
&& (format.width == Format.NO_VALUE || format.width <= maxVideoWidth)
|
||||||
&& (format.height == Format.NO_VALUE || format.height <= maxVideoHeight);
|
&& (format.height == Format.NO_VALUE || format.height <= maxVideoHeight)
|
||||||
|
&& (format.bitrate == Format.NO_VALUE || format.bitrate <= maxVideoBitrate);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static TrackSelection selectFixedVideoTrack(TrackGroupArray groups,
|
private static TrackSelection selectFixedVideoTrack(TrackGroupArray groups,
|
||||||
int[][] formatSupport, int maxVideoWidth, int maxVideoHeight, int viewportWidth,
|
int[][] formatSupport, int maxVideoWidth, int maxVideoHeight, int maxVideoBitrate,
|
||||||
int viewportHeight, boolean orientationMayChange, boolean exceedConstraintsIfNecessary,
|
int viewportWidth, int viewportHeight, boolean orientationMayChange,
|
||||||
boolean exceedRendererCapabilitiesIfNecessary) {
|
boolean exceedConstraintsIfNecessary, boolean exceedRendererCapabilitiesIfNecessary) {
|
||||||
TrackGroup selectedGroup = null;
|
TrackGroup selectedGroup = null;
|
||||||
int selectedTrackIndex = 0;
|
int selectedTrackIndex = 0;
|
||||||
int selectedTrackScore = 0;
|
int selectedTrackScore = 0;
|
||||||
@ -572,7 +598,8 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
Format format = trackGroup.getFormat(trackIndex);
|
Format format = trackGroup.getFormat(trackIndex);
|
||||||
boolean isWithinConstraints = selectedTrackIndices.contains(trackIndex)
|
boolean isWithinConstraints = selectedTrackIndices.contains(trackIndex)
|
||||||
&& (format.width == Format.NO_VALUE || format.width <= maxVideoWidth)
|
&& (format.width == Format.NO_VALUE || format.width <= maxVideoWidth)
|
||||||
&& (format.height == Format.NO_VALUE || format.height <= maxVideoHeight);
|
&& (format.height == Format.NO_VALUE || format.height <= maxVideoHeight)
|
||||||
|
&& (format.bitrate == Format.NO_VALUE || format.bitrate <= maxVideoBitrate);
|
||||||
if (!isWithinConstraints && !exceedConstraintsIfNecessary) {
|
if (!isWithinConstraints && !exceedConstraintsIfNecessary) {
|
||||||
// Track should not be selected.
|
// Track should not be selected.
|
||||||
continue;
|
continue;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user