Я сделал быстрое приложение на 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 или что-то еще, и он не будет там. Также время от времени песня становится нестабильной, но я уверен, что ее связь. Любая помощь будет потрясающей, спасибо.
Необязательная часть потока shoutcast - это периодические блоки метаданных.
В начале поддельного HTTP-соединения есть заголовки, которые этот код в настоящее время передается как данные MP3.
Один из этих заголовков может быть заголовком "ледяной меткой", установленным в N, где N - количество байтов между каждым блоком метаданных. Если заголовок отсутствует, то блоков метаданных нет. Первый байт блока метаданных содержит длину с шагом в 16 байт метаданных (например: 1 означает 16 байтов метаданных). Затем метаданные заполняются нулями в конце, если они не выходят на четные 16 байт.
Ваш MP3-декодер считывает эти блоки метаданных в виде MP3-данных, и он выдается в виде сообщений.