mirror of
https://github.com/samsonjs/media.git
synced 2026-03-28 09:55:48 +00:00
Add convenience methods to select multiple audio or text tracks for downloading.
These methods take a list of languages to be downloaded and add selections for each of the languages. PiperOrigin-RevId: 231385632
This commit is contained in:
parent
71d77d7fa0
commit
6983f92ffd
2 changed files with 125 additions and 0 deletions
|
|
@ -489,6 +489,64 @@ public final class DownloadHelper {
|
|||
runTrackSelection(periodIndex);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenience method to add selections of tracks for all specified audio languages. If an audio
|
||||
* track in one of the specified languages is not available, the default fallback audio track is
|
||||
* used instead. Must not be called until after preparation completes.
|
||||
*
|
||||
* @param languages A list of audio languages for which tracks should be added to the download
|
||||
* selection, as ISO 639-2/T tags.
|
||||
*/
|
||||
public void addAudioLanguagesToSelection(String... languages) {
|
||||
assertPreparedWithMedia();
|
||||
for (int periodIndex = 0; periodIndex < mappedTrackInfos.length; periodIndex++) {
|
||||
DefaultTrackSelector.ParametersBuilder parametersBuilder =
|
||||
DEFAULT_TRACK_SELECTOR_PARAMETERS.buildUpon();
|
||||
MappedTrackInfo mappedTrackInfo = mappedTrackInfos[periodIndex];
|
||||
int rendererCount = mappedTrackInfo.getRendererCount();
|
||||
for (int rendererIndex = 0; rendererIndex < rendererCount; rendererIndex++) {
|
||||
if (mappedTrackInfo.getRendererType(rendererIndex) != C.TRACK_TYPE_AUDIO) {
|
||||
parametersBuilder.setRendererDisabled(rendererIndex, /* disabled= */ true);
|
||||
}
|
||||
}
|
||||
for (String language : languages) {
|
||||
parametersBuilder.setPreferredAudioLanguage(language);
|
||||
addTrackSelection(periodIndex, parametersBuilder.build());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenience method to add selections of tracks for all specified text languages. Must not be
|
||||
* called until after preparation completes.
|
||||
*
|
||||
* @param selectUndeterminedTextLanguage Whether a text track with undetermined language should be
|
||||
* selected for downloading if no track with one of the specified {@code languages} is
|
||||
* available.
|
||||
* @param languages A list of text languages for which tracks should be added to the download
|
||||
* selection, as ISO 639-2/T tags.
|
||||
*/
|
||||
public void addTextLanguagesToSelection(
|
||||
boolean selectUndeterminedTextLanguage, String... languages) {
|
||||
assertPreparedWithMedia();
|
||||
for (int periodIndex = 0; periodIndex < mappedTrackInfos.length; periodIndex++) {
|
||||
DefaultTrackSelector.ParametersBuilder parametersBuilder =
|
||||
DEFAULT_TRACK_SELECTOR_PARAMETERS.buildUpon();
|
||||
MappedTrackInfo mappedTrackInfo = mappedTrackInfos[periodIndex];
|
||||
int rendererCount = mappedTrackInfo.getRendererCount();
|
||||
for (int rendererIndex = 0; rendererIndex < rendererCount; rendererIndex++) {
|
||||
if (mappedTrackInfo.getRendererType(rendererIndex) != C.TRACK_TYPE_TEXT) {
|
||||
parametersBuilder.setRendererDisabled(rendererIndex, /* disabled= */ true);
|
||||
}
|
||||
}
|
||||
parametersBuilder.setSelectUndeterminedTextLanguage(selectUndeterminedTextLanguage);
|
||||
for (String language : languages) {
|
||||
parametersBuilder.setPreferredTextLanguage(language);
|
||||
addTrackSelection(periodIndex, parametersBuilder.build());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds a {@link DownloadAction} for downloading the selected tracks. Must not be called until
|
||||
* after preparation completes.
|
||||
|
|
|
|||
|
|
@ -312,6 +312,73 @@ public class DownloadHelperTest {
|
|||
assertSingleTrackSelectionEquals(selectedVideo1, TRACK_GROUP_VIDEO_SINGLE, 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getTrackSelections_afterAddAudioLanguagesToSelection_returnsCombinedSelections()
|
||||
throws Exception {
|
||||
prepareDownloadHelper(downloadHelper);
|
||||
downloadHelper.clearTrackSelections(/* periodIndex= */ 0);
|
||||
downloadHelper.clearTrackSelections(/* periodIndex= */ 1);
|
||||
|
||||
// Add a non-default language, and a non-existing language (which will select the default).
|
||||
downloadHelper.addAudioLanguagesToSelection("ZH", "Klingonese");
|
||||
List<TrackSelection> selectedText0 =
|
||||
downloadHelper.getTrackSelections(/* periodIndex= */ 0, /* rendererIndex= */ 0);
|
||||
List<TrackSelection> selectedAudio0 =
|
||||
downloadHelper.getTrackSelections(/* periodIndex= */ 0, /* rendererIndex= */ 1);
|
||||
List<TrackSelection> selectedVideo0 =
|
||||
downloadHelper.getTrackSelections(/* periodIndex= */ 0, /* rendererIndex= */ 2);
|
||||
List<TrackSelection> selectedText1 =
|
||||
downloadHelper.getTrackSelections(/* periodIndex= */ 1, /* rendererIndex= */ 0);
|
||||
List<TrackSelection> selectedAudio1 =
|
||||
downloadHelper.getTrackSelections(/* periodIndex= */ 1, /* rendererIndex= */ 1);
|
||||
List<TrackSelection> selectedVideo1 =
|
||||
downloadHelper.getTrackSelections(/* periodIndex= */ 1, /* rendererIndex= */ 2);
|
||||
|
||||
assertThat(selectedVideo0).isEmpty();
|
||||
assertThat(selectedText0).isEmpty();
|
||||
assertThat(selectedAudio0).hasSize(2);
|
||||
assertTrackSelectionEquals(selectedAudio0.get(0), TRACK_GROUP_AUDIO_ZH, 0);
|
||||
assertTrackSelectionEquals(selectedAudio0.get(1), TRACK_GROUP_AUDIO_US, 0);
|
||||
|
||||
assertThat(selectedVideo1).isEmpty();
|
||||
assertThat(selectedText1).isEmpty();
|
||||
assertSingleTrackSelectionEquals(selectedAudio1, TRACK_GROUP_AUDIO_US, 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getTrackSelections_afterAddTextLanguagesToSelection_returnsCombinedSelections()
|
||||
throws Exception {
|
||||
prepareDownloadHelper(downloadHelper);
|
||||
downloadHelper.clearTrackSelections(/* periodIndex= */ 0);
|
||||
downloadHelper.clearTrackSelections(/* periodIndex= */ 1);
|
||||
|
||||
// Add a non-default language, and a non-existing language (which will select the default).
|
||||
downloadHelper.addTextLanguagesToSelection(
|
||||
/* selectUndeterminedTextLanguage= */ true, "ZH", "Klingonese");
|
||||
List<TrackSelection> selectedText0 =
|
||||
downloadHelper.getTrackSelections(/* periodIndex= */ 0, /* rendererIndex= */ 0);
|
||||
List<TrackSelection> selectedAudio0 =
|
||||
downloadHelper.getTrackSelections(/* periodIndex= */ 0, /* rendererIndex= */ 1);
|
||||
List<TrackSelection> selectedVideo0 =
|
||||
downloadHelper.getTrackSelections(/* periodIndex= */ 0, /* rendererIndex= */ 2);
|
||||
List<TrackSelection> selectedText1 =
|
||||
downloadHelper.getTrackSelections(/* periodIndex= */ 1, /* rendererIndex= */ 0);
|
||||
List<TrackSelection> selectedAudio1 =
|
||||
downloadHelper.getTrackSelections(/* periodIndex= */ 1, /* rendererIndex= */ 1);
|
||||
List<TrackSelection> selectedVideo1 =
|
||||
downloadHelper.getTrackSelections(/* periodIndex= */ 1, /* rendererIndex= */ 2);
|
||||
|
||||
assertThat(selectedVideo0).isEmpty();
|
||||
assertThat(selectedAudio0).isEmpty();
|
||||
assertThat(selectedText0).hasSize(2);
|
||||
assertTrackSelectionEquals(selectedText0.get(0), TRACK_GROUP_TEXT_ZH, 0);
|
||||
assertTrackSelectionEquals(selectedText0.get(1), TRACK_GROUP_TEXT_US, 0);
|
||||
|
||||
assertThat(selectedVideo1).isEmpty();
|
||||
assertThat(selectedAudio1).isEmpty();
|
||||
assertThat(selectedText1).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getDownloadAction_createsDownloadAction_withAllSelectedTracks() throws Exception {
|
||||
prepareDownloadHelper(downloadHelper);
|
||||
|
|
|
|||
Loading…
Reference in a new issue