Recentemente abbiamo ricevuto segnalazioni di audio non riprodotte nelle nostre app Android, sul Samsung Galaxy S4. L'app va bene su altri dispositivi.Problema di socket Android su Samsung Galaxy S4 (SGS4)
L'audio viene trasmesso tramite MediaPlayer. Viene salvato localmente utilizzando il metodo Android Socket.
L'avvertimento nella Logcat è causata da:
try {
byte[] buffer = httpString.toString().getBytes();
int readBytes = -1;
Log.d(LOG_TAG, "writing to client");
client.getOutputStream().write(buffer, 0, buffer.length);
// Start streaming content.
byte[] buff = new byte[1024 * 64];
while (isRunning && (readBytes = data.read(buff, 0, buff.length)) != -1) {
client.getOutputStream().write(buff, 0, readBytes);
}
}
L'analisi dello stack è il seguente:
D/StreamProxy(3913): downloaded
D/StreamProxy(3913): downloading...
D/StreamProxy(3913): reading headers
D/StreamProxy(3913): headers done HTTP/1.0 200 OK
D/StreamProxy(3913): Content-Type: audio/mpeg
D/StreamProxy(3913):
D/StreamProxy(3913): writing to client
W/StreamProxy(3913): Broken pipe.
W/StreamProxy(3913): java.net.SocketException: sendto failed: EPIPE (Broken pipe)
W/StreamProxy(3913): at libcore.io.IoBridge.maybeThrowAfterSendto(IoBridge.java:506)
W/StreamProxy(3913): at libcore.io.IoBridge.sendto(IoBridge.java:475)
W/StreamProxy(3913): at java.net.PlainSocketImpl.write(PlainSocketImpl.java:507)
W/StreamProxy(3913): at java.net.PlainSocketImpl.access$100(PlainSocketImpl.java:46)
W/StreamProxy(3913): at java.net.PlainSocketImpl$PlainSocketOutputStream.write(PlainSocketImpl.java:269)
W/StreamProxy(3913): at com.gm.mobile.util.StreamProxy.processRequest(StreamProxy.java:234)
W/StreamProxy(3913): at com.gm.mobile.util.StreamProxy.run(StreamProxy.java:123)
W/StreamProxy(3913): at java.lang.Thread.run(Thread.java:856)
W/StreamProxy(3913): Caused by: libcore.io.ErrnoException: sendto failed: EPIPE (Broken pipe)
W/StreamProxy(3913): at libcore.io.Posix.sendtoBytes(Native Method)
W/StreamProxy(3913): at libcore.io.Posix.sendto(Posix.java:151)
W/StreamProxy(3913): at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:177)
W/StreamProxy(3913): at libcore.io.IoBridge.sendto(IoBridge.java:473)
W/StreamProxy(3913): ... 6 more
E/(3913): client closing
D/StreamProxy(3913): Proxy interrupted. Shutting down.
Il flusso viene riprodotto quando io commento il codice proxy, tuttavia, inizia a suonare per un secondo, quindi avvia il buffering per 2-3 secondi, prima di riprendere.
Qualsiasi soluzione sarebbe molto accettata.
ho trovato problemi simili, ma non sono stati risolti:
- Android : Socket - java.net.SocketException: sendto failed: EPIPE (Broken pipe)
- Media Player socket exception in Samsung Grand
Ho riscontrato lo stesso problema. Nessuna soluzione ancora :( – Nick
Almeno io non sono l'unico. Ne hai ancora di più? Tutto ciò che puoi condividere per risolvere il problema? – SteveEdson
Purtroppo no. Non ho nemmeno un S4 da testare su Ho visto questo su alcuni altri dispositivi oltre a S4, ma non sono stato in grado di individuare il problema. Aggiornerò qui se trovo qualcosa. – Nick