目前我正在编写一些基于 VLCJ 的代码来播放视频内容,这工作得很好,但我正在努力使 setSpu() 方法工作。
顺便提一下,在加载外部字幕时,在视频文件之外的文件中,它工作正常。当我尝试播放媒体文件中包含的字幕时出现问题。(例如包含在 MKV 文件中的潜艇)。
我仔细阅读了 GitHub 帖子“setSpu not working #278 ”,我认为问题可能在于我没有正确调用 setSpu() 方法。
为了简单起见,我试图使其适用于示例“uk.co.caprica.vlcj.test.basic.TestPlayer”。
在 TestPlayer.java 类上,我加载了所有原生 vlc 所需的库并配置了 mediaPath 和 mediaPlayer,所以如果我执行该类,媒体播放器就会正确构建,并且视频开始播放。
现在,为了尝试制作字幕,我在“PlayerControlsPanel.java”上重用了“subTitlesButton”按钮。首先,由于要设置的spu是TrackDescription的ID,所以我添加了如下代码,执行得到spuDescriptions列表:
subTitlesButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(mediaPlayer.getSpuDescriptions());
}
});
当按下 Sub-titles 按钮时,得到以下输出:
spuDescriptions=[TrackDescription[id=-1,description=Deshabilitar], TrackDescription[id=3,description=Pista 1 - [Español]], TrackDescription[id=4,description=Pista 2 - [Inglés]], TrackDescription[id=5,description=Pista 3 - [Español]]]
因此,为了简单起见,我只是尝试添加以下代码并执行它:
subTitlesButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(mediaPlayer.getSpuDescriptions());
mediaPlayer.setSpu(3); // TrackDescription[id=3,description=Track 1 - [Spanish]]
}
});
预期的结果将是 ID=3 的副标题“Track 1 - [Spanish]”出现在屏幕上,但没有任何反应。视频继续播放并正常播放,但未显示副标题。
所有其他按钮,当您按下它们时工作正常,您会得到预期的结果(暂停、停止、播放、快进、倒带等)......所以我不明白为什么 media.setSpu() 不是在那里工作。
非常感谢一些帮助:) 在此先感谢。
编辑确切的问题是媒体文件(video.mkv)中包含的所有字幕都是UTF8文本编码的。我尝试使用 mkvmerge 重新挂载 video.mkv 文件,但是这个程序总是将 SRT 文件转换为 UTF8 文本格式。 解决方法将 SRT 文件转换为 ASS 字幕格式。如果 video.mkv 包含 .ASS 字幕格式,则字幕始终由 VLC 正确加载,也由 vlcj 库正确加载。
非常感谢您提供的所有帮助。