2013-03-06 3 views
1

Android, 스트리밍 및 미디어 플레이어와 관련된 이상한 문제가 있습니다.Android Media Player 스트리밍 - 에뮬레이터에서 작동하지만 하드웨어에서 오류 발생

실제 앱은 상당히 복잡하지만 가능한 간단한 테스트 케이스를 넣었습니다. 'Hello, World'활동이 하드 코딩 된 URL로 Media Player를 실행합니다. 이것은 안드로이드 에뮬레이터, API 레벨 7 (실제 앱의 최소값)과 API 레벨 17 모두에서 잘 작동합니다. 그러나 동일한 앱은 API 레벨이 15 인 하드웨어 장치에서 실패합니다 - Media Player가 prepare() 호출 중에 실패합니다 : 비 차단 prepareAsync을 (사용하는 경우

  • ) (블로킹하여 제조하는 경우, 그것은)
  • IOException이 실패하고, 그 실패 onErrorListener 트리거 (예외가 발생되지 않는다).

항상 실패 (차단 및 비 차단 준비)에는 "오류 (1, -2147483648)"가 표시됩니다. 미디어 플레이어 문서에는 이러한 오류 코드 -2147483648 (0xffffffff)이 없습니다.

앱에 인터넷 (android.permission.INTERNET) 액세스 권한이 있으며 기기의 인터넷 연결이 작동합니다 (동일한 앱이 인터넷에서 파일을 다운로드 할 수 있음).

이것은 동일한 스트림을 에뮬레이터에서 재생할 수 있고 다른 스트림이 하드웨어 장치에서 같은 방식으로 실패하기 때문에 코덱 문제가 아닙니다.

  • 열린 우리당를 통해 데이터 소스를 설정 미디어 플레이어
  • 에 리셋을()()를 호출
  • 시작 전화 pepareAsync()와 onPreparedListener 사용 :

    는 것도 도움이없는 많은 다른 것들을 시도. 구문 분석()
  • 오디오 관리자에서 오디오 사용을 얻기

하드웨어는 동일 드로 제대로 작동 vice는 Android 기본 오디오 플레이어 앱을 사용하여 저장 공간에서 오디오 파일을 재생할 수 있습니다.

나는 유령이 (많은) 믿지 않지만 다른 옵션이 부족합니다. 이런 식으로 본 사람 있니? 응용 프로그램이 에뮬레이터에서 작동 하나 하드웨어에서는 작동하지 않습니까?

누구든지 하드웨어 장치에서이 코드를 사용해 볼 수 있습니까? (하나의 안드로이드 장치 만 있습니다.)

public class MainActivity extends Activity { 

private MediaPlayer mediaPlayer; 
private String listen_url = "http://stream15.top-ix.org:80/radiojukebox-low"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mediaPlayer = new MediaPlayer(); 
    //mediaPlayer.reset(); 

    try { 
     mediaPlayer.setDataSource(listen_url); 
     //mediaPlayer.setDataSource(this, Uri.parse(listen_url)); 
    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (SecurityException e) { 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    try { 
     mediaPlayer.prepare(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
        // We fail here! 
     e.printStackTrace(); 
    } 

    mediaPlayer.start(); 
} 
} 

답변

0

이것은 일반적으로 사용중인 기기에서 스트림 유형을 지원하지 않기 때문입니다. 간단한 MP3 스트림을 사용해 보셨습니까?

+0

어떻게 '스트림 유형이 기기에서 지원되지 않는 것일까?' 에뮬레이터의 API 7이 그것을 재생한다면, 하드웨어의 API 15는 어떻게 그것을 지원하지 않을 수 있습니까? –

+0

PC에 지원되는 코덱 수가 더 많습니다. API 레벨과는 아무런 관련이 없습니다. 제조업체가 API 레벨을 지정하기로 결정한 것입니다. Google은 오류 메시지로, 내가 찾은 가장 일반적인 설명입니다. – Geobits

+0

API 15 testdbed는 Android 4.0.3 커널 버전 3.0.8입니다. 나는 다른 장치 인 HTC Deside C 폰에서 4.0.3을 사용했지만 커널 버전 3.0.16에서는 동일한 응용 프로그램을 사용해 보았습니다. 그래서 나는 원래의 장치에서 나쁜 Adndoid 빌드를 다루는 것일 수 있습니다 (벤더가 제공 한 Android 빌드를 사용합니다). 이것을 확인하기위한 장소 (사이트 저장소)가 있습니까? –