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

来源:互联网 发布:反应热效应的测定数据 编辑:程序博客网 时间:2024/04/30 07:19

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 0
原创粉丝点击