2013-07-08 36 views
0

我遇到的問題是,當我嘗試使用MediaPlayer播放視頻時,我的OnInfoListener永遠不會被調用。我做了研究,似乎無法找到答案。我想出的唯一可能是我使用的是mp4視頻文件,也許OnInfoListner不能識別這種類型的文件。我的代碼如下。OnInfo永遠不會被MediaPlayer調用

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

回答

相關問題