mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +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);
|
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
|
* Builds a {@link DownloadAction} for downloading the selected tracks. Must not be called until
|
||||||
* after preparation completes.
|
* after preparation completes.
|
||||||
|
|
|
||||||
|
|
@ -312,6 +312,73 @@ public class DownloadHelperTest {
|
||||||
assertSingleTrackSelectionEquals(selectedVideo1, TRACK_GROUP_VIDEO_SINGLE, 0);
|
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
|
@Test
|
||||||
public void getDownloadAction_createsDownloadAction_withAllSelectedTracks() throws Exception {
|
public void getDownloadAction_createsDownloadAction_withAllSelectedTracks() throws Exception {
|
||||||
prepareDownloadHelper(downloadHelper);
|
prepareDownloadHelper(downloadHelper);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue