2012-07-11 48 views
4

我一直在爲此苦苦掙扎2天... 遵循這個問題:https://stackoverflow.com/a/2006454/444324 - 提到可以通過改變MediaPlayerDemo_Video例子來播放GLSurfaceView中的視頻在API演示:在GLSurfaceView而不是SurfaceView中播放視頻

所有你需要做的還有一個 GLSurfaceView更換SurfaceView中均MediaPlayerDemo_Video.java在相應的佈局文件(mediaplayer_2.xml)文件以及 。

此外,您還需要創建一個自定義Renderer類(一個實現 GLSurfaceView.Renderer接口)並將其設置爲您的 GLSurfaceView。

我試着更換SurfaceView到GLSurfaceView的建議,也using this但它只是崩潰的開始:

07-11 14:54:22.086: E/AndroidRuntime(12373): FATAL EXCEPTION: main 
07-11 14:54:22.086: E/AndroidRuntime(12373): java.lang.NullPointerException 
07-11 14:54:22.086: E/AndroidRuntime(12373): at android.opengl.GLSurfaceView.surfaceCreated(GLSurfaceView.java:512) 
07-11 14:54:22.086: E/AndroidRuntime(12373): at android.view.SurfaceView.updateWindow(SurfaceView.java:533) 
07-11 14:54:22.086: E/AndroidRuntime(12373): at android.view.SurfaceView.access$000(SurfaceView.java:81) 
07-11 14:54:22.086: E/AndroidRuntime(12373): at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:169) 
07-11 14:54:22.086: E/AndroidRuntime(12373): at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:590) 
07-11 14:54:22.086: E/AndroidRuntime(12373): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1617) 
07-11 14:54:22.086: E/AndroidRuntime(12373): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442) 
07-11 14:54:22.086: E/AndroidRuntime(12373): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-11 14:54:22.086: E/AndroidRuntime(12373): at android.os.Looper.loop(Looper.java:137) 
07-11 14:54:22.086: E/AndroidRuntime(12373): at android.app.ActivityThread.main(ActivityThread.java:4575) 
07-11 14:54:22.086: E/AndroidRuntime(12373): at java.lang.reflect.Method.invokeNative(Native Method) 
07-11 14:54:22.086: E/AndroidRuntime(12373): at java.lang.reflect.Method.invoke(Method.java:511) 
07-11 14:54:22.086: E/AndroidRuntime(12373): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
07-11 14:54:22.086: E/AndroidRuntime(12373): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
07-11 14:54:22.086: E/AndroidRuntime(12373): at dalvik.system.NativeStart.main(Native Method) 

我知道我可以使用一個VideoView播放視頻,或只是留在SurfaceView與MediaPlayer,但我必須使用GLSurfaceView,因爲我需要此視頻在相機表面視圖頂部播放。

謝謝!

相關代碼: 我的XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <com.commonsware.android.camera.MyGLSurfaceView 
     android:id="@+id/surface" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" /> 

</LinearLayout> 

我的班級:

public class MediaPlayerDemo_Video extends Activity implements 
     OnBufferingUpdateListener, OnCompletionListener, 
     OnPreparedListener, OnVideoSizeChangedListener, SurfaceHolder.Callback { 

    private MediaPlayer mMediaPlayer; 
    private MyGLSurfaceView mPreview; 
    private SurfaceHolder holder; 

    /** 
    * 
    * Called when the activity is first created. 
    */ 
    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.mediaplayer_2); 
     mPreview = (MyGLSurfaceView) findViewById(R.id.surface); 
     holder = mPreview.getHolder(); 
     holder.addCallback(this); 
     holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

    } 
} 

MyGLSurfaceView類:

class MyGLSurfaceView extends android.opengl.GLSurfaceView { 
    public MyGLSurfaceView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 
} 

回答

1

OK,解決了這個...我有幾個錯誤,但我提出我的問題,最後的錯誤是通過將這一解決碼到的onCreate:

mPreview.setRenderer(new Renderer() { 

      @Override 
      public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onSurfaceChanged(GL10 gl, int width, int height) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onDrawFrame(GL10 gl) { 
       // TODO Auto-generated method stub 

      } 
     }); 
0

以及在一個地方,你都refereing到android.opengl.GLSurfaceView及其他到com.commonsware.android.camera.GLSurfaceView他們是不同的GLSurfaceView來自不同包裹的課程

+0

正如我所提到的「看起來像一個相當簡單的鑄造錯誤,但我找不到任何理由......」我不知道爲什麼它打印此錯誤消息。因爲我只用我的GLSurfaceView直接...在XML中我使用:com.commonsware.android.camera.GLSurfaceView和在Java中我導入我的類和導入是好的... – 2012-07-11 11:38:15

+0

更新了我的問題與相關的代碼 – 2012-07-11 11:44:55

0

爲什麼您實施與GLSurfaceView同名的課程(com.commonsware.android.camera.GLSurfaceView)?

如果聲明的視圖佈局XML的android.opengl.GLSurfaceView你不能將它轉換爲com.commonsware.android.camera.GLSurfaceView

+0

我也嘗試重命名它(甚至刪除並創建一個名爲MyGLSurfaceView的新的)...同樣的錯誤。 – 2012-07-11 11:38:58

+0

用相關代碼更新了我的問題。 – 2012-07-11 11:45:07

相關問題