JAVA - JLayer - 来自SHOUTcast的吱吱声和一些不稳定的声音

时间:2014-08-06 01:32:49

标签: java shoutcast

我在Java中创建了一个快速应用程序,看看我是否能够连接到我的SHOUTcast并从中流式传输,并使用以下代码:

import java.io.BufferedInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.URL;

import javax.swing.JFrame;

import javazoom.jl.player.Player;

public class Start {

    public static void main(String[] args){

         JFrame window = new JFrame();
         window.setVisible(true);
         window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        try {
             URL url=new URL("http://devllama.pwnz.org:88");
             Socket socket=new Socket(url.getHost(), url.getPort());
             OutputStream os=socket.getOutputStream();
             String user_agent = "BrennynSabar/0.5";
             String req="GET / HTTP/1.0\r\nuser-agent: "+user_agent+"\r\nIcy-MetaData: 1\r\nConnection: keep-alive\r\n\r\n";
             os.write(req.getBytes());
             InputStream is=socket.getInputStream();
             BufferedInputStream bis = new BufferedInputStream(is);
             Player player = new Player(bis);
             player.play();
        } 
        catch (Exception e){
             e.printStackTrace();
        }

    }

}

它连接和播放,音频听起来相当不错,但是在后台发出随机的吱吱声,我知道它不是SHOUTcast服务器,因为你可以使用VLC或其他东西进行连接,它不会在那里。也有一段时间,这首歌变得不稳定,但我很确定它是我的联系。任何帮助都会很棒,谢谢。

1 个答案:

答案 0 :(得分:1)

shoutcast流的可选部分是周期性元数据块。

在伪造的HTTP连接开始时,有一些标题,这些代码当前正作为MP3数据传递。

其中一个标题可能是标题" icy-metaint"设置为N,其中N是每个元数据块之间的字节数。如果标题丢失,则元数据块不存在。元数据块的第一个字节包含16个字节的元数据增量的长度(例如:1表示16个字节的元数据)。然后,如果元数据没有达到偶数16个字节,则在其末尾填充空值。

您的MP3解码器正在将这些元数据块作为MP3数据读取,并且显示为blips。