2011-09-17 5 views
2

Android 용 라디오 앱에서 작업 중입니다. 이상한 문제를 발견했습니다.Android : MediaPlayer가 에뮬레이터에서 작동하지만 기기에서 작동하지 않음

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)에서 작동하지만 내 두 장치에하려고 할 때 (모두 안드로이드 2.2) 오디오 없다 : 즉, 코드의 일부입니다. 나는 많은 해결 방법을 시도했지만 오디오가 에뮬레이터에서는 작동하지만 장치에서는 작동하지 않는다고 이상하게 보입니다.

PS : 내가 설정 한 인터넷 권한

편집 : 모든 listiners가 (OnBufferingUpdateListener, OnCompletionListener, OnErrorListener, OnInfoListener, OnPreparedListener) 나는 음악을 듣고 에뮬레이터에 있지만,이 로그 캣에 오류가 있습니다 : emulator log

이 오류가 로그 캣에서 (장치)로 보여 :

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

"isPlaying()"을 반환하는 값은 무엇입니까? 스트림이 재생 중이거나 재생되지 않았습니까? 당신이 volumn을 설정했는지 확인하십시오. 청취자를 등록하여 경고 또는 "setOnInfoListener()"오류가 있는지 확인할 수도 있습니다. 장치의 –

+0

은 에뮬레이터에서 디코더 오류를 발생시킵니다. 나는 정말로 무슨 일이 벌어지고 있는지 이해하지 못한다 : | – Stefano

+0

어떤 디코딩 오류입니까? –

답변

0

스트림의 미디어 타입 무엇입니까? 아마도 생산 장치에서 해당 형식에 대한 CODEC이 누락 된 것일 수 있습니다.

솔직히, 2.x 장치에는 MP3 및 MP4는 물론 WMA가 있기 때문에 제작 장치는 에뮬레이터보다 더 나은 코덱을 사용하는 경향이 있습니다. 그러나 어쩌면 그것은 무언가를 깨뜨릴 수 있습니다.

재생 목록 형식 (예 : m3u) 또는 복합 형식 (atom? rss?) 또는 봉투에 여러 형식의 여러 스트림 URL이있는 다른 형식 인 경우 프로덕션 장치에서 너무 잘 흐른다. 예 : 그들은 WMA 스트림을 선택하지만 디코딩을 시작할 때만 DRM이 있음을 확인합니다.

인터넷 라디오는 종종 어떤 종류의 복합 형식을 사용합니다. 그리고 그들은 종종 자신의 WMA 스트림에 DRM을 넣습니다. 실제로 좋은 후보자가 될 것입니다.

가치가있는 부분에 대해서는 2.x 스트리밍 지원이 매우 약합니다. 너가 봉투를 부수고 WMA 대신에 MP3 또는 MP4를 쑤시 거든 너는 잘 잘 할지도 모른다.

하지만 첫 번째 질문은 스트림의 형식입니다.

또한 나는 어쩌면 가능하다고 생각합니다. 프로덕션 장치가 루팅 된 경우 DRM으로 보호 된 파일의 디코딩을 사용할 수 없게됩니다. 정리되지 않은 장치로 시도해보십시오.

마지막 가능성 : 2.x 장치는 다양한 오디오 스택을 사용합니다. NVOMXPlayer가 익숙하지 않습니다. 그들은 Atrix 장치입니까?

관련 문제