마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

미디어 플레이어 로딩 표시

0 추천

안드로이드 미디어 플레이어를 만들고 있습니다.

rtsp스트리밍 또는 저장파일을 재생하는데..

탐색(seek)작업을 하면 재생되기 전까지 '로딩중'이라는 다이얼로그를 띄우려 합니다.

 

MediaPlayer API를 확인해서 다음 리스너들을 사용해봤지만 실패하였습니다.

OnCompletionListener -- 실패 : 미디어가 완전 종료 되었을때 호출
OnBufferingUpdateListener -- 실패 : 경우에 따라 버퍼링 없이 seek이 수행됨
OnPreparedListener -- 실패 : 미디어를 첫 호출시에만 수행되고 seek할때는 안됨
OnSeekCompleteListener -- 실패 : seek이 끝났다고해서 바로 재생되는것이 아님(버퍼링이 다음에 시작한다거나 한참후에 실제 재생이 이루어짐 rtsp라서 그런거 일수도.)

그래서 대안으로 CurrentPosition 값을 쓰레드로 보고 있다가 이 값이 변화 하지 않을 경우 로딩 다이알 로그를 띄우게 했습니다.

그런데 이 방식을 쓰지말고 재생준비가 완료 되었을때 떨어지는 것이 있으니 그걸 써서 로딩 다이알 로그를 표시 하라고 합니다.

어찌 해야 할까요?

푸어어엉111 (610 포인트) 님이 2013년 6월 11일 질문
푸어어엉111님이 2013년 6월 14일 수정

3개의 답변

0 추천
재생준비가 완료 라는게 onPrepared일텐데요...

 

seek할 때 mediaplayer 객체를 다시 생성해서 seek을 호출한 후 prepare -> start를 호출하고  onPrepared 가 될때 프로그레스를 없앨수는 있을 듯 한데, 아무래도 seek이 더 오래걸릴 듯 하고,

 

 Surface 쪽 이벤트 리스너 쪽에서 재생 시작 시 surfaceCreated나 surfaceChanged 이벤트가 올 때는 있긴한데,

구분이 될지 모르겠습니다.

 

해당 담당자에게 물어보시는게 좋을 듯 합니다..
사악미소 (65,330 포인트) 님이 2013년 6월 12일 답변
0 추천
seek 터치 리스너 달아주고 프로그레스바thumb움직이면 pause하고 업이벤트되면 로딩띄우고 start하세요 mediaplay가 playing상태로.바뀌면 로딩없애면 되는데요
ignitepaper (1,720 포인트) 님이 2013년 6월 13일 답변
0 추천

다음 과 같이 했습니다.

근데...갤S3에서는 되는데 노트2에서는 이벤트를 못받아오네요 ㅠㅠ

 

MediaPlayer.OnInfoListener mOnInfoListener = new MediaPlayer.OnInfoListener() {
 @Override
 public boolean onInfo(MediaPlayer mediaplayer, int what, int j) {
  if (what == MediaPlayer.MEDIA_INFO_BUFFERING_END){
  //버퍼링 끝. 로딩 다이알로그 닫기
  return true;
 }else if (what == MediaPlayer.MEDIA_INFO_BUFFERING_START){
  //버퍼링 시작. 로딩 다이알로그 열기
  return true;
 }
 return false;
 }
};

 

푸어어엉111 (610 포인트) 님이 2013년 6월 14일 답변
푸어어엉111님이 2013년 6월 14일 수정
...