使用 javax.media.Player 与 javazoom.jl.player.Player 播放无线电流

Playing radiostreams using javax.media.Player vs. javazoom.jl.player.Player

我刚开始使用 Java 播放音频。我已经编写了播放一些无线电流的代码。 我发现有一些像 http://fm939.wnyc.org/wnycfm 这样的流 url。这没有端口号并包含斜线。我只能用 javax.media.Player.

播放这种类型的 url

还有其他流式传输 url 带有端口号且没有斜线。例如,我有一个 url 国家 Public 电台 140.254.23.68:8000。我可以用 javazoom.jl.player.Player 播放这些类型的 url 因为这个播放器需要一个 url 字符串和一个端口号。

谁能告诉我更多关于流的类型以及如何正确使用上述播放器的信息。例如,是否可以使用 javazoom.jl.player.Player 播放流 http://fm939.wnyc.org/wnycfm ?如果是这样,如何? 任何帮助将不胜感激。

附录:

抱歉,我不是说 javazoom Player 接受 url。我正在使用以下代码片段创建一个 javazoom 播放器。从代码中可以看出,我正在使用 SocketFactory createSocket 方法来创建连接。 createSocket 方法采用 url 和端口。我想知道如何像 http://fm939.wnyc.org/wnycfm 一样播放 url,换句话说,没有明确端口号的 url。

查看下面的代码片段-

response = null;
try {
    SocketFactory sf = SocketFactory.getDefault();
    connection = sf.createSocket(url,port);
    request = "GET / HTTP/1.1\n\n";
    outputStream = connection.getOutputStream();
    if(outputStream!=null) {
    outputStream.flush();
    byte[] b = null;
    try {b = request.getBytes(StandardCharsets.US_ASCII);}
    catch(NullPointerException npe) {..}

    if(b != null) {
    outputStream.write(b);
    outputStream.flush();
    response = connection.getInputStream();
    }
} catch (IOException e) {e.printStackTrace();}

javazoom.jl.player.Player zoomPlayer = null;
if(response!=null) {
    try {zoomPlayer = new javazoom.jl.player.Player(response);
    } catch (JavaLayerException e) {e.printStackTrace();}
}
return zoomPlayer;

"A URL can optionally specify a "端口"".

所以你可以设置端口。

我没看到 javazoom.jl.player.Player 在哪里使用 url - 可能是更新的版本。

但无论如何请参阅 URL 的文档。其中一位构造者说

URL(String protocol, String host, int port, String file, URLStreamHandler handler)

Creates a URL object from the specified protocol, host, port number, file, and handler.

jmf播放器算比较稳定的。并记录在案。

javazoom.jl.player.Player是一行。

--

事实上,我可以使用常规 javax.sound 程序播放两个流。

--

获取url流的方法是这样的:

  String u="http://140.254.23.68:8000";
  URL url=new URL(u);
  URLConnection uc = new URL(u).openConnection();
  InputStream is=(InputStream)uc.getInputStream();