我在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或其他东西进行连接,它不会在那里。也有一段时间,这首歌变得不稳定,但我很确定它是我的联系。任何帮助都会很棒,谢谢。
答案 0 :(得分:1)
shoutcast流的可选部分是周期性元数据块。
在伪造的HTTP连接开始时,有一些标题,这些代码当前正作为MP3数据传递。
其中一个标题可能是标题" icy-metaint"设置为N,其中N是每个元数据块之间的字节数。如果标题丢失,则元数据块不存在。元数据块的第一个字节包含16个字节的元数据增量的长度(例如:1表示16个字节的元数据)。然后,如果元数据没有达到偶数16个字节,则在其末尾填充空值。
您的MP3解码器正在将这些元数据块作为MP3数据读取,并且显示为blips。