com.google.android.exoplayer2.text.SubtitleDecoderException

com.google.android.exoplayer2.text.SubtitleDecoderException

我通过简单地编写一个文本文件并将其保存为 .srt 扩展名来创建字幕。我创建的所有字幕文件都工作正常。 (我刚刚用 MxPlayer 查了一下)

现在我正在构建一个视频播放器,它需要显示我创建的字幕。

最初我尝试从网络加载字幕只是为了准备代码库。它奏效了

val uri = Uri.parse("https://bitdash-a.akamaihd.net/content/sintel/hls/subtitles_en.vtt")
val subtitleFormat: Format = Format.createTextSampleFormat(
            null,  // An identifier for the track. May be null.
            MimeTypes.TEXT_VTT,  // The mime type. Must be set correctly.
            Format.NO_VALUE,  // Selection flags for the track.
            "en"
        )
var mediaDataSourceFactory = DefaultDataSourceFactory(this, Util.getUserAgent(this, null))
var subtitleSource = SingleSampleMediaSource(uri, mediaDataSourceFactory,
            subtitleFormat,
            C.TIME_UNSET)
...
...

var videoSource: MediaSource = buildMediaSource(video_uri!!)
var mediaSource: MediaSource =  MergingMediaSource(videoSource, subtitleSource)

现在我要做的就是从位于

的本地文件夹加载字幕文件
/storage/emulated/0/Android/data/com.company.appname/files/Subtitle/shortmovie.2020.720p.x264.mp4.en.srt

我知道网页文件不同,本地文件不同。但是不知道是不是问题*

要加载我正在关注下面的片段

fun getSubtitleFilePath(context: Context, subtitleFileName: String?): File {
        val path = context.getExternalFilesDir(null)
        return File(path, "$appFolderName/${subtitleFileName}.srt")
}

val subtitleFilePath = getSubtitleFilePath(this, "shortmovie.2020.720p.x264.mp4.en")
val uri = Uri.parse(subtitleFilePath.toURI().toString())

就这些,我只是把uri替换成本地字幕文件

主要问题

当我尝试加载字幕时,播放器没有播放视频。我收到一个错误

Playback error.
com.google.android.exoplayer2.ExoPlaybackException: com.google.android.exoplayer2.text.SubtitleDecoderException: com.google.android.exoplayer2.ParserException: Expected WEBVTT. Got 1

Caused by:
com.google.android.exoplayer2.text.SubtitleDecoderException: com.google.android.exoplayer2.ParserException: Expected WEBVTT. Got 1

我不知道这个错误是什么。我刚刚经历了 Github issue 并没有找到解决方案。

如何解决这个问题?

因为没有人回答我的问题,我自己找到了答案。

  • 首先是.vtt.srt略有不同。
    .vtt 第一行是文本 WEBVTT check this
    .srt 中没有这样的东西

  • 其次,非常重要的是MimeTypessubtitleFormat .srt 应该是 MimeTypes.APPLICATION_SUBRIP.vtt

    应该是 MimeTypes.TEXT_VTT
  • 如果您将 .srt 重命名为 .vtt 并手动添加第一行 WEBVTT ,将会出现一些解析异常。所以,还是检查一下webvtt文件是否正确吧。

就这些,一切正常。