Audio-Stream-Pufferung
Ich muss spielen, live-audio-stream, eigentlich ist es radio. Das problem ist, dass ich auch verwalten müssen 20 Minuten Puffer für streaming. Soweit ich das verstanden habe ist es nicht einfach zu implementieren mit android.
Erstens habe ich überprüft, MediaPlayer, aber es bietet keine Methoden für die Puffer-Verwaltung. In der Tat, die Sie selbst nicht festlegen können, Puffergröße direkt.
Zweitens habe ich versucht zu verwalten-Puffer mit lokalen Dateien: progressiv laden Sie den stream einer temporäre Dateien und wechseln Sie. Aber wenn Sie wechseln möchten, um folgende Datei (ändern datasource im MediaPlayer), audio ist nicht kontinuierlich abgespielt. Sie hören kurze Unterbrechungen.
Die Letzte Idee ist, verwenden Sie die Streaming-proxy. In der Regel ist es verwendet für das Abspielen von streams in Android-Versionen unter 8. In-stream-proxy, die Sie erstellen ServerSocket, Lesen von audio-stream-und write to player. Also eigentlich kann ich das verwalten der Pufferung gibt. Ich kann cache-stream und schreiben MediaPlayer, was ich will. Aber. Es funktioniert nicht mit Android-8.
Bekam ich exception: Connection reset by peer java.net.SocketException: Connection reset by peer. MediaPlayer 8 will sich nicht zum Lesen von Daten aus der Buchse.
Daher habe ich zwei Fragen:
1) Welche andere Art und Weise zu implementieren stream buffering?
2) wie man sich StreamProxy für 8 android?
Alle Ideen sind willkommen.
Dank
InformationsquelleAutor der Frage Eugenious | 2010-12-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich benutze den gleichen StreamProxy, dass Jungs verwendet für NPR Projekt - https://code.google.com/p/npr-android-app/source/browse/Npr/src/org/npr/android/news/StreamProxy.java
So wird es original audio stream:
Und schreibt aus diesem stream zum client-socket:
(Sie können ganze code aus dem link oben.)
Und schließlich, wie Sie initialisieren der Spieler (PlaybackService):
So dass Sie überprüfen SDK-version. Aber wenn ich das weglasse überprüfen und proxy verwenden für SDK-8 als auch ich eine Ausnahme.
Es ist seltsam, dass der MediaPlayer gar nicht zu Lesen versuchen den stream:
Es scheint, dass der MediaPlayer wurde cleverer. Und Wenn ich passieren solche url
"http://127.0.0.1:%d/%s"
es will nicht nur bytes, sondern "voll" http-Antwort.Außerdem Frage ich mich, ob es andere Wege implementieren Pufferung? Wie ich weiß, der MediaPlayer verbraucht nur Dateien und urls.
Lösung mit Dateien funktioniert nicht. Also ich benutze socket für stream-übertragung.
Dank
InformationsquelleAutor der Antwort Eugenious
Ich habe gerade getestet, das folgende Update, und es funktioniert. Dieses Problem wird verursacht, durch die "\n" verwendet, in der die Header in der
processRequest()
Methode derStreamProxy
. Ändern Sie diese zu "\r\n" sollte der Fehler Weg gehen.Als für die Umsetzung custom-streaming, ich habe dies in der Vergangenheit, obwohl es scheint vor allem für unendlich streaming-radio. http://blog.pocketjourney.com/2009/12/27/android-streaming-mediaplayer-tutorial-updated-to-v1-5-cupcake/
InformationsquelleAutor der Antwort brack
Wenn Sie suchen oder überspringen oder die Verbindung verloren und MediaPlayer hält Sie sich wieder mit dem proxy-server, müssen Sie senden Sie diese Antwort mit Status 206 nachdem Sie die Anfrage und Auswahl(int) vom client.
Und wenn Sie eine Anfrage erhalten von MediaPlayer, die nicht enthalten-Bereich in den HTTP-header , dann ist es ersuchenden eine neue stream-Datei, in diesem Fall deine Antwort-header sollte dann so Aussehen:
Genießen!
InformationsquelleAutor der Antwort user1995726
Den Mediaplayer aus dem SDK 8 nicht in der Lage wäre zu Lesen, dass ein proxy-url. Aber basierend auf meine aktuelle Arbeit, das unterscheidet sich von Gerät zu Gerät. In meinem Samsung ACE (SDK 8) die proxy-Verbindung funktioniert einwandfrei, aber bei meinem HTC Incredible S, die proxy-Verbindung geben würde, die das gleiche Problem wie Sie haben. Eine direkte Verbindung zu den audio-stream funktioniert gut, aber das verursacht Ausschläge und boops bei einigen Geräten wie EVO auf sprint.
Hast du eine Lösung für dieses Problem? Wie sind Sie damit umgegangen?
Hari
InformationsquelleAutor der Antwort HariKJ
Ich begreife diese Frage ist wie 5 Jahre alt, aber bei einigen anderen ist Wanderns: ExoPlayer ist die Bibliothek von Google, die Ihnen viel mehr Kontrolle über Optionen wie die Puffer-Größe.
Hier ist ein kleines Projekt, das ich erstellt um zu erfahren, wie es zu benutzen.
https://github.com/feresr/MyMediaPlayer
http://developer.android.com/guide/topics/media/exoplayer.html
https://github.com/google/ExoPlayer
InformationsquelleAutor der Antwort feresr