Android视频播放器的来世今生

android音视频探究
1 获取mediaplayer 实例 
        final MediaPlayer mediaPlayer = new MediaPlayer();
        //[2]设置你要播放的音频资源的路径    path:可以是网络路径 也可以是本地路径
        try {
            mediaPlayer.setDataSource("http://169.254.87.250:8080/xpg.mp3");
            //[3]准备播放 
           //mediaPlayer.prepare();
            mediaPlayer.prepareAsync();
            mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    //[4]开始播放 
                    mediaPlayer.start();
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
2 surfaceview介绍
   补充:native方法:是c或者c++实现的
c语言已经帮我们开了子线程   所以我们不用开子线程了
   注意:播放视频  只支持3gp  或者 MP4格式   rmvb avi
   [1]surfaceView 是一个重量级控件  
   [2]内部维护了2个线程  A  ----加载数据 ----显示数据
                       B  ----负责显示  ---加载数据 
   [3]可以直接在子线程更新ui 
   实现代码
       private MediaPlayer mediaPlayer;
    private int currentPosition; //当前视频播放的位置 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SurfaceView sfv = (SurfaceView) findViewById(R.id.sfv);
        // [1.1]获取 surfaceHolder
        SurfaceHolder holder = sfv.getHolder();
        holder.addCallback(new Callback() {
            //sufrfaceView销毁了
            @Override
            public void surfaceDestroyed(SurfaceHolder holder) {
                System.out.println("surfaceDestroyed");
                if (mediaPlayer!=null && mediaPlayer.isPlaying()) {
                    //正在播放 
                    //获取到当前播放的位置 
                    currentPosition = mediaPlayer.getCurrentPosition();
                    //停止播放 
                    mediaPlayer.stop();
                }
            }
            //说明sufrfaceView 准备好了 
            @Override
            public void surfaceCreated(SurfaceHolder holder) {
                //在这个方法里面去播放视频
                try {
                    // [1]获取mediaplayer 实例
                     mediaPlayer = new MediaPlayer();
                    mediaPlayer.setDataSource("http://169.254.87.250:8080/cc.MP4");
                    // [3]准备播放
                    mediaPlayer.prepareAsync();
                    // [3.1]设置视频播放的内容 显示的位置 surfaceHolder 用来维护视频的内容
                    mediaPlayer.setDisplay(holder);
                    mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
                        @Override
                        public void onPrepared(MediaPlayer mp) {
                            // [4]开始播放
                            mediaPlayer.start();
                            
                            //[5]继续上次的位置继续播放 
                            mediaPlayer.seekTo(currentPosition);
                        }
                    });
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            @Override
            public void surfaceChanged(SurfaceHolder holder, int format, int width,
                    int height) {
            }
        });
    }
3 videoView控件的使用 
   2行代码搞定 
   videoView是对 SurfaceView 和 mediaPlayer 的封装 
github优秀控件:https://github.com/lipangit/JieCaoVideoPlayer
4 vitamio 
    打造万能的视频播放器 
    类库
    解码的原理:使用的是ffmpeg这样的一个开源项 
vitamio官网:https://www.vitamio.org/docs/Tutorial/2014/0423/32.html
github优秀控件:https://github.com/yixia/VitamioBundle/tree/v3.0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值