2012-02-24 99 views
3

我刚刚花了大约2个小时试图让这个工作。我从来没有得到过使用MediaPlayer播放视频的好运气。我在这里做错了什么?它通过第一次播放音频,没有视频。然后第二次,当我尝试重新登录IllegalStateException时,setDataSource。我试过在拨打电话前已尝试拨打reset()来电和release()onCompletion。我只是得到不同的StateExceptions(0,64,128)我已经用完了想法。MediaPlayer视频问题

private void playVideo() { 
    mMediaPlaying = true; 
    sv.setVisibility(View.VISIBLE); //surfaceview 
    try { 
     if(mp.isPlaying()) { 
      mp.stop(); 
      mp.reset(); 
     } 
     mp.setDisplay(sh); //surfaceholder 
     mp.setOnCompletionListener(this); 
     mp.setOnPreparedListener(this); 

     mp.setDataSource(getBaseContext(), Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.test)); 
     mp.prepare(); 
     //mp.start(); 
    } catch (IllegalArgumentException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SecurityException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 


@Override 
public void onPrepared(MediaPlayer mp) { 
    Log.d("", "mp prepared"); 
    mp.start(); 

} 

@Override 
public void onCompletion(MediaPlayer arg0) { 
    sv.setVisibility(View.GONE); 
    mp.stop(); 
    mp.release(); 
    mMediaPlaying = false; 
    Log.d("", "Done playing media"); 

} 
+0

好吧,我删除了,如果(mp.isPlaying()),并添加mp.reset(),并播放音频的第一次,第二它播放一秒钟的音频,然后我得到“媒体服务器死亡”“错误(100,0)”“错误(100,0)” – bwoogie 2012-02-24 03:58:44

回答

0

好吧,我基本上是复制/粘贴this here的生命周期,它似乎是工作.. 。除了第一次播放还没有视频...但我摆脱了错误:)

3

如果你想播放视频,你可以使用VideoView。

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/media/VideoViewDemo.html

你也可以使用的MediaController来控制视频,如播放,暂停,快进和快退。

检查此链接例如。

http://android-coding.blogspot.in/2011/03/using-videoview-to-play-mp4-from-sdcard.html

+0

我不想要控件,我需要OnCompletionListener哪个videoview让你设置,但它似乎没有工作... – bwoogie 2012-02-24 05:13:27

+0

您可以在VideoView中使用Oncompletion侦听器 – John 2012-02-24 06:18:03

0

试试这个:

private void playVideo() { 
mMediaPlaying = true; 
sv.setVisibility(View.VISIBLE); //surfaceview 
try { 
    if(mp != null) { 
     mp.stop(); 
     mp.release(); 
    } 
    mp = new MediaPlayer(); 
    mp.setDisplay(sh); //surfaceholder 
    mp.setOnCompletionListener(this); 
    mp.setOnPreparedListener(this); 

    mp.setDataSource(getBaseContext(), Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.test)); 
    mp.prepare(); 
    mp.start();