Воспроизведение видео поверх просмотра OpenGL в Android - PullRequest
5 голосов
/ 06 февраля 2012

Я разрабатываю игру, используя cocos2d-x, и хочу воспроизвести в ней видео. У действия есть одно представление OpenGL, и я также поместил дополнительный VideoView поверх него и установил видимость для INVISIBLE.

Когда мне нужно воспроизвести видео, я просто скрываю представление OpenGL и включаю мой VideoView. После этого я создаю MediaPlayer, вызываю setDisplay с держателем этого VideoView и т. Д., И в конце концов видео воспроизводится хорошо. Когда видео заканчивается, я снова переключаю видимость - opengl на VISIBLE и videoview на INVISIBLE.

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

Есть ли улов с видимостью?

Ответы [ 3 ]

3 голосов
/ 27 июня 2012

Я только что изменил ApiDemo, чтобы посмотреть, работает ли он. У меня в блоге полный код здесь: пост без использования отдельного медиаплеера для просмотра видео мы можем установить видео и воспроизвести

   mVideoView.setVideoURI(data.getData());
   mVideoView.setVisibility(View.VISIBLE);
   mVideoView.start();

   //I could add touch listener in onCreate
    mGLSurfaceView.setOnTouchListener(...);

//touch event will go all the way down to GLSurfaceView
//Here i could chnage the video view position
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
    mVideoView.setTranslationX(motionEvent.getX());
    mVideoView.setTranslationY(motionEvent.getY());
    return true;
}
1 голос
/ 27 июня 2012

Вы можете сделать это, добавив динамический просмотр видео на поверхности glview.Сначала создайте родительский вид (любой макет), добавьте вид видео в том же родительском виде, а затем добавьте этот родительский вид в вид поверхности gl.Я делал это раньше, и это работало на меня.для справки:

     // first set the content view as your glview with your params.
     setContentView(mGLView, gl_params);
     mGLView.setZOrderMediaOverlay(false);

     // add a parent view for video view. rl is relative layout
     addContentView(rl, rl_params);

     // now add the video view inside this parent view.
     rl.addview(video_view, video_view_params)
1 голос
/ 27 июня 2012

Для воспроизведения видео вам понадобится просмотр поверхности с использованием класса Android MediaPlayer.

Чтобы воспроизвести видео поверх GLSurfaceView, создайте пользовательский диалог Android, который содержит SurfaceView, и воспроизводите видео на нем.

...