안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요.
현재 서버를 연동하여 mp3 스트리밍 하는 앱을 개발 중에 있습니다.
정상적으로 동작하는데 한가지 의문점이 발생하여,
몇 가지 여쭙고자 이곳을 찾게되었습니다.
현재 제가 연동하는 서버의 프로토콜은 http프로토콜을 지원합니다.
1. wav포맷의 음악 관련하여, 단말에서는 재생이 가능한데
서버에서 스트리밍 처리가 되어 내려주는 파일을 재생 시에 재생이 되질 않습니다.
API References 상에서는 WAVE파일이 Decoder만 지원한다고 되어 있더군요.
이 현상을 해결하기 위해서는, 서버측에서 따로 처리가 필요한 부분이 있을까요? 아니면 코딩 상에서 해결할 수 있는 방법이 있을까요?
2. 또한 위 파일의 경우 재생이될 경우가 있고, 되지 않을 경우가 있습니다.
제 지식으로는 서버측에서 데이터 전송이 늦어서 타임아웃이 걸려서 재생이 안되는 것 같은데, 어떻게 생각하시나요?
두 현상 모두 스트리밍 실패 시에 onError콜백으로 들어가며, Error(1, -1) 오류가 떨어집니다.
작성된 소스는 아래와 같습니다.
꼭 해결책이 아니라도 조언이라도 한 말씀 해주고 가시면 감사드리겠습니다^^
현재 서버를 연동하여 mp3 스트리밍 하는 앱을 개발 중에 있습니다.
정상적으로 동작하는데 한가지 의문점이 발생하여,
몇 가지 여쭙고자 이곳을 찾게되었습니다.
현재 제가 연동하는 서버의 프로토콜은 http프로토콜을 지원합니다.
1. wav포맷의 음악 관련하여, 단말에서는 재생이 가능한데
서버에서 스트리밍 처리가 되어 내려주는 파일을 재생 시에 재생이 되질 않습니다.
API References 상에서는 WAVE파일이 Decoder만 지원한다고 되어 있더군요.
이 현상을 해결하기 위해서는, 서버측에서 따로 처리가 필요한 부분이 있을까요? 아니면 코딩 상에서 해결할 수 있는 방법이 있을까요?
2. 또한 위 파일의 경우 재생이될 경우가 있고, 되지 않을 경우가 있습니다.
제 지식으로는 서버측에서 데이터 전송이 늦어서 타임아웃이 걸려서 재생이 안되는 것 같은데, 어떻게 생각하시나요?
두 현상 모두 스트리밍 실패 시에 onError콜백으로 들어가며, Error(1, -1) 오류가 떨어집니다.
작성된 소스는 아래와 같습니다.
private void playVideo(String Path) {
try {
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setLooping(false);
mMediaPlayer.setOnCompletionListener(LG_NAS_Music_Service.this);
mMediaPlayer.setOnPreparedListener(LG_NAS_Music_Service.this);
mMediaPlayer.setOnErrorListener(LG_NAS_Music_Service.this);
setDataSource(Path);
} catch (Exception e) {
Log.e("!", "error: " + e.getMessage(), e);
}
}
private void setDataSource(String path) throws IOException {
if(!URLUtil.isNetworkUrl(path)){
mMediaPlayer.setDataSource(path);
mMediaPlayer.prepare();
}else{
try{
mMediaPlayer.setDataSource(path);
mMediaPlayer.prepare();
}catch(Exception e){
Log.i("!", "prepare failed " + e.getMessage());
}
}
}
public void onPrepared(MediaPlayer arg0) {
// TODO Auto-generated method stub
mMediaPlayer.start();
}
public boolean onError(MediaPlayer mp, int what, int extra) {
// TODO Auto-generated method stub
Log.e("!", "Error in MediaPlayer: (" + what +") with extra (" +extra +")" );
return true;
}꼭 해결책이 아니라도 조언이라도 한 말씀 해주고 가시면 감사드리겠습니다^^




재생에 필요한 부분을 버퍼링해서 처리하는듯 합니다.
에러 메세지는 그리 세분화 되어있지 않아서 별 도움이 안 될겁니다.
웹에 올려져 있는 mp3파일 재생시킬때 전 그냥 다른 어플로 던졌습니다.
(이렇게 처리해도 별 문제 없는 어플이라서.. ㅡ_ㅡ;; )
Intent i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(Uri.parse(addr),"audio/*");
startActivity(i);
정상적으로 재생되는지 테스트용으로 해보세요.