MediaPlayer работает на эмуляторе, но не на устройстве - PullRequest
2 голосов
/ 17 сентября 2011

Я работаю над радио-приложением для Android и обнаружил странную проблему. Это часть кода:

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

Программа хорошо работает на эмуляторе (2.2, 2.3), но когда я пробую на двух моих устройствах (оба Android 2.2) нет звука. Я перепробовал много обходных путей, но кажется настолько странным, что Audio работает на эмуляторе, но не на устройствах.

PS: я установил Интернет-разрешения

Все списки включены (OnBufferingUpdateListener, OnCompletionListener, OnErrorListener, OnInfoListener, OnPreparedListener) В эмуляторе я слушаю музыку, но выдает ошибку в logcat: журнал эмулятора

Это ошибка, отображаемая в logcat (на устройстве):

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 -

1 Ответ

0 голосов
/ 09 декабря 2012

Какой тип медиа потока? Возможно, вам не хватает кодеков для этого формата на производственных устройствах.

Честно говоря, производственные устройства, как правило, имеют лучшие кодеки, чем эмуляторы, потому что устройства 2.x часто имеют WMA, а также MP3 и MP4. Но, может быть, это что-то сломает.

Если это формат списка воспроизведения (например, m3u), или составной формат (atom? Rss?, Или какой-либо другой формат с несколькими потоковыми URL-адресами в нескольких форматах в конверте), возможно, производственные устройства выбирают формат, который не транслируется так хорошо. например они выбирают поток WMA, но обнаруживают, что он имеет DRM, только когда они начинают декодирование.

Интернет-радио часто использует какой-то составной формат. И они часто помещают DRM в свои потоки WMA. Это был бы хороший кандидат, на самом деле.

Несмотря на это, поддержка потоковой передачи 2.x довольно слабая. Если вы можете взломать конверт и выбрать MP3 или MP4 вместо WMA, вы можете сделать это намного лучше.

Но первый вопрос: каков формат потока.

Полагаю, также возможно: если ваши производственные устройства имеют root-права, это отключает декодирование файлов, защищенных DRM. Попробуйте с рутированным устройством?

Последняя возможность: 2.x устройства используют различные аудиостеки. NVOMXPlayer не выглядит знакомым. Это устройства Atrix?

...