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
中没有这样的东西
其次,非常重要的是MimeTypes
在subtitleFormat
.srt
应该是 MimeTypes.APPLICATION_SUBRIP
,.vtt
应该是 MimeTypes.TEXT_VTT
如果您将 .srt
重命名为 .vtt
并手动添加第一行 WEBVTT
,将会出现一些解析异常。所以,还是检查一下webvtt文件是否正确吧。
就这些,一切正常。
我通过简单地编写一个文本文件并将其保存为 .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
中没有这样的东西其次,非常重要的是
应该是MimeTypes
在subtitleFormat
.srt
应该是MimeTypes.APPLICATION_SUBRIP
,.vtt
MimeTypes.TEXT_VTT
如果您将
.srt
重命名为.vtt
并手动添加第一行WEBVTT
,将会出现一些解析异常。所以,还是检查一下webvtt文件是否正确吧。
就这些,一切正常。