The surface has been released when I try to setDisplay to MediaPlayer

后端 未结 6 675
忘掉有多难
忘掉有多难 2021-01-03 22:23

My xml file:



        
6条回答
  •  盖世英雄少女心
    2021-01-03 23:00

    Make use of SurfaceHolder.Callback as below

    SurfaceView mSurfaceView = (SurfaceView) findViewById(R.id.surfaceView);
    SurfaceHolder holder = mSurfaceView.getHolder();
    final MediaPlayer player = new MediaPlayer();
    
    holder.addCallback(new SurfaceHolder.Callback() {
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            player.setDisplay(holder);
        }
    
        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, 
        int height) {
    
        }
    
        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
    
        }
    });
    
    String UrlPath="android.resource://"+getActivity().getPackageName()+"/"+R.raw.your_file_name_without_extension;
    try {
        player.setDataSource(getActivity(),Uri.parse(UrlPath));
        player.prepareAsync();
    } catch (IOException e) {
        e.printStackTrace();
    }
    player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    
        @Override
        public void onPrepared(MediaPlayer mp) {
            mp.start();
        }
    });
    

提交回复
热议问题