com.google.android.exoplayer2.text.subtitlexception

com.google.android.exoplayer2.text.subtitlexception,android,android-videoview,exoplayer,exoplayer2.x,android-video-player,Android,Android Videoview,Exoplayer,Exoplayer2.x,Android Video Player,我通过简单地编写一个文本文件并使用.srt扩展名保存它来创建字幕。我创建的所有字幕文件都运行良好。(我刚刚用MxPlayer检查过) 现在我正在构建一个视频播放器,它需要显示我创建的字幕 最初,我试图从web加载字幕,只是为了准备代码库。它成功了 val uri = Uri.parse("https://bitdash-a.akamaihd.net/content/sintel/hls/subtitles_en.vtt") val subtitleFormat: Format

我通过简单地编写一个文本文件并使用
.srt
扩展名保存它来创建字幕。我创建的所有字幕文件都运行良好。(我刚刚用MxPlayer检查过)

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

最初,我试图从web加载字幕,只是为了准备代码库。它成功了

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
我知道web文件和本地文件不同。但我不知道这是否造成了问题*

要加载,我遵循下面的代码段

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
我不知道这个错误是怎么回事。我只是浏览了一下,没有找到解决办法


如何解决这个问题?

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

  • 首先是
    。vtt
    。srt
    略有不同。
    .vtt
    中,第一行是文本
    WEBVTT

    .srt
    中没有这样的东西

  • 其次,非常重要的是
    subtitleFormat
    对于
    .srt
    它应该是
    MimeTypes.APPLICATION\u SUBRIP
    ,对于
    .VTT
    它应该是
    MimeTypes.TEXT\u VTT

  • 如果将
    .srt
    重命名为
    .vtt
    ,并手动添加第一行
    WEBVTT
    ,将出现一些解析异常。所以,最好检查webvtt文件是否正确


现在一切都很顺利。

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

  • 首先是
    。vtt
    。srt
    略有不同。
    .vtt
    中,第一行是文本
    WEBVTT

    .srt
    中没有这样的东西

  • 其次,非常重要的是
    subtitleFormat
    对于
    .srt
    它应该是
    MimeTypes.APPLICATION\u SUBRIP
    ,对于
    .VTT
    它应该是
    MimeTypes.TEXT\u VTT

  • 如果将
    .srt
    重命名为
    .vtt
    ,并手动添加第一行
    WEBVTT
    ,将出现一些解析异常。所以,最好检查webvtt文件是否正确


现在一切正常。

谢谢。我将本地艺术文件的mime类型更改为MimeTypes.APPLICATION\u SUBRIP。谢谢你。我将本地艺术文件的mime类型更改为MimeTypes.APPLICATION\u SUBRIP。它起作用了