我正在尝试将字幕文件与视频一起加载,但无法正常工作。
代码:
private MediaSource buildMediaSourceWithSubtitle(Uri uri, @Nullable String overrideExtension, Uri subtitle) {
Format subtitleFormat = Format.createTextSampleFormat(null, MimeTypes.APPLICATION_SUBRIP, 0, null);
MediaSource subtitleSource = new SingleSampleMediaSource.Factory(dataSourceFactory).createMediaSource(subtitle, subtitleFormat, C.TIME_UNSET);
MediaSource mediaSource = null;
@ContentType int type = Util.inferContentType(uri, overrideExtension);
switch (type) {
case C.TYPE_DASH:
mediaSource = new DashMediaSource.Factory(dataSourceFactory).setManifestParser(
new FilteringManifestParser < >(new DashManifestParser(), getOfflineStreamKeys(uri))).createMediaSource(uri);
return new MergingMediaSource(mediaSource, subtitleSource);
case C.TYPE_SS:
mediaSource = new SsMediaSource.Factory(dataSourceFactory).setManifestParser(
new FilteringManifestParser < >(new SsManifestParser(), getOfflineStreamKeys(uri))).createMediaSource(uri);
return new MergingMediaSource(mediaSource, subtitleSource);
case C.TYPE_HLS:
mediaSource = new HlsMediaSource.Factory(dataSourceFactory).setPlaylistParserFactory(
new DefaultHlsPlaylistParserFactory(getOfflineStreamKeys(uri))).createMediaSource(uri);
return new MergingMediaSource(mediaSource, subtitleSource);
case C.TYPE_OTHER:
mediaSource = new ExtractorMediaSource.Factory(dataSourceFactory).createMediaSource(uri);
return new MergingMediaSource(mediaSource, subtitleSource);
default:
{
throw new IllegalStateException("Unsupported type: " + type);
}
}
}
答案 0 :(得分:0)
MediaSource videoSource = new ExtractorMediaSource( videoUri, dataSourceFactory, new DefaultExtractorsFactory(), null, null); Format subtitleFormat = Format.createTextSampleFormat( null, MimeTypes.APPLICATION_SUBRIP, C.SelectionFlags, "en"); MediaSource textMediaSource = new SingleSampleMediaSource( Uri.parse("http://www.storiesinflight.com/js_videosub/jellies.srt"), dataSourceFactory, subtitleFormat, C.TIME_UNSET); source = new MergingMediaSource(videoSource, textMediaSource); // to be used later // nested to some class that has SubtitleView as member class SomeListener implements ..., TextRenderer.Output, ... { ... // this function doesn't seem to be invoked public void onCues(List cues) { // some logging here if (subtitleView != null) { subtitleView.onCues(cues); } } ... } player.setTextOutput(listener); ... // later, play the video assuming its prepared and whatnot player.setPlayWhenReady(true);