Problem mit MediaPlayer-buffering Zeit, als audio-streaming
Ich bin mit MediaPlayer
zum streamen von radio-über-HTTP. Auf Lollipop mein stream dauert etwa eine minute, um zu starten, was nicht hinnehmbar ist. Es dauert etwa 20 Sekunden auf Kitkat, das ist schon ein Schmerz, aber jetzt unbrauchbar geworden ist.
Es ist ein bekanntes problem mit dieser Komponente bezogen auf die Pufferung: die Anzahl von bytes im Puffer ist harcoded und kann nicht verändert werden.
Mein code ist wirklich standard
player.reset();
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setDataSource(streamUrl);
player.prepareAsync();
Und auf vorbereitete ich tun
player.start();
Ich habe gehört, über alternativen wie GStreamer
, aber ich konnte nicht damit es funktioniert auf Windows.
Ich Frage mich, wenn jemand eine funktionierende Lösung zum streamen von radio über HTTP mit einem anständigen start-Verzögerung.
BEARBEITEN
Getestet habe ich ExoPlayer, sondern die unteren beginnen Zeit ich bekomme, ist 15 Sekunden. Der player ist fest auf "vorbereiten" - Zustand (keine Pufferung, dass die später, so weit ich sehe).
BEARBEITEN
Das format der stream ist AAC
BEARBEITEN
Getestet habe ich https://code.google.com/p/aacdecoder-android/ aber das einzige problem, das diese Bibliothek ist die fehlende Unterstützung für stream-pause. Es ist eine Anforderung, dass meine Bewerbung zur Unterstützung von pause auf online stream.
es verwendet 32 kbps. Ich weiß, dies würde sich verbessern mit einer höheren bitrate, aber scheint nicht, wie eine echte Lösung
Was das format der audio-Sie spielen, AAC?
ja, AAC.
Ist eine web-api eine option?
InformationsquelleAutor StackOverflower | 2015-04-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihr Anwendungsfall ist kompatibel mit der GPL/LGPL-Lizenzen, dann VLC sollte genau das sein, was Sie brauchen. VLC ist in der Lage, Strom aus Ihrer URL auf ein 3G-Netz mit nur ~1 Sek Verzögerung.
Schritt 1:
Download VLC-Quellcode und kompilieren pro die Anleitung
Schritt 2:
Die wichtigste Klasse ist
org.videolan.vlc.audio.AudioServiceController
, was genannt wurde ausorg.videolan.vlc.gui.MRLPanelFragement.processUri() --> org.videolan.vlc.util.Util.openStream(Context, String) --> AudioServiceController.load(String, boolean)
. Sie können entfernen Sie alle unnötigen anderer code alsAudioServiceController
und die Unterstützung der Klassen, die zu einer Verschlankung der Größekai VLC-player haben wir die option zum ausführen des pause-live-streaming. können Sie pl. klären
wissen Sie, wenn es ein funktionierendes Beispiel mit android studio? Ich bin mir nicht sicher, ob ich Zeit zum testen dieser Lösung, bevor Sie das Kopfgeld zwingt mich, einen Gewinner auszuwählen. Als shri sagte, es ist zwingend erforderlich, um eine Lösung zu unterstützen pause.
können Sie klären, welches Verhalten wünschen Sie sich von dem anhalten des live-stream? Meinst du, ich kann pause einen live-stream für x Sekunden, und die Spieler sollten Puffer und spielen es zurück, wenn ich erneut auf play drücken?
Es gerade getestet und es unterstützt pause, wie beschrieben, ein bisschen überrascht. Ich weiß nicht, ob die Länge dieses Puffers eingestellt werden kann oder nicht obwohl.
InformationsquelleAutor Kai
Kann ich empfehlen Umstieg von MediaPlayer ExoPlayer. Mit ExoPlayer ist möglich, setup-Pufferung params wie folgt:
minBufferMS bedeutet eine Mindestdauer von Daten müssen zwischengespeichert werden, damit eine Wiedergabe starten oder fortsetzen nach einer Benutzeraktion, wie eine sucht.
minRebufferMs bedeutet eine Mindestdauer von Daten müssen zwischengespeichert werden, für die Wiedergabe fortsetzen, nachdem ein Spieler aufgerufen rebuffer (d.h. eine rebuffer das geschieht durch Puffer aufgebraucht, und nicht durch eine Benutzeraktion: starten Sie die Wiedergabe oder Spulen).
Standard Werte sind 500 und 5000, jeweils.
Hier ist eine demo-app von ExoPlayer, wo man leicht testen Pufferung status github.com/google/ExoPlayer/tree/master/demo
Danke, werde ich testen. In jedem Fall Wünsche ich Ihnen irgendwelche authorative Quelle, die besagt, dass ExoPlayer behebt dieses problem. Ich war nach diesem Thema auf google play und niemand jemals erwähnt ExoPlayer. Ich werde es herausfinden, aber trotzdem 🙂
"Ich war nach diesem Thema auf google play -" ich wollte sagen, "war ich nach diesem Thema auf google-CODE" (den ich eingefügt, ein link oben)
Getestet habe ich ExoPlayer, sondern die unteren beginnen Zeit ich bekomme, ist 15 Sekunden. Der player ist fest auf "vorbereiten" - Zustand (keine Pufferung, dass die später, so weit ich sehe). Ich würde sagen, dass ist der Grund, warum ich nicht vorab mit diesem player, wenn ich es getestet habe vor einigen Monaten: damals war es keine Verbesserung im Vergleich zu dem, was ich hatte
InformationsquelleAutor Dekra
Sollten Sie vermeiden-media-player für live-radio-streams.
Benutzt habe ich die folgenden Bibliotheken und es funktioniert Super: https://code.google.com/p/aacdecoder-android/
Wir haben bemerkt, Probleme mit media player auf ganz wenige Geräte. Schwierige Fragen können-codec verwandt, aber mit der obigen Bibliothek schien zu funktionieren auf diesen Geräten.
Bojan gibt es eine Möglichkeit, konfigurieren Sie die " input buffer size in der acc decoder
Natürlich. Es gibt zwei Methoden, aacPlayer.setAudioBufferCapacityMs(343); aacPlayer.setDecodeBufferCapacityMs(3242); Note, die ich gerade eingegeben irgendeine dumme Werte
Danke für deine Antwort. Getestet habe ich diese Bibliothek vor einigen Monaten und ist perfekt, außer für eine Sache: es ist nicht erlaubt das pausieren des Streams, erlaubt nur stoppen. Leider macht dies einen Unterschied auf meine app
InformationsquelleAutor Bojan Kseneman
Es gibt 2 Arten von delay im streaming ein. ist die Pufferung Verzögerung, die Verzögerung beim starten und b. die broadcast-Verzögerung.
Im Fall der media player, der stream ist unter 1 minute Puffer. Also müssen wir zunächst sehen, wie die Zeit, die zum füllen der Puffer reduziert werden kann. Ich bin nicht sicher, ob das möglich ist, in den Media-player-code von Android konfigurieren der Puffergröße.
Jedoch, wenn wir versuchen, Sie zu nutzen AAC-decoder-Bibliothek für android (https://code.google.com/p/aacdecoder-android/downloads/detail?name=aacdecoder- android-0.8.zip), dann haben wir die Regelung zum füllen der input-buffer.
Pl. finden Sie das code-snippet unten, können Sie füllen Sie Ihre Eingangs-Puffer-Kapazität, basierend auf Ihren Anforderungen und dann können Sie starten Sie die Wiedergabe. Da wir die Kontrolle über die Eingangs-Puffer-Kapazität, die wir können versuchen, zu reduzieren die Zeit, die Verzögerung um die Wiedergabe zu starten. Pl. überprüfen Sie, ob diese Ihnen helfen kann.
Ok , mein Verständnis ist, die auf Echtzeit-streaming, die wir normalerweise nicht anhalten. Wenn wir eine Wiedergabe eines aufgezeichneten Inhalte dann anhalten der Inhalte erforderlich ist.
Ich Stimme zu, aber meine Anforderung ist anders. Ich muss zulassen pause über einen live-stream. Danke!
InformationsquelleAutor shri
poste ich wie ich es mache und Hacke es gibt einen Unterschied. es ist nicht ein Echtzeit-sound-Element ( es ist ein mp3 aus einem online-api, aber es ist etwa 4-6mb), so könnte es variieren, aber dauert weniger als 3-5 Sekunden zu laden, auf meinem genimotion VM.
ich weiß, es ist fast das gleiche wie dein code. vielleicht, wenn Sie könnten, die url oder eine ähnliche geben die gleichen Probleme, die ich testen konnte, es in mein app.
getestet auf einem nexus 4 mit jelly bean, ähnliche Zeit Antworten.
InformationsquelleAutor CptEric
Wenn Sie bereit sind, verbringen einige $ auf eine Bibliothek , empfehle ich Bass Es hat einen vollen Satz von API-Aufrufe, die Sie integrieren können und auch eine solide Dokumentation. Es gibt eine shareware-version, die Sie testen können.
Wenn Sie nicht bereit sind, zu verbringen $. Ich empfehle VLC @Kai erwähnt, auch in der Zukunft erweitern Sie Ihre Anwendung um Videos zu streamen. Ich arbeitete mit der API vor, führen Sie einen live-stream für mein aquarium. @Kai, sofern Sie mit den notwendigen links.
Schauen Sie sich dieses link für mehr info.
InformationsquelleAutor IndieTech Solutions