使用mediaplayer播放视频时,SurfaceView为空白

时间:2011-07-08 07:07:07

标签: android media-player surfaceview

这是我的代码,但是当我启动媒体播放器时,它只有声音出来而表面没有任何显示。为什么呢?

我对此一无所知。你有一些代码可以帮我学习吗?

    videoV = (SurfaceView) findViewById(R.id.SurfaceView1);
    sh = videoV.getHolder();

    File path = Environment.getExternalStorageDirectory();
    File file = new File(path, "sample2.mp4");

    sh.addCallback(this);     
    mp = new MediaPlayer();
    mp.setDataSource(file.getAbsolutePath());
    mp.setDisplay(sh);
    mp.prepare();
    mp.start();

4 个答案:

答案 0 :(得分:5)

尝试在

之后添加
sh.addCallback(this);

sh.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

就我而言,它很有帮助。

答案 1 :(得分:3)

您是否添加了准备好的听众?我在该方法中实现了start,因为它是触发器,指示视频何时可以呈现。

sh.addCallback(this);     
mp = new MediaPlayer();
mp.setDataSource(file.getAbsolutePath());
mp.setDisplay(sh);
mp.setOnPreparedListener(this);
mp.prepare();

public void onPrepared(MediaPlayer arg0) {
    mp.start();
}

答案 2 :(得分:1)

尝试此代码。

resource是您要播放的文件名,one.two是您的路径可能与android.resource://package_name/raw/file_name

一样的包名称
VideoView video=(VideoView) findViewById(R.id.videoview);
MediaController mediaController = new MediaController(this);
mediaController.setAnchorView(video);
video.setMediaController(mediaController);
//Uri uri = Uri.parse("android.resource://play.vedio/"+R.raw.dobeernotdrugs);
video.setKeepScreenOn(true);
video.setVideoPath("android.resource://one.two/raw/"+resource);
video.start();
video.requestFocus();

另请查看此tutorial

答案 3 :(得分:0)

  

这对于新手android开发人员或将看到此内容的任何人都是有益的。

就我而言,在OnCreate方法中使用此代码段有助于我找出哪些设备可以使用SurfaceView

    if (
            GLES20.glGetString(GLES20.GL_RENDERER) == null ||
                    GLES20.glGetString(GLES20.GL_VENDOR) == null ||
                    GLES20.glGetString(GLES20.GL_VERSION) == null ||
                    GLES20.glGetString(GLES20.GL_EXTENSIONS) == null ||
                    GLES10.glGetString(GLES10.GL_RENDERER) == null ||
                    GLES10.glGetString(GLES10.GL_VENDOR) == null ||
                    GLES10.glGetString(GLES10.GL_VERSION) == null ||
                    GLES10.glGetString(GLES10.GL_EXTENSIONS) == null) {
        // try to use SurfaceView
    } else {
        // try to use TextureView
    }

要了解SurfaceViewTextureView之间的区别,请参见this link