Je mettez en place un lecteur multimédia qui joue un flux d'une machine distante. Via mon application, je peux contrôler la machine distante (E.G. chercher à la deuxième fois). Fonctionne comme charme, mais: les tampons de lecteur de médias Android Certains folles 10-15 secondes (!!), ce qui signifie que chaque clic («recherche») prend 10-15 secondes pour prendre effet même s'il est inférieur à une seconde jusqu'à la nouvelle Les données arrivent.
Ma question: Y a-t-il un moyen de contrôler (limite) que la mise en cache? Ou je fais-je simplement quelque chose de mal? Suis-je le seul à avoir ce problème? P>
Mon code est très simple: p>
player = new MediaPlayer() player.setDataSource(url); player.setOnPreparedListener(new OnPreparedListener() { public void onPrepared(MediaPlayer mp) { mp.start(); } }); player.prepareAsync();
4 Réponses :
oncreate () strong> p>
Malheureusement, cela n'a pas aidé. Et encore pire, j'ai essayé de tuerbocharger le transfert au début pour minimiser le retard: j'ai transféré le premier mégaoctet (sur 3) dans une seconde et il a toujours pris> 10 secondes pour commencer à jouer! Aucune idée de ce qui se passe là-bas, mais cela ne se sent pas comme un problème de mise en cache.
Je n'ai jamais fait face à ce problème, je reçois aussi du son du serveur mais je n'obtiens pas de retard. Je reçois 50 son, mais ne soulevez jamais de problème
Lorsque streamer simplement un fichier à partir d'un serveur, il fonctionne parfaitement pour moi aussi. Mais une fois que je suis mise au point dans un flux, il y a le retard ...
Android MediaPlayer me rend triste :(
OK, Entre-temps, je me suis rapproché de la solution. SUR LA SOURCE DE MON PROBLÈME est Android DRM! (Non, je ne joue pas à un fichier protégé. Son MP3 standard).
DRM semble avoir été introduit dans Android 3.1 (je testais sur une onglet Galaxy 10.1). Cela fonctionne bien sur l'émulateur (peut-être que DRM n'est pas implémenté là-bas?) P>
Une idée de la façon dont je peux désactiver ou accélérer cela? Il semble y avoir une minuterie de 10 secondes quelque part au plus profond de l'Android DRM impliquant qui attend - peu importe, aucune idée. Mon journal d'erreur: p>
Avez-vous déjà trouvé une solution pour cela?
Aucun que j'ai osé partager :) sur une version androïde plus ancienne 3,0, je pouvais contourner les nouvelles lignes de réponse HTTP de \ r \ n à \ n \ r. Oui, pensait à retourner mon diplôme CS à ce moment-là :). Peut-être que j'ai exploité un bug là-bas. N'avez pas un appareil pour tester cela plus malheureusement, je ne peux donc pas reproduire.
Le problème pourrait être non seulement chez Android Media Player. Le serveur qui est en streaming vidéo doit prendre en charge le format de besoin. P>
Si c'est MP4, vous devez installer le module H264-pseudo-streaming (même pour HLS) S'il s'agit de MSS (Microsoft Sight Streaming) - il existe des modules spéciaux pour IIS. p>
En outre, après que l'utilisateur 'fait de la recherche', cela signifie que le joueur natif enverra une demande de plage, qui devrait être pris en charge par le serveur. Nginx les prend en charge par défaut, Iss & Apache a des problèmes avec cela. Bien que facile configurable. p>
Une chose que j'ai réalisée dans les nouvelles versions Android est qu'il semble avoir des problèmes avec VBR MP3. Cela les joue, mais des tampons ont beaucoup trop de données avant qu'il ne commence. (3+ Mo, la majorité de mes fichiers de test). P>
A (Bad Hack) La solution de contournement consiste à supprimer l'en-tête xing code> des fichiers MP3 (ceci est où les informations VBR sont stockées). Cela semble rendre le joueur revenir à un algorithme plus simple et commencer à lire correctement pour tous mes fichiers après avoir mis la mémoire tampon de 100kb ... p>