wake-up-neo.com

Android - So erfahren Sie, wann der MediaPlayer puffert

Ich muss hier etwas Offensichtliches vermissen, aber ich kann anscheinend nichts finden, um festzustellen, wann MediaPlayer Audio puffert. Ich streame Internet-Audio, und ich möchte einen Pufferindikator anzeigen. Ich habe jedoch nichts versucht, um zu wissen, wann MediaPlayer das Audio in den Puffer unterbricht. Daher kann ich einen Pufferindikator nicht richtig anzeigen. Irgendwelche Hinweise?

33
Daniel

@Daniel, durch Ihren Kommentar zu @ JRLs Antwort könnten Sie dies wahrscheinlich zum Laufen bringen, indem Sie einen Thread aufdrehen und auf ein Timeout warten.

Etwas wie DetectBufferTimeout.Java (ungeprüft) würde gut funktionieren.

Ich stimme jedoch zu, dass das Aufdrehen dieses separaten Threads ein bisschen hack ist. Vielleicht könnte OnBufferingUpdateListener eine Garantie dafür geben, wie oft es onBufferingUpdate() aufruft, unabhängig davon, ob eine Änderung im Pufferungsfortschritt stattgefunden hat, sodass wir feststellen können, ob wir immer wieder denselben Wert erhalten.

7
Matt Briançon

Wie unten (API-Level ≥ 9):

mp.setOnInfoListener(new OnInfoListener() {

    @Override
    public boolean onInfo(MediaPlayer mp, int what, int extra) {
        switch (what) {
            case MediaPlayer.MEDIA_INFO_BUFFERING_START:
                loadingDialog.setVisibility(View.VISIBLE);
                break;
            case MediaPlayer.MEDIA_INFO_BUFFERING_END:
                loadingDialog.setVisibility(View.GONE);
                break;
        }
        return false;
    }
});

HINWEIS: Es gibt einen bekannten Fehler in Android. Bei der Wiedergabe von HLS-Streams wird einfach nie OnInfoListener oder OnBuffering aufgerufen. überprüfe diesen Link OnInfoListener Bug

54
ljian

Ok, ich fühle mich jetzt ein wenig bestätigt. Ich habe die Pandora-App ausgecheckt, und es wird kein Pufferindikator angezeigt. Wenn die Musik zum Puffern unterbrochen wird, sitzt sie einfach so, als wäre nichts passiert, und die Benutzeroberfläche sieht so aus, als würde sie immer noch spielen. Daher bin ich zu dem Schluss gekommen, dass Sie mit MediaPlayer nicht feststellen können, ob die Spur für die Pufferung vorübergehend angehalten wurde.

Ich habe jedoch bemerkt, dass es einige MediaPlayer-Konstanten gibt, die von Nutzen sein könnten: MEDIA_INFO_BUFFERING_START und MEDIA_INFO_BUFFERING_END. Sie sind jedoch nur in API Level 9+ verfügbar, und die Dokumente sagen nichts darüber aus. Ich gehe davon aus, dass sie mit einem OnInfoListener verwendet werden können.

Ich bin enttäuscht, aber zumindest kann ich jetzt aufhören, meine Räder zu drehen und zu etwas anderem übergehen.

10
Daniel

Registrieren Sie einen OnBufferingUpdate listener.

1
JRL

Sie können einen Thread verwenden, der die aktuelle Position des MediaPlayer überprüft. Wenn sich die Position nicht ändert, können Sie feststellen, dass sich das Medium im Pufferzustand befindet. Hier ist das komplette Tutorial, das ich geschrieben habe: http://www.ottodroid.net/?p=260

0
Murat