2010-12-10 9 views

Antwort

12

Die Puffergröße wird in die Firmware übernommen. Alles, was Sie tun können, ist, zu überwachen, wie viel der Puffer gefüllt ist, und selbst das ist nur prozentual.

Entschuldigung!

+2

Nicht wirklich/nur. Wie ich im Googles Code gesehen habe, gibt es eine Methode 'public booleansetParameter (int key, int value)', mit der Sie das tun können, wenn Sie den Wert für key kennen (ich habe sie für RK-Geräte).Leider kann ich keinen Weg finden, diese Methode zu nennen (obwohl es öffentlich ist), aber ich werde es finden, es muss einen Weg geben, dies zu tun! – bluewhile

+0

@blueWie hast du einen Weg gefunden, dies zu tun? – w2lame

+2

Nein, ich habe geweint, weil ich mehrere große Deals verloren habe, nur wegen der Unwissenheit von Google. – bluewhile

3

Das Problem tritt beim Streamen von Live-Inhalten auf, z. B. Live-Internetradio. Als Live-Inhalt kann ich nichts berechnen, da die Tracklänge unendlich ist und OnBuffering-Methoden im MediaPlayer nie aufgerufen werden.

Meine Absicht ist einen Puffer abhängig vom Bitrate-Faktor einzustellen, um Ressourcen zu optimieren und zu erhöhen, um 3G-Verbindungsunterbrechungen zu verhindern. Nun, wirklich kann ich 3G-Verbindungsabbrüche nicht verhindern, aber ich möchte damit meinen, dass ich diese Verbindung länger machen kann, um das Streaming für den Endverbraucher noch lebendiger zu machen.

Also ich denke, ich kann einen Java-Proxy mit Live-Inhalt zu verbinden und meine eigene Puffergröße abhängig von der Bitrate setzen, dann diesen Proxy als URL auf MediaPlayer übergeben und den Inhalt abspielen.

Aber bevor ich mit der Codierung anfange, möchte ich wissen, ob es eine andere Methode oder einen anderen besseren Trick gibt, den ich auf den MediaPlayer anwenden kann, um dieses Problem zu lösen.

+0

Hi josh, wie hast du das Problem gelöst, hast du einen Stream-Proxy benutzt? – burakk

4

Dies kann auf Ihr spezielles Problem nicht ganz relevant sein, aber vielleicht jemand anderes wird dadurch geholfen werden:

Ich muss nur wissen, wie groß der Puffer ist. Ich denke, es ist eine feste Menge an Bytes, anstatt einer festen Menge an Wiedergabezeit.

Um eine Schätzung der Audio/Video-Puffergröße zu erhalten, können Sie OnBufferingUpdateListener implementieren, um zu ermitteln, wann der Puffer vollständig gefüllt ist, und TrafficStats verwenden, um festzustellen, wie viele Bytes Ihre Streaming-Medien zwischen dem Starten des Streams und des Puffers verbraucht haben voll werden. Dies sollte ein Indikator für die Größe des Puffers sein Mediaplayer verwendet ...

+3

ist es nicht traurig, dass wir auf diesen Müll zurückgreifen müssen, um grundlegende Aufgaben zu erledigen ??? – StackOverflowed

+0

guten Rat, danke. upvote – sandalone

10

Die Größe wird in Frameworks/base/Medien/libstagefright/include/NuCachedSource2.h

kDefaultHighWaterThreshold und kDefaultLowWaterThreshold gesetzt stieg zwischen Android 2.3.7 und Android 4.0.4 die Puffergröße um den Faktor 8 wuchs, wie in diesem Thread erwähnt Android - MediaPlayer Buffer Size in ICS 4.0

Sie würden eine benutzerdefinierte rOM benötigen.

Android 2.3.7

enum { 
    kPageSize   = 65536, 
    kHighWaterThreshold = 5 * 1024 * 1024, 
    kLowWaterThreshold = 512 * 1024, 

    // Read data after a 15 sec timeout whether we're actively 
    // fetching or not. 
    kKeepAliveIntervalUs = 15000000, 
}; 

Android 4.0.4

enum { 
    kPageSize      = 65536, 
    kDefaultHighWaterThreshold  = 20 * 1024 * 1024, 
    kDefaultLowWaterThreshold  = 4 * 1024 * 1024, 

    // Read data after a 15 sec timeout whether we're actively 
    // fetching or not. 
    kDefaultKeepAliveIntervalUs  = 15000000, 
}; 

Wenn Sie dieses Problem kümmern, dann vielleicht sind Sie interessiert Fehlerbericht https://code.google.com/p/android/issues/detail?id=29870