T
Twister21
Gast
Hallo,
ich möchte das Audio von einem an meinem Raspberry Pi angeschlossenen Mikrofon live über einen Java HTTP-Server an einen Webbrowser streamen, der auf diesen Server zugreift.
Dazu wäre es sicherlich sinnvoller das UDP-Protokoll zu nutzen, um die Datenübertragung schnell zu ermöglichen. Jedoch habe ich mich damit noch nicht wirklich auseinandergesetzt, weshalb mein derzeitiger Ansatz auf dem TCP-Protokoll basiert. Jedoch scheint der derzeitige Ansatz nicht wirklich sinnvoll zu sein.
Ich habe dazu folgende Klasse:
Leider erscheint beim Aufrufen der URL zwar ein Element zum Abspielen einer Audio-Datei, jedoch kann der Play-Button nicht angeklickt werden. Edge zeigt zudem auch an, dass der Audiodateityp nicht unterstützt wird. Der Java-Server gibt in der Konsole "java.net.SocketException: Broken pipe" aus.
Wie kann ich weiter vorgehen bzw. muss ich meinen Ansatz überarbeiten?
ich möchte das Audio von einem an meinem Raspberry Pi angeschlossenen Mikrofon live über einen Java HTTP-Server an einen Webbrowser streamen, der auf diesen Server zugreift.
Dazu wäre es sicherlich sinnvoller das UDP-Protokoll zu nutzen, um die Datenübertragung schnell zu ermöglichen. Jedoch habe ich mich damit noch nicht wirklich auseinandergesetzt, weshalb mein derzeitiger Ansatz auf dem TCP-Protokoll basiert. Jedoch scheint der derzeitige Ansatz nicht wirklich sinnvoll zu sein.
Ich habe dazu folgende Klasse:
Code:
private Socket client;
private DataOutputStream output;
private TargetDataLine microphone;
public HTTPServer(Socket client, TargetDataLine microphone) {
this.client = client;
this.microphone = microphone;
}
public void run() {
try {
System.out.println("The Client " + client.getInetAddress() + ":" + client.getPort() + " is connected");
output = new DataOutputStream(client.getOutputStream());
sendResponse();
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendResponse() throws Exception {
String statusLine = "HTTP/1.1 200 OK\r\n";
String serverDetails = "Server: HTTP-Server\r\n";
String contentTypeLine = "Content-Type: audio/mpeg\r\n";
String contentLengthLine = "Content-Length: " + microphone.getBufferSize() + "\r\n";
output.writeBytes(statusLine);
output.writeBytes(serverDetails);
output.writeBytes(contentTypeLine);
output.writeBytes(contentLengthLine);
output.writeBytes("\r\n");
int numBytesRead;
int bufferSize = microphone.getBufferSize() / 5;
bufferSize += 512;
microphone.open();
microphone.start();
byte[] targetData = new byte[bufferSize];
while (true) {
numBytesRead = microphone.read(targetData, 0, targetData.length);
if (numBytesRead == -1) break;
output.write(targetData, 0, numBytesRead);
}
}
Leider erscheint beim Aufrufen der URL zwar ein Element zum Abspielen einer Audio-Datei, jedoch kann der Play-Button nicht angeklickt werden. Edge zeigt zudem auch an, dass der Audiodateityp nicht unterstützt wird. Der Java-Server gibt in der Konsole "java.net.SocketException: Broken pipe" aus.
Wie kann ich weiter vorgehen bzw. muss ich meinen Ansatz überarbeiten?