Il existe plusieurs raisons pour lesquelles vous pouvez obtenir ce comportement. Tout d'abord, il semble que les gens obtiennent de meilleurs résultats en utilisant des fichiers mp3 exactement à 44100Hz
, car apparemment la classe MediaPlayer
prend cette valeur et redimensionne le temps en conséquence, rendant des valeurs étranges pour les fichiers n'utilisant pas cet échantillonnage.
Vous devez également vérifier le mode de vos canaux, et essayez d'utiliser Joint Stereo ou L/R Stereo forcé. Joint doit être la valeur par défaut, mais il se peut que vos fichiers aient déjà été mal encodés, donc cela vaut la peine d'essayer. Il est intéressant de noter que Forced L/R Stereo peut perdre de la qualité pour le même débit que Joint.
Il serait également utile de vérifier la sortie de soxi
qui fait partie du paquet sox (vous pouvez également le faire avec ffmpeg), qui vous donnera le nombre de canaux, la fréquence d'échantillonnage, débit binaire et le nombre de canaux .
Vous pouvez également vérifier le contenu brut du fichier mp3 si vous avez effectué un traitement sur eux en utilisant une application pour la présence de contenu garbage xml qui aurait pu être inséré lors de l'exportation.
Si vous avez la possibilité de modifier les fichiers mp3 que vous diffusez (ce qui ressemble à ce que vous faites depuis que vous pouvez dire le débit), c'est ce que j'essayerais en premier. Si cela ressemble plus à un téléchargement d'utilisateur, vous devriez peut-être jeter un oeil à une autre solution, comme ExoPlayer qui a quelques milliers d'étoiles et de développement actif. Il enveloppe encore l'API MediaPlayer
, mais ça vaut le coup d'essayer. Vous devez également considérer que cela pourrait être un problème de threading, où le joueur arrêterait de jouer, mais la minuterie continuerait réellement, vous donnant ce résultat où il est supérieur à la durée réelle de la chanson. 3 secondes semble un peu trop pour l'expliquer par là, mais c'est juste une idée.
lorsque vous diffusez à partir du réseau, peut être -1, reportez-vous ce le getDuration() https://developer.android.com/reference/android/media/MediaPlayer.html#getDuration() –
@ArunShankar le 'getDuration()' n'est pas «-1» dans mon cas, c'est la valeur correcte – wong2
@ wong2: Postez votre code et l'URL de cette chanson –