2010-12-10 9 views

Répondre

12

La taille de la mémoire tampon est intégrée dans le microprogramme. Tout ce que vous pouvez faire est de garder un œil sur combien le tampon est rempli, et même c'est juste un pourcentage.

Désolé!

+2

Pas vraiment/seulement. Comme je l'ai vu dans Googles Code, il existe une méthode 'public booleansetParameter (int key, int value)' qui vous permet de le faire si vous connaissez la valeur de la clé (je les ai pour les périphériques RK).Malheureusement je ne peux pas trouver un moyen d'appeler cette méthode (même si c'est public), mais je vais le trouver, il doit y avoir un moyen de le faire! – bluewhile

+0

@bluewhile avez-vous trouvé un moyen de le faire? – w2lame

+2

Non, j'ai fini par pleurer parce que j'ai perdu plusieurs grosses affaires juste à cause de l'ignorance de Google. – bluewhile

3

Le problème apparaît lors de la diffusion de contenu en direct, par exemple: radio Internet en direct. En tant que contenu live, je ne peux rien calculer car la longueur de la piste est infinie et les méthodes onBuffering dans MediaPlayer ne sont jamais appelées.

Mon intention est de définir un tampon en fonction du facteur de débit afin d'optimiser les ressources et de l'augmenter pour éviter les déconnexions 3G. Eh bien, vraiment je ne peux pas empêcher les déconnexions 3G, mais je veux dire que je peux faire cette connexion plus longtemps pour garder le streaming plus vivant à l'utilisateur final. Donc je pense que je peux coder un proxy Java pour me connecter au contenu en direct et définir ma propre taille de tampon en fonction du débit, puis passer ce proxy comme URL sur MediaPlayer et lire le contenu.

Mais avant de commencer à coder cela, je veux savoir s'il existe une autre méthode, ou une autre meilleure astuce que je peux appliquer à MediaPlayer pour résoudre ce problème.

+0

Salut, comment avez-vous résolu le problème, avez-vous utilisé un proxy de flux? – burakk

4

Cela peut être pas tout à fait pertinent à votre problème, mais peut-être quelqu'un d'autre sera aidé par ceci:

J'ai juste besoin de savoir la taille de la mémoire tampon est. Je suppose que c'est une quantité fixe d'octets, plutôt qu'une quantité fixe de temps de lecture. Pour obtenir une estimation de la taille du tampon audio/vidéo, vous pouvez implémenter un OnBufferingUpdateListener pour détecter quand le tampon est complètement rempli et utiliser TrafficStats pour déterminer le nombre d'octets consommés par votre flux en continu entre le démarrage du flux et le tampon devenir plein. Ceci doit être un indicateur de la taille de la mémoire tampon MediaPlayer utilise ...

+3

n'est-ce pas triste que nous devons recourir à cette poubelle pour accomplir les tâches de base ??? – StackOverflowed

+0

bon conseil, merci. upvote – sandalone

10

La taille est définie dans cadres/base/media/libstagefright/include/NuCachedSource2.h

kDefaultHighWaterThreshold et kDefaultLowWaterThreshold est allé entre Android 2.3.7 et Android 4.0.4 la taille du tampon a augmenté par le facteur 8, comme indiqué dans ce fil Android - MediaPlayer Buffer Size in ICS 4.0

Vous auriez besoin d'une ROM personnalisée.

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

Si vous dérange cette question, alors vous êtes peut-être intéressé dans le rapport de bogue https://code.google.com/p/android/issues/detail?id=29870

Questions connexes