2011-09-17 4 views
2

Je travaille sur une application de radio pour Android et j'ai trouvé un problème étrange. Voilà une partie du code:Android: MediaPlayer travaillant sur l'émulateur, mais pas sur l'appareil

mediaPlayer = new MediaPlayer(); 
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
mediaPlayer.setVolume(1, 1); 
try { 
    mediaPlayer.setDataSource(url); 
    mediaPlayer.setOnPreparedListener(
    mediaPlayer.prepareAsync(); // prepare async to not block main thread 

Le programme fonctionne bien sur l'émulateur (2.2, 2.3), mais lorsque je tente sur mes deux appareils (à la fois Android 2.2) il n'y a pas audio. J'ai essayé beaucoup de solutions de contournement, mais il semble si étrange que l'audio fonctionne sur l'émulateur, mais pas sur les périphériques.

PS: Je me suis fixé des autorisations Internet

EDIT: Tous les listiners sont en hausse (OnBufferingUpdateListener, OnCompletionListener, OnErrorListener, OnInfoListener, OnPreparedListener) Sur émulateur J'écoute la musique, mais il donne erreur dans logcat: emulator log

C'est l'erreur a montré dans logcat (sur l'appareil):

E/OMXPlayer( 953): Creating new NVOMXPlayer: 0x9c1a8 
E/OMXPlayer( 953): onFirstRef ++ 
E/OMXPlayer( 953): onFirstRef -- 
E/OMXPlayer( 953): setdatasource ++ 
E/OMXPlayer( 953): 0x9c1a8 setDataSource url=http://XXXXXX:8000 
E/OMXPlayer( 953): render thread(10972) started: 0x9c1a8 
E/OMXPlayer( 953): STATE_PREPARING - signal wait 0x9c1a8 
E/OMXPlayer( 953): prepareAsync: 0x9c1a8 
E/OMXPlayer( 953): STATE_PREPARING - signal rx'd 0x9c1a8 
E/OMXPlayer( 953): prepare 0x9c1a8 
E/OMXPlayer( 953): 0x9c1a8 Creating player for: http://XXXXX:8000 
D/  ( 961): NVRM_DAEMON(803): rt_exist=2, add client ref 
D/  ( 953): NvMMSetUserAgentString:: Len: 49: String: User-Agent: (NvMM Client v0.1; Linux;Android 2.2) 
D/  ( 953): connect cancelled 
D/  ( 953): connect cancelled 
D/  ( 953): connect cancelled 
D/  ( 953): connect cancelled 
D/  ( 953): connect cancelled 
D/  ( 953): connect cancelled 
D/  ( 953): connect cancelled 
D/  ( 953): Event_BlockError from 13SuperParser : Error code - 4 
D/  ( 953): Graph_EventHandler: ERROR for READER [0x80001005] 
D/  ( 953): Graph_EventHandler: ERROR for READER [0x80001005] 
E/MediaPlayer(10958): error (1, 0) 
E/  (10958): Prepare failed.: status=0x1 
E/  (10958): java.io.IOException: Prepare failed.: status=0x1 
E/  (10958):  at android.media.MediaPlayer.prepare(Native Method) 
E/  (10958):  at app.relax.com.StreamingMediaPlayer.listen(StreamingMediaPlayer.java:64) 
E/  (10958):  at app.relax.com.StreamingMediaPlayer.startListening(StreamingMediaPlayer.java:74) 
E/  (10958):  at app.relax.com.StreamingMediaPlayer.access$0(StreamingMediaPlayer.java:70) 
E/  (10958):  at app.relax.com.StreamingMediaPlayer$1.run(StreamingMediaPlayer.java:51) 
E/  (10958):  at java.lang.Thread.run(Thread.java:1096) 
E/OMXPlayer( 953): prepare 0x9c1a8 exit with error 
E/OMXPlayer( 953): Error in prepare 
E/OMXPlayer( 953): Worker Thread Exit - 
+0

Que retourne "isPlaying()"? Est-ce que votre flux joue ou non? Assurez-vous de définir la volumn. Vous pouvez également enregistrer un écouteur pour vérifier s'il existe des avertissements ou des erreurs "setOnInfoListener()". –

+0

sur les appareils il me donne une erreur de décodeur, dans l'émulateur fonctionne. Je ne comprends vraiment pas ce qui se passe: | – Stefano

+0

Quelle erreur de décodage? –

Répondre

0

Quel est le type de support du flux? Il vous manque peut-être des CODEC pour ce format sur les appareils de production. Honnêtement, les appareils de production ont tendance à avoir de meilleurs CODEC que les émulateurs car les appareils 2.x ont souvent du WMA, du MP3 et du MP4. Mais peut-être que ça brise quelque chose. Si c'est un format de liste de lecture (par exemple m3u), ou un format composé (atom? Rss ?, ou un autre format avec plusieurs URL de flux dans plusieurs formats dans une enveloppe), les périphériques de production peuvent choisir un format qui ne ruisseau si bien. par exemple. ils choisissent un flux WMA, mais découvrent qu'il n'a de DRM que lorsqu'ils commencent à décoder.

La radio Internet utilise souvent un type de format composé. Et ils mettent souvent DRM sur leurs flux WMA. Ce serait un bon candidat, en fait.

Pour ce que ça vaut, le support de streaming 2.x est plutôt faible. Si vous pouvez casser l'enveloppe et choisir MP3 ou MP4 au lieu de WMA, vous pouvez faire beaucoup mieux.

Mais la première question est: quel est le format du flux.

Aussi vaguement possible, je suppose: si vos appareils de production sont enracinés, cela désactive le décodage des fichiers protégés par DRM. Essayez-le avec un appareil non raclé?

Dernière possibilité: les appareils 2.x utilisent une variété de piles audio. NVOMXPlayer ne semble pas familier. Sont-ils des appareils Atrix?

Questions connexes