android - 如何将字幕与exoplayer android集成

标签 android exoplayer subtitle exoplayer2.x

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

https://github.com/google/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);
      }
    }
  }

我想这是应该更改的地方,以便为我的媒体文件添加字幕,但我不知道如何更改?

字幕也将来自服务器,格式为.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);
      }
    }
  }

enter image description here

最佳答案

这实际上取决于您是侧加载字幕还是嵌入到您的流中。如果它们是嵌入的,HLS、Dash 或其他媒体源将检测轨道,您将需要选择文本轨道。参见 SimpleExoPlayer example

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

关于android - 如何将字幕与exoplayer android集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54738600/

相关文章:

android - OsmBonusPack 从 Mapsforge map 文件中搜索离线 POI

android - Android 应用程序上 json 数据显示崩溃

android - 如何在 Exoplayer Android 库中为 HLS 流设置 CloudFront Cookies?

java - Exoplayer 不在本地存储上播放本地文件

ffmpeg - 使用ffmpeg添加文本字幕

android - ActionBar 自定义标题颜色

android - Phonegap android 应用程序使用 durandal : page with ajax call not opening

android - RadioGroup 允许选择多个 RadioButton

android - ExoPlayer 在恢复时恢复状态

c++ DLNA 字幕显示实现与白金库