将 ExoPlayer 库更新为
implementation 'com.google.android.exoplayer:exoplayer:2.9.5'
我发现MappingTrackSelector.SelectionOverride方法已经不存在了。
我无法找到可行的替代方案,因为仅替换为 DefaultTrackSelector.SelectionOverride 对我不起作用,而且在我的视频中没有播放字幕。
MediaSource mediaSource = new HlsMediaSource.Factory(mediaDataSourceFactory).createMediaSource(uri);
对我有用的最后一组代码:
TrackGroupArray trackGroups = trackSelector.getCurrentMappedTrackInfo().getTrackGroups(newSubtitle.renderIndex);
DefaultTrackSelector.ParametersBuilder paramsBuilder = trackSelector.buildUponParameters();
DefaultTrackSelector.SelectionOverride sOverride = new DefaultTrackSelector.SelectionOverride(newSubtitle.groupIndex, newSubtitle.indexWithinGroup);
boolean isDisabled = trackSelector.getParameters().getRendererDisabled(newSubtitle.renderIndex);
paramsBuilder.setRendererDisabled(newSubtitle.renderIndex, isDisabled);
if (sOverride != null) {
paramsBuilder.setSelectionOverride(newSubtitle.renderIndex, trackGroups, sOverride);
} else {
paramsBuilder.clearSelectionOverrides(newSubtitle.renderIndex);
}
trackSelector.setParameters(paramsBuilder);
旧代码是:
TrackGroupArray trackGroups = trackSelector.getCurrentMappedTrackInfo().getTrackGroups(newSubtitle.renderIndex);
MappingTrackSelector.SelectionOverride sOverride = new MappingTrackSelector.SelectionOverride(
new FixedTrackSelection.Factory(),
newSubtitle.groupIndex,
newSubtitle.indexWithinGroup
);
trackSelector.setSelectionOverride(newSubtitle.renderIndex, trackGroups, sOverride);
trackSelector.setRendererDisabled(newSubtitle.renderIndex, false);
关闭字幕:
DefaultTrackSelector.ParametersBuilder paramsBuilder = trackSelector.buildUponParameters();
paramsBuilder.setRendererDisabled(playingSubtitle.renderIndex, true);
trackSelector.setParameters(paramsBuilder);