How to attach MediaPlayer with SurfaceView in android?

前端 未结 2 1929
悲哀的现实
悲哀的现实 2020-12-13 21:51

I\'m building video player with android media player object. i\'m able to hear the audio but the video does not appear on surfaceView. here is my code

pub         


        
相关标签:
2条回答
  • 2020-12-13 22:21

    It is not working for me, throwing error illegal state exception in surfaceCreated() method at line mp.setDisplay(holder);

    Declare mp.setDisplay(holder) as given below :

    @Override
    public void surfaceCreated(SurfaceHolder holder) 
    {  
        mediaPlayer.setDataSource(this,uri);
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mediaPlayer.prepare(); 
        mp.setDisplay(holder);
        mp.start;
    }
    
    0 讨论(0)
  • 2020-12-13 22:25

    finally i fixed it myself. just called the mp.setDisplay(holder); inside the surfaceCreated() function. and the final code is

    public class PlayerActivity extends Activity implements SurfaceHolder.Callback {
        String path;
        private MediaPlayer mp;
        private SurfaceView mPreview;
        private SurfaceHolder holder;
        boolean pausing = false;
        public static String filepath;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_player);
    
            getWindow().setFormat(PixelFormat.UNKNOWN);
            mPreview = (SurfaceView)findViewById(R.id.surfaceView);
            holder = mPreview.getHolder();
            holder.setFixedSize(800, 480);
            holder.addCallback(this);
            holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
            mp = new MediaPlayer();
    
    
            try{
                Intent intent = getIntent();
    
                Uri fileuri = intent.getData();
                filepath=fileuri.getPath();
            }catch(Exception e){}
    
    
        }
        protected void onPause(){
            super.onPause();
            mp.release();
        }
    
        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width,
                int height) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            // TODO Auto-generated method stub
            mp.setDisplay(holder);
            play();
        }
    
        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            // TODO Auto-generated method stub
    
        }
        void play(){
            try {
                mp.setDataSource(filepath);
    
                mp.prepare(); 
    
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            mp.start();
        }
    }
    
    0 讨论(0)
提交回复
热议问题