【问题标题】:Validate subtitles file using vlcj (Java)使用 vlcj (Java) 验证字幕文件
【发布时间】:2019-05-15 12:02:28
【问题描述】:

我正在使用 vlcj DefaultEmbeddedMediaPlayer 的实例来播放视频。在为视频添加字幕时,我想查看字幕文件是否有效,如果不是,则抛出异常。这是我的代码:

File subtitlesFile = new File("subs.srt");
player.setSubTitleFile(subTitleFile);

方法setSubTitleFile(File subTitleFile) 没有返回值,但查看它的实现,我可以看到它将调用传递给libvlc,调用libvlc_video_subtitle_file(libvlc_media_player_t p_mi, String psz_subtitle),它返回10,具体取决于是否字幕是否添加成功。所以我继承了DefaultEmbeddedMediaPlayer 并编写了我自己版本的该方法:

public void setSubTitleFile(String subTitleFileName) {
    final int status = libvlc.libvlc_video_set_subtitle_file(mediaPlayerInstance(), subTitleFileName);
    System.out.println(status);
    // throw Exception if status is false
}

令人惊讶的是,这总是给我状态1,这意味着成功。即使我传递一个空的文本文件。这是一个错误吗?我真的不想事先手动解析字幕文件。使用本机 VLC 播放器,如果字幕无效,我会按预期收到错误。有什么我可以在这里做的吗?

编辑: 这是本机 VLC 播放器在播放过程中添加空 SRT 文件时的屏幕截图。 VLC subtitles file error

【问题讨论】:

  • 我刚刚发现 libvlc_video_set_subtitle_file 已从 VLC 3.x 中删除

标签: java vlc libvlc subtitle vlcj


【解决方案1】:

据我所知,当您调用 libvlc_video_set_subtitle_file 时,LibVLC/VLC 不会解析字幕文件。它基本上所做的只是在稍后将使用的一些本机结构上设置一个字符串值。因此,您将获得“成功”状态,因为该调用完成了设置该字符串值的工作。

因此,只有在 VLC 开始播放您的媒体并尝试加载该文件时,您才会知道字幕文件是否有效。即便如此,我认为您不会收到特定的错误消息 - 只是缺少字幕轨道。

【讨论】:

  • 感谢您的回答,随想!我添加了来自本地 VLC 播放器的屏幕截图,显示了我在添加无效(在本例中为空)字幕文件时收到的错误消息。那个时候玩家已经在玩了。如您所见,它不仅忽略了显示字幕,而且还给了我一个错误。你认为 VLC 在运行时解析文件吗?这意味着我必须自己做同样的事情:(
  • LibVLC 与 VLC 的不同之处在于我可以说的差不多。
  • 我已经对此进行了更多测试,我看到的关于无效字幕文件的唯一内容是本地 VLC 日志中尝试解析文件时的一条消息 - 这只发生在视频实际播放,而不是设置文件时。不幸的是,没有错误返回 Java 层。
  • 在您设置字幕文件并获得某种反馈后,可能会显式强制解析媒体,如果我能找到方法,我会更新我的答案。
  • 非常感谢您的努力!很好奇结果如何
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 1970-01-01
  • 2018-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多