视频播放器

来源:互联网 发布:国产cad软件排行 编辑:程序博客网 时间:2024/06/09 18:03

                                                   视频播放器

播放视频的三种方式:

   1.调用系统播放器的应用播放视频

   2.VideoView+MediaController的方式播放视频

   3.MediaPlayer+SurfaceHolder的方式

方式1.

      使用Intent 隐式跳转(Action)Intent.Action_View

      Intent intent=new Intent(Intent.Action_View);

      Uri data=Uri.parse("mnt/sdcard/xxx.mp4");//放网址试试

      intent.setDataAndType(data,"video/mp4");

      startActivity(intent);

     

      第三方权限可读  SD卡的




方式2.

      VideoView  结合 MediaController 播放视频

      VideoView用于播放视频文件,可以计算和维护视频的画面尺寸使其适用于任何布局管理器,并提供一些诸如缩放,着色之类的显示选项.

      MediaController

      一个包含媒体播放器的(MediaPlayer)的控件的视图,包含了一些典型的按钮,像"播放play/暂停pause,"倒带Rewind","快进(FastForward)"与"与进度滑动器"(progress slider),它管理媒体播放器(MediaController)的状态以保持控件的同步.

      Videoview  vv=(Videoview)findviewByid;

      vv.setVideoPath("mnt/sdcard/...mp4");

      MediaController   controller=newMediaController(this);

      controller.setMediaPlayer(vv);

      vv.setMediaController(controller);



方式3.

      SurfaceView

      具有双缓冲机制的View,继承自View,用来播放视频,做游戏等频繁刷新界面的功能.

      可以在子线程中更新UI,不会导致主线程阻塞ANR.


       先找SV控件创建MediaPlayer()   要设置上Path  俩种create或者setData...

       public class MainActivity extends Activity {

    
    private SurfaceView surfaceView;
    private MediaPlayer mediaPlayer;
    SurfaceHolder sh;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /**
         * 双缓冲机制    
         * 第1个线程  先更新UI  后计算
         *
         * 第2个线程  先计算   后更新UI
         */
        
        surfaceView=(SurfaceView) findViewById(R.id.surgfaceview);
        //加载视频路径
        mediaPlayer=MediaPlayer.create(this, Uri.parse("mnt/sdcard/yellowMan.mp4"));
   
        new Thread(){
            public void run() {
                sh=surfaceView.getHolder();
                sh.addCallback(new Callback() {
                    
                    //销毁之后
                    @Override
                    public void surfaceDestroyed(SurfaceHolder holder) {
                        // TODO Auto-generated method stub
                    
                        mediaPlayer.stop();

                      mediaPlayer.relase();

                       mediaPlayer=null;

                    }
                    //创建完成
                    @Override
                    public void surfaceCreated(SurfaceHolder holder) {
                        // TODO Auto-generated method stub
                        
                        mediaPlayer.setDisplay(sh);
                        mediaPlayer.start();
                        
                    }
                    
                    @Override
                    public void surfaceChanged(SurfaceHolder holder, int format, int width,
                            int height) {
                        // TODO Auto-generated method stub
                        
                    }
                });
                
             
            };
        }.start();
    
    }
}

   













    



原创粉丝点击