Android-多媒体之VideoView视频播放器

 视频播放器有两种方式
    1》.SurfaceView
    在布局文件中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_media_play"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="com.zking.android_contentresolve.MediaPlayActivity">


    <SurfaceView
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:id="@+id/sv_media_surface"
        />



    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
        <SeekBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/seekBar"
            android:layout_weight="1" />

        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@android:drawable/ic_media_play"
            android:onClick="isPlayOrPause"
            />
    </LinearLayout>
</LinearLayout>

在Activity里面和播放内存卡上音乐的代码差不多,只是视频多了个显示内容,关键代码就是这三条

             //播放内存上的视频
                mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/Movies/sister.mp4"));


                //准备(内存卡)
                mediaPlayer.prepare();

                //将媒体播放器捕捉的画面展示在SurfaceView 上
                mediaPlayer.setDisplay(sv_media_surface.getHolder());
但是没看前面博客的筒子可能会觉得看不懂,所以还是把完整的代码粘贴出来
public class MediaPlayActivity extends AppCompatActivity {
    private SeekBar seekBar;
    private MediaPlayer mediaPlayer;
    private SurfaceView sv_media_surface;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_media_play);
        seekBar = (SeekBar) findViewById(R.id.seekBar);
        sv_media_surface = (SurfaceView) findViewById(R.id.sv_media_surface);

        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                //获取拖动结束后的位置
                int progress=seekBar.getProgress();
                //跳转到某个位置播放
                mediaPlayer.seekTo(progress);
            }
        });
    }

    public void isPlayOrPause(View view){
        final ImageButton imageButton= (ImageButton) view;

        if(mediaPlayer==null){//代表第一次播放音乐

            //播放内存卡内的音频
            mediaPlayer=new MediaPlayer();
            //设置类型
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            //设置音源
            try {
                //播放内存上的视频
                mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/Movies/sister.mp4"));
                //准备(内存卡)
                mediaPlayer.prepare();

                //将媒体播放器捕捉的画面展示在SurfaceView 上
                mediaPlayer.setDisplay(sv_media_surface.getHolder());

                //必须在播放前加载音频文件(异步准备)
//                mediaPlayer.prepareAsync();

            } catch (IOException e) {
                e.printStackTrace();
            }

            mediaPlayer.start();
            //把图标改成暂停的图标(这里的暂停图标就是播放时的状态)
            imageButton.setImageResource(android.R.drawable.ic_media_pause);

            //获取音乐的总时长
            int duration=mediaPlayer.getDuration();
            //设置进度条的最大值为音乐的总时长
            seekBar.setMax(duration);

            new MyThread();
        }else if(mediaPlayer.isPlaying()){//正在播放音乐
            mediaPlayer.pause();
            //把图标改成播放的图标(暂停状态)
            imageButton.setImageResource(android.R.drawable.ic_media_play);
        }else{
            mediaPlayer.start();
            imageButton.setImageResource(android.R.drawable.ic_media_pause);
        }

    }

    class MyThread extends Thread{
        @Override
        public void run() {
            super.run();
            while(seekBar.getProgress()<seekBar.getMax()){
                //获取当前音乐播放的位置
                int currentPosition=mediaPlayer.getCurrentPosition();
                //让进度条跟着时间走
                seekBar.setProgress(currentPosition);

            }
        }
    }


}

这里写图片描述

2》VideoView,如果在项目中,仅仅只是播放视频的话,这种方式会比较简单,但是如果是要做视频播放器的话,还是使用第一种方法

布局文件


    <VideoView
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:id="@+id/vv_main_vedio"
        />

Activity

public class VedioActivity extends AppCompatActivity {

    private VideoView vv_main_vedio;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_vedio);
        vv_main_vedio = (VideoView) findViewById(R.id.vv_main_vedio);

        //给videoView设置播放来源
        vv_main_vedio.setVideoPath("file://mnt/sdcard/Movies/sister.mp4");

        //实例化媒体控制器
        MediaController mediaController=new MediaController(this);

        //给activity_vedio设置控制器
        vv_main_vedio.setMediaController(mediaController);

        mediaController.setMediaPlayer(vv_main_vedio);

    }
}

这里写图片描述

VideoView通过与MediaController类结合使用,开发者可以不用自己控制播放与暂停

猜你喜欢

转载自blog.csdn.net/qiuqiu_qiuqiu123/article/details/55046788