2010-12-10 27 views

Odpowiedz

12

Rozmiar bufora jest wypalany w oprogramowaniu. Wszystko, co możesz zrobić, to utrzymywać zakładki na temat ilości bufora, a nawet to tylko procentowo.

Przepraszamy!

+2

Nie bardzo/tylko. Jak widziałem w Googles Code, istnieje metoda 'public booleansetParameter (int key, int value)', która pozwala to zrobić, jeśli znasz wartość klucza (mam je dla urządzeń RK).Niestety nie mogę znaleźć sposobu na wywołanie tej metody (choć jest to publiczne), ale znajdę to, musi być jakiś sposób, aby to zrobić! – bluewhile

+0

@bluewhile znalazłeś sposób, aby to zrobić? – w2lame

+2

Nie skończyłem płakać, ponieważ straciłem kilka dużych transakcji właśnie z powodu ignorancji Googles. – bluewhile

3

Problem pojawia się podczas przesyłania strumieniowego treści na żywo, na przykład: internetowe radio internetowe. Jako treść na żywo nie mogę niczego obliczyć, ponieważ długość ścieżki jest nieskończona i metody onBuffering w MediaPlayer nigdy nie są wywoływane.

Moim zamiarem jest ustawienie bufora w zależności od współczynnika przepływności, aby zoptymalizować zasoby i zwiększyć je, aby zapobiec rozłączeniom sieci 3G. Cóż, tak naprawdę nie mogę zapobiec rozłączeniom sieci 3G, ale chcę powiedzieć, że mogę zrobić to połączenie dłużej, aby transmisja była bardziej żywa dla użytkownika końcowego.

Więc myślę, że mogę kodować proxy Java, aby połączyć się z treścią na żywo i ustawić mój własny rozmiar bufora w zależności od szybkości transmisji bitów, a następnie przekazać ten serwer proxy jako adres URL w MediaPlayer i odtwarzać zawartość.

Ale zanim zacznę to kodować, chcę wiedzieć, czy istnieje inna metoda lub inna lepsza sztuczka, którą mogę zastosować do MediaPlayera, aby rozwiązać ten problem.

+0

Cześć josh, jak rozwiązałeś problem, czy korzystałeś z proxy strumieniowego? – burakk

4

To może nie być w pełni dopasowane do konkretnego problemu, ale może ktoś inny będzie wspomagany przez to:

Muszę tylko wiedzieć, jak duży bufor jest. Domyślam się, że jest to stała ilość bajtów, zamiast ustalonej ilości czasu odtwarzania.

Aby uzyskać szacunkową wielkość bufora audio/wideo, można zaimplementować OnBufferingUpdateListener, aby wykryć, kiedy bufor jest całkowicie wypełniony, i użyć TrafficStats, aby określić, ile bajtów zużyło medium strumieniowe między uruchomieniem strumienia a buforem wyczerpanie. Powinno to być wskaźnikiem wielkości bufora MediaPlayer wykorzystuje ...

+3

Czy to nie jest smutne, że musimy uciekać się do tego śmiecia, aby wykonać podstawowe zadania? – StackOverflowed

+0

dobra rada, dzięki. upvote – sandalone

10

wielkość mieści się w ramami/zasada/nośnik/libstagefright/to/NuCachedSource2.h

kDefaultHighWaterThreshold i kDefaultLowWaterThreshold wzrosły między Androidzie 2.3.7 i Android 4.0.4 rozmiar bufora wzrósł o współczynnik 8, jak zaznaczono w tym wątku Android - MediaPlayer Buffer Size in ICS 4.0

Będziesz potrzebować niestandardowy ROM.

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, 
}; 

Jeśli przeszkadza ten problem, to może jesteś zainteresowany w naszym raporcie https://code.google.com/p/android/issues/detail?id=29870