마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

OpenGL사용시 VideoView로 동영상재생하는 법이 궁금합니다.

0 추천
public static int playVideo( int bState ) {


     MainRef.mVideoView.setVideoURI(Uri.parse("http://1.243.193.251:8008/external/Movie/prologue.mp4"));
     MainRef.mVideoView.setVisibility(View.VISIBLE);
     MainRef.mVideoView.start();
        
     MainRef.mVideoView.setOnTouchListener(new OnTouchListener() {
     public boolean onTouch(View v, MotionEvent event) {    
      MainRef.mVideoView.setVisibility(View.INVISIBLE);
      return false;
     } 
     });
     
  // 동영상 재생이 완료된걸 알수있는 리스너
     MainRef.mVideoView.setOnCompletionListener(new OnCompletionListener() {
   
     // 동영상 재생이 완료된후 호출되는 메서드
      public void onCompletion(MediaPlayer player) {
      MainRef.mVideoView.setVisibility(View.INVISIBLE);
     }
     
  });

     return 1;
 }

    @Override protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);
                          
        MainRef = this;
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(
                WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);

        if (hasGLES20()) {
            mGLView = new GL2JNIView(this);

            bSuccess = true;
        } else {
            // Time to get a new phone, OpenGL ES 2.0 not supported.
         CantRunningMessage();
        } 
        
        if( bSuccess )
        {
         FrameLayout frameLayout = new FrameLayout(this);
            frameLayout.addView(mGLView, new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT,FrameLayout.LayoutParams.FILL_PARENT));

         getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
         SetBrightness();
         
         mVideoView = new VideoView(this);
         mVideoView.setVisibility(View.INVISIBLE);
         frameLayout.addView(mVideoView, new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT,FrameLayout.LayoutParams.FILL_PARENT));
         
         setContentView(frameLayout);
        }

 

 

안드로이드 게임을 진행하는 도중에

중간에 삽입되는 동영상을 play시켜야 하는데요.

 

http://sudarnimalan.blogspot.kr/2012/06/android-play-video-on-top-of.html

여기를 참고해서 코드를 작성했는데..

이상하게 저희게임에서는 튕기네요 ㅠㅠ

 

 

저 링크에있는 소스처럼

일단 FrameLayout을 만들고..

그 레이아웃에 저희 게임이 보여지는 메인 OpenGlView와 비디오뷰를 addview했습니다.

그리고 게임에서 동영상을 play시키는 자바함수를 call하면

비디오뷰를 setVisibility(View.VISIBLE)로 설정하고

start()하거든요.

 

근데 여기서 항상 튕기네요.

게임이 중단되어버립니다.

 

제가 뭔가 잘못한건지.. ㅠㅠ 어떤방법을 써야

게임도중에 동영상을 플레이시킬 수 있는지요?

 

혹시나 해서 소스코드에서 뷰 초기화하는 부분과

동영상 플레이 함수도 올려봤습니다.

부디 답변해주세요 ㅠㅠ 급합니다. ㅠㅠ

 

엉금이 (120 포인트) 님이 2014년 2월 7일 질문
엉금이님이 2014년 2월 7일 수정

1개의 답변

0 추천
정확한건 로그를 봐야 알겠지만 Prepared도 되지 않은 상태에서 start가 호출 되어 illigalstateExceotion이 나온게 아닐까 합니다.

네트워크의 경우 로컬 파일과 달리 파일을 읽는데 시간이 걸려 prepared가 늦게 되거든요..

VideoView에 setOnPreparedListener 를 등록해서 prepared 이후 start 해보세요.
사악미소 (65,330 포인트) 님이 2014년 2월 7일 답변
...