4

多年来,我一直在跟踪这个伟大的网站。今天,当我遇到问题时,我终于决定创建一个帐户。

我的问题是相当基本的 vlcj 执行。我有一个作为音频播放器运行的程序。这一切都完成了,除了一个我似乎无法弄清楚的问题。

当有人试图在文件路径中播放带有“é”(带有锐音的 e)的歌曲时,它似乎将错误地转换为 vlcj 的系统。

示例:我运行:

mediaPlayerComponent.getMediaPlayer().playMedia("file:///C:\\test.mp3");
  //(where mediaPlayerComponentis my is my local instantiated 
  // EmbeddedMediaPlayerComponent) 

这玩得很好。但是如果我运行:

mediaPlayerComponent.getMediaPlayer().playMedia("file:///C:\\é.mp3");

它不运行任何东西。

  • 如果我调用 startMedia 而不是 playMedia,则布尔返回值为 false。

  • 我还尝试了它前面没有'file:///',这在功能上没有改变,除非我杀死程序,然后我得到一个'libdvdread'错误消息,例如:

    libdvdread: Could not open C:\?.mp3 with libdvdcss.
    

所以为了让这个问题简短而有趣:我如何提供正确的“mrl”来让 vlcj 播放我的“é.mp3”。和/或需要哪些 MediaOptions 来解析正确的编码(我假设我的错误在这里?)

很抱歉没有提供 SSCCE,我认为这无关紧要。感谢您的时间。

4

3 回答 3

0

经过一段插曲后,我终于发现出了什么问题。显然,在 Windows 下,国际字符并没有真正很好地解析为 VLCJ。通过增加:

<jvmarg value="-Dvlcj.log=DEBUG>

对于我的 ANT 运行脚本,我突然可以用 e-acute 播放文件。显然,JVM 的解码器在初始化时已完成。

希望这可以帮助某人:-)

于 2012-08-08T09:31:50.797 回答
0

这在 vlcj 2.4.0 及更高版本中通过检测包含 Unicode 字符的本地文件名并将这些文件名转换为百分比编码的文件 URL 来透明地处理。

因此,使用当前版本的 vlcj,您应该能够简单地将包含国际字符的文件名直接传递给 mediaPlayer.playMedia(...)。

于 2013-08-01T17:15:16.637 回答
0

我在这里找到了解决方案:

https://github.com/caprica/vlcj/issues/415

这适用于我在 mac 和 windows (vlcj-3.7.0) 上:

  public void play(String mrlPathFile) {
    // URI encode for avoid non ascii character problem in windows!!!
    mrlPathFile = new File(mrlPathFile).toURI().toASCIIString().replace("file:/", "file:///");
    mediaPlayer.playMedia(mrlPathFile);
}

我这可以帮助任何人:)

于 2016-03-23T09:04:00.973 回答