SurfaceView пусто при воспроизведении видео с помощью медиаплеера - PullRequest
6 голосов
/ 08 июля 2011

Это мой код, но когда я запускаю медиаплеер, у него появляется только звук, а на поверхности ничего не отображается. Почему?

Понятия не имею. У вас есть какой-нибудь код, помогающий мне учиться с этим.

    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 ]

5 голосов
/ 07 ноября 2012

Попробуйте добавить после

sh.addCallback(this);

это

sh.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

В моем случае это было полезно.

3 голосов
/ 02 сентября 2011

Вы добавили готового слушателя?Я реализовал запуск в этом методе, так как это триггер, который указывает, когда видео готово к просмотру.

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();
}
1 голос
/ 08 июля 2011


попробуйте этот код.

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

Также взгляните на этот учебник

0 голосов
/ 08 октября 2018

Это может быть полезно для начинающих разработчиков 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
    }

Чтобы узнать разницу между SurfaceView и TextureView см. эту ссылку .

...