java - VLCJ 无法在客户端使用 http 打开音频流

标签 java http audio streaming vlcj

我正在使用 VLCJ 在服务器和客户端之间进行音频流传输。 服务器端已全部设置为一旦运行我就可以通过使用 vlc 本身打开流并且我能够收听我在服务器上选择的任何文件。 但是,在客户端,我正在执行以下操作:

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 地址的 MRL (http://127.0.0.1 :5555).

Here , 它显示了客户端如何打开流的示例。

对我做错了什么有任何猜测吗?以及解决方法?

提前致谢!

最佳答案

您使用的 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。

关于java - VLCJ 无法在客户端使用 http 打开音频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26265865/

相关文章:

java - 不可序列化异常,即使所有字段都是可序列化的

java - 如何构建 JPA 2.0 查询

http - 如何将裸域 "example.com"重定向到 "https://example.com"?

java - 声音将在 Eclipse 中播放,但不会在导出的 jar 文件中播放

javascript - 音频范围音量 slider Javascript/HTML5

java - Junit 中的参数化

java - 为什么我会收到 ClassCastException

JSON API 错误 - 您需要使用容量为 'edit_posts' 的用户登录

http - 在 Rest 集合中分页

ios - 在 spritekit swift 中触摸节点时不播放声音