Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将字幕与exoplayer android集成_Android_Exoplayer_Subtitle_Exoplayer2.x - Fatal编程技术网

如何将字幕与exoplayer android集成

如何将字幕与exoplayer android集成,android,exoplayer,subtitle,exoplayer2.x,Android,Exoplayer,Subtitle,Exoplayer2.x,我使用Exoplayer播放不同类型的视频,我下载了这个演示并使用它 现在我需要为我的视频添加字幕,我使用的是ExoPlayer版本2.9.5 这是构建媒体源的方法 private MediaSource buildMediaSource(Uri uri, @Nullable String overrideExtension) { @ContentType int type = Util.inferContentType(uri, overrideExtension); swi

我使用Exoplayer播放不同类型的视频,我下载了这个演示并使用它

现在我需要为我的视频添加字幕,我使用的是ExoPlayer版本2.9.5

这是构建媒体源的方法

private MediaSource buildMediaSource(Uri uri, @Nullable String overrideExtension) {
    @ContentType int type = Util.inferContentType(uri, overrideExtension);
    switch (type) {
      case C.TYPE_DASH:
        return new DashMediaSource.Factory(dataSourceFactory)
            .setManifestParser(
                new FilteringManifestParser<>(new DashManifestParser(), getOfflineStreamKeys(uri)))
            .createMediaSource(uri);
      case C.TYPE_SS:
        return new SsMediaSource.Factory(dataSourceFactory)
            .setManifestParser(
                new FilteringManifestParser<>(new SsManifestParser(), getOfflineStreamKeys(uri)))
            .createMediaSource(uri);
      case C.TYPE_HLS:
        return new HlsMediaSource.Factory(dataSourceFactory)
            .setPlaylistParserFactory(
                new DefaultHlsPlaylistParserFactory(getOfflineStreamKeys(uri)))
            .createMediaSource(uri);
      case C.TYPE_OTHER:
        return new ExtractorMediaSource.Factory(dataSourceFactory).createMediaSource(uri);
      default: {
        throw new IllegalStateException("Unsupported type: " + type);
      }
    }
  }
私有MediaSource buildMediaSource(Uri,@Nullable String OverrideeExtension){
@ContentType int-type=Util.inferContentType(uri,overrideExtension);
开关(类型){
案例C.类型_破折号:
返回新的DashMediaSource.Factory(dataSourceFactory)
.setManifestParser(
新的FilteringManifestParser(新的DashManifestParser(),getOfflineStreamKeys(uri)))
.createMediaSource(uri);
案例C.类型:
返回新的SsMediaSource.Factory(dataSourceFactory)
.setManifestParser(
新的FilteringManifestParser(新的SsManifestParser(),getOfflineStreamKeys(uri)))
.createMediaSource(uri);
案例C.类型_HLS:
返回新的HlsMediaSource.Factory(dataSourceFactory)
.SetPlayParserFactory(
新的DefaultHlsPlaylistParserFactory(getOfflineStreamKeys(uri)))
.createMediaSource(uri);
案例C.类型_其他:
返回新的extractoremiasource.Factory(dataSourceFactory.createMediaSource(uri);
默认值:{
抛出新的IllegalStateException(“不支持的类型:“+type”);
}
}
}
我想这是应该改变的地方,在我的媒体文件中添加字幕,但我不知道怎么做

此外,字幕将来自服务器并采用.str格式

有人能帮忙吗

这是我的更新代码

private MediaSource buildMediaSourceWithSubtitle (Uri uri, @Nullable String overrideExtension, Uri subtitle) {

    Format subtitleFormat = Format.createTextSampleFormat(
            null, // An identifier for the track. May be null.
            MimeTypes.APPLICATION_SUBRIP, // The mime type. Must be set correctly.
            0, // Selection flags for the track.
            null); // The subtitle language. May be 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);
      }
    }
  }
private MediaSource buildMediaSourceWithSubtitle(Uri Uri,@Nullable String OverrideeExtension,Uri字幕){
Format subtitleFormat=Format.createTextSampleFormat(
null,//轨道的标识符。可能为null。
MimeTypes.APPLICATION\u SUBRIP,//必须正确设置mime类型。
0,//轨迹的选择标志。
null);//字幕语言。可能为null。
媒体源字幕源=
新的SingleSampleMediaSource.Factory(dataSourceFactory)
.createMediaSource(字幕,字幕格式,C.TIME\u UNSET);
MediaSource MediaSource=null;
@ContentType int-type=Util.inferContentType(uri,overrideExtension);
开关(类型){
案例C.类型_破折号:
mediaSource=新DashMediaSource.Factory(dataSourceFactory)
.setManifestParser(
新的FilteringManifestParser(新的DashManifestParser(),getOfflineStreamKeys(uri)))
.createMediaSource(uri);
返回新的MergingMediaSource(mediaSource,subtitleSource);
案例C.类型:
mediaSource=新的SsMediaSource.Factory(dataSourceFactory)
.setManifestParser(
新的FilteringManifestParser(新的SsManifestParser(),getOfflineStreamKeys(uri)))
.createMediaSource(uri);
返回新的MergingMediaSource(mediaSource,subtitleSource);
案例C.类型_HLS:
mediaSource=新的HlsMediaSource.Factory(dataSourceFactory)
.SetPlayParserFactory(
新的DefaultHlsPlaylistParserFactory(getOfflineStreamKeys(uri)))
.createMediaSource(uri);
返回新的MergingMediaSource(mediaSource,subtitleSource);
案例C.类型_其他:
mediaSource=new-extractoreMadisource.Factory(dataSourceFactory).createMediaSource(uri);
返回新的MergingMediaSource(mediaSource,subtitleSource);
默认值:{
抛出新的IllegalStateException(“不支持的类型:“+type”);
}
}
}

这实际上取决于您是侧面加载字幕,还是将字幕嵌入流中。如果它们被嵌入,HLS、Dash或其他媒体源将检测曲目,您需要选择文本曲目。看


如果您是侧面装载,则需要使用和。首先获取视频/音频源,然后从srt创建一个
SingleSampleMediaSource
,并使用
MergingMediaSource
将两者合并。完成后,选择如上所述的文本曲目。

因此,您没有发现:您可以播放
MKV
视频文件吗?如果可以,是否可以共享您的代码?请检查我的编辑,我已经按照您提供的示例进行了操作,但不起作用请检查屏幕快照这是我文件的url:,它只是一个测试文件