2012-07-16 72 views
4

我一直在追蹤這個偉大的網站多年。今天我終於決定在遇到問題時創建一個帳戶。vlcj mlr特殊字符

我的問題是相當基本的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。

  • 我也試了一下沒有「文件:///」在它的面前,這並不功能改變任何事情,除非我殺程序,然後我得到一個「libdvdread」錯誤消息,例如:

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

因此,爲了使問題短暫的甜蜜:我如何提供正確的「MRL」,使vlcj打我的「é.mp3」。和/或哪些MediaOptions需要解析正確的編碼(我假設我的錯誤是在這裏?)

搶先抱歉不提供一個SSCCE,我不認爲這將是相關的。 謝謝你的時間。

+0

如果你只是運行'file:/// C:\\é。mp3'直接從VLC媒體播放器,而不是你的VLCJ應用程序,它的工作?如果是這樣,那麼嘗試在文件路徑上執行URI/URL編碼,然後將其傳遞給VLCJ的playMedia() – 2012-07-17 06:31:16

+0

我忘了提及(derp。),直接從VLC或從Winamp運行正確執行文件。重命名它,然後運行它。所以我認爲它與字符串編碼有關。 今晚晚些時候我有時間回到這個項目時,我會試試看。謝謝。 – 2012-07-18 13:31:47

+0

我嘗試過使用latin1,UTF-8,UTF-16,Windows-1252和us-ascii對其進行編碼的各種設置。到目前爲止,我還沒有取得成功。我注意到,在使用us-ascii編碼時,該值會變爲類似值,該值是從'libdvdread'錯誤解析器返回的。 – 2012-07-20 08:50:30

回答

0

經過一段插曲後,我終於發現出了什麼問題。值得一提的是,在windows下國際角色並沒有很好地解析成VLCJ。通過添加:

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

我的ANT運行腳本,我突然可以播放文件與電子急性。顯然,JVM的解碼器在初始化時已完成。

希望這可以幫助別人:-)

+0

我在這個完全相同的問題,感謝分享!但是,在我的運行配置中添加此arg對我不起作用,如果文件路徑中存在e-acute,則仍不會播放視頻或生成縮略圖。如果我添加一個「%」(我知道它不應該是,但它是允許的,所以它會發生),事件最糟糕的是,由於VLC發生致命錯誤,JVM完全崩潰。你有沒有找到一種方法來使這個工作?提前致謝。 – 2012-08-14 07:02:16

+0

添加爲我工作的參數(儘管我不得不重寫使用靜態字符串的程序的另一部分?)。 添加了參數後,我可以將我的'play'腳本截短爲: EmbeddedMediaPlayerComponent mediaPlayerComponent;/*在運行時已經初始化了*/ mediaPlayerComponent.getMediaPlayer()。playMedia((String)trackFile); 雖然我只是想用這個腳本播放mp3。所以我不知道預覽或類似的東西。希望這可以幫助! – 2012-08-14 15:06:17

+0

補充: 此外,如果我記得正確的話,一個百分號需要在utf-8中轉義:-) 快速谷歌帶我到這個wiki頁面:http://en.wikipedia.org/wiki/Percent-編碼 我認爲'%'符號可能會嘗試解析爲段落中定義的一個字符:'百分比編碼保留字符'。但我不確定。祝你好運! – 2012-08-14 15:12:20

0

這是透明的vlcj 2.4.0起通過檢測包含Unicode字符的文件名當地和轉換那些文件名以百分比編碼文件的URL處理。

因此,使用當前版本的vlcj,您應該能夠簡單地將包含國際字符的文件名直接傳遞給mediaPlayer.playMedia(...)。

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); 
} 

我這可以幫助任何人:)