Ich schreibe eine Anwendung, um Audio vom Remote-Server abzuspielen. Ich habe verschiedene Möglichkeiten versucht, Streaming-Audio zu implementieren, aber alle sind nicht gut genug für mich. Das habe ich versucht:
Etwas wie:
%Vor% (oder prepareAsync
, egal)
Aber der Standard MediaPlayer
ist ziemlich instabil beim Abspielen von Remote-Inhalten. Es fällt oft ab oder stoppt die Wiedergabe und ich kann das nicht verarbeiten. Auf der anderen Seite möchte ich Media Caching implementieren. Aber ich habe keine Möglichkeit gefunden, gepufferten Inhalt vom MediaPlayer zu bekommen, um ihn irgendwo auf dem Gerät zu speichern.
Dann kam die Idee, Mediendateien per Chunk herunterzuladen, sie zu einer lokalen Datei zu kombinieren und diese Datei abzuspielen. Das Herunterladen der gesamten Datei kann aufgrund schlechter Verbindung langsam sein, daher ist es in Ordnung, zunächst genug Stück herunterzuladen, dann die Wiedergabe zu starten und das Herunterladen und Anhängen der lokalen Datei fortzusetzen. Außerdem erhalten wir Caching-Funktionalität.
Klingt wie ein Plan, aber es hat nicht immer funktioniert. Es funktioniert perfekt auf HTC Sensation XE, aber nicht auf 4.1 Tablet-Wiedergabe gestoppt nach Abschluss dieses ersten Stück. Weiß nicht, warum ist das so. Ich habe question dazu gefragt, aber erhielt keine Antworten.
Ich habe zwei MediaPlayer-Instanzen erstellt und versucht, sie gegenseitig zu ändern. Die Logik folgt:
Die Quelle:
%Vor%Wieder - klingt wie ein Plan, funktioniert aber nicht perfekt. Die Momente des Wechselns von MediaPlayern sind durchaus hörbar. Hier habe ich entgegengesetzte Situation: auf 4.1 Tablet ist es ok, aber auf dem HTC Sensation gibt es deutliche Verzögerungen.
Ich habe auch versucht, verschiedene Download-Techniken zu implementieren. Ich habe Download von 10Kb Chunks und von MP3-Frames implementiert. Ich weiß es nicht genau, aber es scheint, dass im Falle von MP3-Frames suchen und besser arbeiten. Aber es ist nur ein Gefühl, ich weiß keine Erklärung.
Ich habe dieses Wort beim googlen mehrmals gesehen und diese Implementierung gefunden: Ссылка
Es ist eine Lösung, die jeder benutzt?
Wenn ja, ist es traurig, weil es auch nicht gut für mich ist. Und ich sehe keine neuen Ideen in der Implementierung.
Wie implementiert ihr Audio Streaming in euren Anwendungen? Ich glaube nicht, dass ich die einzige Person bin, die solche Probleme hatte. Es sollte einige gute Praktiken geben.
In meinem Fall verwende ich FFMPEG mit OpenSL ES. Der Nachteil ist Komplexität. Sie müssen mit vielen Dingen vertraut sein: JNI, OpenSL, FFMPEG. Es ist auch schwer zu debuggen (im Vergleich mit reinem Java Android App). In Ihrem Fall empfehle ich Ihnen, die Medien-API zu testen. Das einzige ist der Mangel an Beispielen. Aber es gibt ein unit test zeigt an, wie Sie mit Audio umgehen können (Sie müssen InputStream
reference ändern - Zeile 82).
Tags und Links android android-mediaplayer streaming