MediaPlayer视频问题

时间:2012-02-24 03:05:45

标签: android android-mediaplayer

我花了大约2个小时试图让它发挥作用。我用MediaPlayer来播放视频时从来没有太多运气。我在这做错了什么?它第一次播放音频,没有视频。然后在我尝试重新IllegalStateException时第二次得到setDataSource。我在stop()中尝试不调用release()onCompletion我在播放之前尝试过调用reset()。我只是得到了不同的StateExceptions(0,64,128)我已经没有想法了。

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");

}

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

必须在setDataSource之前调用mp.reset(), 看看MediaPlayer的生命周期 http://developer.android.com/reference/android/media/MediaPlayer.html

答案 2 :(得分:0)

好吧,我基本上复制/粘贴this here并且它似乎正在工作......除了第一次播放之外仍然没有视频......但我摆脱了错误:)

答案 3 :(得分: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();