Android多媒体功能开发(8)——使用VideoView控件播放视频

Android播放视频类主要有两种方式:

  1. VideoView控件
  2. SurfaceView控件+MediaPlayer

VideoView是SurfaceView的子类,实际上VideoView相当于SurfaceView + MediaPlayer。SurfaceView支持的功能VideoView都支持。也可用VideoView+MediaPlayer的方式播放。

视频播放控制可以使用MediaController控件,也可以用代码进行控制。MediaController是一个播放控制面板,可以加到VideoView控件上。同时,SurfaceView和VideoView都提供了播放控制的方法,所以可以用代码进行播放控制。


用VideoView播放视频的基本步骤是:创建或获取VideoView控件、设置视频数据源、开始播放、停止播放、释放资源。播放过程中可以暂停和继续。停止播放后可以恢复,此时会再从头播放。也可以重新设置视频数据源,播放另一个视频。基本流程和对应的代码如下图:

下面用一个简单的例子进行说明,界面和对应的关键代码如下:

视频源采用外部存储上的视频,通过视频选择界面进行选择。若要播放资源ID或assets中的文件,需采用VideoView+MediaPlayer的方式。在界面上用四个按钮对应VideoView对象的相应方法进行播放控制。设置一个播放控制面板,需点击视频才能出现,会自动隐藏。

例子的完整代码如下:

扫描二维码关注公众号,回复: 14723781 查看本文章
public class MainActivity extends AppCompatActivity {
    VideoView videoView;
    static final int PICK_VIDEO = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout ll = new LinearLayout(this);
        ll.setOrientation(LinearLayout.VERTICAL);
        setContentView(ll);

        Button btnSelect = new Button(this);
        btnSelect.setText("Select Video");
        ll.addView(btnSelect);
        btnSelect.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View arg0) {
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);   //  选择文件动作
                intent.setType("video/*");
                startActivityForResult(intent, PICK_VIDEO); //  启动文件选择应用
            }
        });
        Button btnPlay = new Button(this);
        btnPlay.setText("Play");
        ll.addView(btnPlay);
        btnPlay.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View arg0) {
                videoView.start();
            }
        });
        Button btnPause = new Button(this);
        btnPause.setText("Pause");
        ll.addView(btnPause);
        btnPause.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View arg0) {
                videoView.pause();
            }
        });
        Button btnResume = new Button(this);
        btnResume.setText("Resume");
        ll.addView(btnResume);
        btnResume.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View arg0) {
                videoView.resume();
            }
        });
        Button btnStop = new Button(this);
        btnStop.setText("StopPlayback");
        ll.addView(btnStop);
        btnStop.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View arg0) {
                videoView.stopPlayback();
            }
        });

        // 创建VideoView对象
        videoView = new VideoView(this);
        // 设置播放控制面板
        MediaController controller = new MediaController(this);
        videoView.setMediaController(controller);
        // 将VideoView控件添加到布局
        ll.addView(videoView);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //  处理选择视频的结果,选中的图片文件的uri保存在Intent的getData()中
        if (requestCode == PICK_VIDEO && resultCode == RESULT_OK) {
            Uri uri = data.getData();   //  得到选中的视频文件的uri
            Log.i("zzk", "选择视频成功, uri=" + uri);
            videoView.setVideoURI(uri);
        }
    }

    @Override
    protected void onDestroy(){
        super.onDestroy();
        videoView.suspend();
    }
}

VideoView类的主要方法包括:

  • void setVideoPath(String path):以文件路径的方式设置视频源
  • void setVideoURI(Uri uri):以Uri的方式设置视频源,网络Uri或本地Uri
  • void start():开始播放
  • void pause():暂停,调用start()可以继续
  • void stopPlayback():停止播放,调用resume()可以从头重新播放
  • void resume():重新播放
  • int getDuration():获取当前播放视频的总长度,单位为毫秒
  • int getCurrentPosition():获取当前播放的位置,单位为毫秒
  • void seekTo(int msec):从第几毫秒开始播放
  • isPlaying():是否在播放视频
  • setMediaController(MediaController controller):设置MediaController控制器
  • setOnCompletionListener(MediaPlayer.onCompletionListener l):设置监听播放完成的事件
  • setOnPreparedListener(MediaPlayer.OnPreparedListener l):设置监听视频装载完成的事件

猜你喜欢

转载自blog.csdn.net/nanoage/article/details/127406494