안드로이드 개발 질문/답변
(글 수 45,052)
private void playVideo(String Path) {
try {
Release();
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setOnCompletionListener(LG_NAS_Music_Service.this);
mMediaPlayer.setOnPreparedListener(LG_NAS_Music_Service.this);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
setDataSource(Path);
mMediaPlayer.prepare();
} catch (Exception e) {
Log.e("!", "error: " + e.getMessage(), e);
}
}
private void setDataSource(String path) throws IOException {
if(!URLUtil.isNetworkUrl(path)){
mMediaPlayer.setDataSource(path);
}else{
mMediaPlayer.setDataSource(path);
}
}
/**
* 메모리 해제
*/
public void Release(){
if(mMediaPlayer != null){
if(mMediaPlayer.isPlaying()){
mMediaPlayer.stop();
mMediaPlayer.reset();
}
mMediaPlayer.release();
mMediaPlayer = null;
// stopSelf();
}
}
public void onPrepared(MediaPlayer arg0) {
// TODO Auto-generated method stub
Log.i("!", "onPrepared");
mMediaPlayer.start();
}위와 같이 구현하여 사용하고 있는데요.setDataSource부분에서 URL을 넣고 onPrepared에서 Start를 할 경우에, 서버 측의 Streaming서비스가 느릴 경우
Timeout이 발생하게 됩니다.
HttpClient의 경우 Timeout time을 지정해줘서 그 시간이 되면 알아서 처리를 해 주는 것 같은데,
MediaPlayer의 경우에는 Timeout 예외처리를 어느 부분에서 해야하는 걸까요...
아시는분 답변부탁드립니다..




우선은 스트리밍의 경우에는 prepare()말고 prepareAsync()를 사용하라고 나와있네요
public void prepareAsync ()
Prepares the player for playback, asynchronously. After setting the datasource and the display surface, you need to either call prepare() or prepareAsync(). For streams, you should call prepareAsync(), which returns immediately, rather than blocking until enough data has been buffered.
Timeout 관련된 것은 OnErrorListener를 달아라라는 말밖에 없는 듯 합니다.