2014-10-08 107 views
2

我正在使用VLCJ在服务器和客户端之间进行音频流传输。 服务器端全部设置为一旦运行,我可以通过使用vlc本身打开流,并且可以监听我在服务器上选择的任何文件。 然而,在客户端,我做了以下内容:VLCJ无法在客户端使用http打开音频流

String url = "http://127.0.0.1:5555"; 
MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory(); 
HeadlessMediaPlayer mediaPlayer = mediaPlayerFactory.newHeadlessMediaPlayer(); 
mediaPlayer.startMedia(url); 

但没有得到任何声音都没有。如果我在终端中运行vlc http://127.0.0.1:5555,它将打开vlc并播放服务器正在流式传输的音乐曲目,没有任何问题。

最近,我发现问题是与路径。通过使用System.out.println(mediaPlayer.mrl());它表明它正在打开 file:///home/user/workspace/audioProject/http%3A//127.0.0.1%3A5555而不是直接从HTTP地址(http://127.0.0.1:5555)的MRL。

Here,它示出了如何客户机打开一个流的示例。

任何猜测我做错了什么?并解决它?

提前致谢!

+0

我正在使用VLCJ 2.1.0。这里是日志: vlcj:(Info.java:103)| INFO | vlcj:2.1.0 vlcj:(Info.java:104)| INFO | java:1.8.0_20 Oracle Corporation vlcj:(DefaultMediaPlayer.java:1638)| DEBUG | setMedia(media = http://127.0.0.1:5555,mediaOptions = []) vlcj:(DefaultMediaPlayer.java:1796)| DEBUG | mediaChanged(媒体播放器= uk.co.caprica.vlcj.player.headless.DefaultHeadlessMediaPlayer @ 17ee8022,媒体=原生@ 0x7f556c369fb0,MRL =文件:///home/plut/eclipseWorkspace/audioSNMP/http%3A//127.0.0.1% 3A5555) – vascoelho 2014-10-09 13:01:38

回答

0

您使用的VLC版本与您正在使用的vlcj版本不兼容。

有两种方法在LibVLC设置媒体,一个是用于设置“本地”文件的媒体,而另一种是“地利” - 本质上是一个URL:

libvlc_media_new_location(instance, media); 
libvlc_media_new_path(instance, media); 

在早期版本的VLC的,只需使用这些功能之一即可设置媒体是否是基于本地文件的媒体或URL。该功能libvlc_media_new_path适用于两种类型的媒体。

这改变了最近版本的VLC(我不记得具体是哪个版本)。

在那个时候,因为在VLC这种变化,vlcj改为猜测的媒体(文件或URL)的类型并调用相应LibVLC功能。

因此,解决方案是使用兼容版本的VLC/vlcj。

在vlcj的变化是2.2.0版本,当然,我会建议你使用最新版本的vlcj的其中在写作时是3.0.1。

+0

我将VLCJ更新到了3.0.1,现在它完美运行。非常感谢!! – vascoelho 2014-10-09 17:24:19