【问题标题】:SurfaceView blank when play video usinng mediaplayer使用媒体播放器播放视频时 SurfaceView 空白
【发布时间】:2011-10-01 01:18:10
【问题描述】:

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

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

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

【问题讨论】:

    标签: android media-player surfaceview


    【解决方案1】:

    尝试在后面添加

    sh.addCallback(this);
    

    这个

    sh.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    

    就我而言,这很有帮助。

    【讨论】:

    • 从 Honeycomb 开始,不推荐使用 setType 方法。
    【解决方案2】:

    您是否添加了准备好的监听器?我在该方法中实现了 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();
    }
    

    【讨论】:

      【解决方案3】:


      试试这个代码。

      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

      【讨论】:

        【解决方案4】:

        这可能对 android 新手开发人员或任何会看到此内容的人有益。

        在我的例子中,在OnCreate 中使用这个sn-p 方法可以帮助我找出哪个设备可以使用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

        【讨论】:

          猜你喜欢
          • 2014-09-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多