2013-07-08 2 views
0

MediaPlayer를 사용하여 비디오를 재생하려고 할 때 내 OnInfoListener가 호출되지 않는 문제가 있습니다. 나는 연구를했고 대답을 찾을 수없는 것 같습니다. 내가 생각해 낸 유일한 가능성은 내가 mp4 비디오 파일을 사용하고 있으며 아마도 OnInfoListner가 해당 파일 유형을 인식하지 못한다는 것입니다. 내 코드는 아래와 같습니다.MediaPlayer에 대해 OnInfo가 호출되지 않습니다.

public class FullImageActivity extends Activity implements SurfaceHolder.Callback, OnPreparedListener, OnInfoListener, 
                   OnErrorListener{ 

private static final String TAG = "MediaPlayer shit"; 
MediaPlayer player; 
SurfaceView surfaceview; 
SurfaceHolder surfaceHolder; 
int width; 
int height; 
DisplayImageOptions options; 
ViewPager viewpager; 
String path; 
long id; 
String[] projection = { GridviewData.ROWID, GridviewData.BITMAPPATH, GridviewData.VIDEOFILEPATH}; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.full_image); 

    Intent i = getIntent(); 

    id = i.getExtras().getLong("id"); 
    path = i.getExtras().getString("videopath"); 

    surfaceview = (SurfaceView)findViewById(R.id.surfaceview); 
    surfaceHolder = surfaceview.getHolder(); 
    surfaceHolder.addCallback(this); 


} 

public void playVideo(){ 
    player = new MediaPlayer(); 
    try { 
     player.reset(); 
     player.setOnErrorListener(this); 
     File file = new File(path); 
     FileInputStream inputStream = new FileInputStream(file); 
     player.setDataSource(inputStream.getFD()); 
     inputStream.close();    
     player.setOnInfoListener(this); 
     player.setOnPreparedListener(this); 
     player.setDisplay(surfaceHolder); 
     player.prepareAsync(); 


    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (SecurityException e) { 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 
@Override 
protected void onPause() { 
    surfaceview.setVisibility(View.GONE); 
    if (player != null) 
    { 
     if (player.isPlaying()) 
      player.stop(); 
     player.release(); 
     player = null; 
    } 
    super.onPause(); 
} 
@Override 
protected void onResume() { 
    surfaceview.setVisibility(View.VISIBLE); 
    Log.i(TAG, "In onResume"); 
    super.onResume(); 
} 
@Override 
protected void onStop() { 
    super.onStop(); 
} 
@Override 
public void surfaceChanged(SurfaceHolder holder, int arg1, int arg2, int arg3) { 
    if (player != null) 
    { 
     try { 
      Log.i(TAG, "In surface change"); 
      player.setDisplay(surfaceHolder); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    Log.i(TAG, "in surface created"); 
    playVideo(); 
} 

@Override 
public void surfaceDestroyed(SurfaceHolder arg0) { 
     Log.i(TAG, "Surface destroyed"); 
     if (player != null) 
     { 
      if (player.isPlaying()) 
       player.stop(); 
      player.release(); 
      player = null; 
     } } 
@Override 
public void onPrepared(MediaPlayer p) { 


    player.start(); 

} 

@Override 
public boolean onError(MediaPlayer arg0, int what, int arg2) { 
    Log.i(TAG, "THERE WAS AN ERROR of "); 
    return true; 
} 





@Override 
public boolean onInfo(MediaPlayer p, int what, int extra) { 
    Log.i(TAG, "Within onInfo and of " + what + "and the extra of " + extra); 

    return true; 
} 

감사합니다.

+0

OnInfoListner를 사용하여 메타 데이터를 검색하려고합니까? –

+0

아니요. 첫 번째 비디오 프레임이 렌더링 될 때 알려주려는 것입니다. – Papajohn000

답변

관련 문제