Android 实现视频播放的两种方式

Android 端实现视频播放的两种方式
1、通过surfaceView+MediaPlayer 实现
2、使用VideoView+MediaController实现

一、通过surfaceView+MediaPlayer实现(多用于自定义开发播放器)
页面布局:sufaceView+SeekBar+ImageButton

<SurfaceView
        android:id="@+id/sfv_main_video"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="8" />

    <SeekBar
        android:id="@+id/sb_main_video"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <ImageButton
        android:id="@+id/ib_main_play"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:onClick="isPlayOrPause"
        android:src="@android:drawable/ic_media_play" />

java代码:


    /**
     * play or pause
     * 
     * @param view
     */
    public void isPlayOrPause(View view) {
        final ImageButton ib_main_play = (ImageButton) view;
        // 判断MediaPlay的状态
        if (mediaPlayer == null) { // 1、为空,也就是第一次

            // 实例化MediaPlayer
            mediaPlayer = new MediaPlayer();
            // 设置类型
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

            try {
                // 设置视频源
                // 内存卡
                mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/Download/sister.mp4"));
                // 需要准备(内存卡)
                mediaPlayer.prepare();


                // 将画面展示到surfaceView上
                mediaPlayer.setDisplay(sfv_main_video.getHolder());

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            // 准备完成监听
            mediaPlayer.setOnPreparedListener(new OnPreparedListener() {

                @Override
                public void onPrepared(MediaPlayer mp) {
                    // TODO Auto-generated method stub
                    // 播放
                    mediaPlayer.start();
                    // 改变图标
                    ib_main_play.setImageResource(android.R.drawable.ic_media_pause);
                    // 获取视频总时长
                    int duration = mediaPlayer.getDuration();
                    // 设置seekBar总长
                    sb_main_video.setMax(duration);
                    // 进度条
                    new MyThread().start();
                }
            });

        } else if (mediaPlayer.isPlaying()) { // 2、正在播放?
            mediaPlayer.pause();
            ib_main_play.setImageResource(android.R.drawable.ic_media_play);
        } else { // 3、暂停
            mediaPlayer.start();
            ib_main_play.setImageResource(android.R.drawable.ic_media_pause);
        }
    }
    /**
     * 进度条
     * 
     * @author L
     *
     */
    class MyThread extends Thread {
        @Override
        public void run() {
            // TODO Auto-generated method stub
            super.run();
            // 当前长度,是否大于最大值
            while (sb_main_video.getProgress() <= sb_main_video.getMax()) {
                // 获取当前播放进度
                int current = mediaPlayer.getCurrentPosition();
                sb_main_video.setProgress(current);
            }

        }
    }

二、使用VideoView+MediaController实现(单视频播放,类似于微博之类的小视频播放)
页面布局:VideoView

  <VideoView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/vv_main_video"/>

这种方法只需要在页面上使用VideoView控件

java代码:

        vv_main_video = (VideoView) findViewById(R.id.vv_main_video);

        //设置视频地址
        vv_main_video.setVideoPath("file://mnt/sdcard/Download/sister.mp4");
        //实例化一个MediaController(媒体控制器)
        MediaController mediaController = new MediaController(this);
        //添加关联
        vv_main_video.setMediaController(mediaController);
        mediaController.setMediaPlayer(vv_main_video);

上述两种方法都能实现视频播放,一个偏向于自定义播放器,另一个让自己的app可以播放视频

在此记录,供参考

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值