• Android应用开发学习笔记之播放视频


    作者:刘昊昱 

    博客:http://blog.csdn.net/liuhaoyutz

    在Android中,我们可以通过使用VideoView类或者MediaPlayer类来播放视频。

    一、使用VideoView类播放视频

    要使用VideoView类播放视频,首先要在布局文件中添加VideoView组件,然后在Activity中获取该组件,并使用VideoView.setVideoPath()或VideoView.setVideoURI()方法加载需要播放的视频,最后调用start()方法播放视频。VideoView类还提供了stop()和pause()方法,用于停止或暂停视频播放。

    在布局文件中添加VideoView组件的基本语法格式如下:

    <VideoView

             属性列表>

    </VideoView>

    Android还提供了一个与VideoView组件结合使用的MediaController组件。MediaController组件用于通过图形控制界面来控制视频的播放。

    下面我们来看一个使用VideoView和MediaController组件播放视频的例子,由于在模拟器上播放不了视频,所以这里就不上图了,我在真机上验证过可以播放视频,直接看代码:

    先来看主布局文件main.xml,其内容如下:

     

    <?xml version="1.0"encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
     
       <VideoView
            android:id="@+id/video"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center" />
     
    </LinearLayout>


    下面看主Activity文件,其内容如下:

     

    package com.liuhaoyu;
     
    import java.io.File;
     
    import android.app.Activity;
    import android.media.MediaPlayer;
    import android.media.MediaPlayer.OnCompletionListener;
    import android.os.Bundle;
    import android.widget.MediaController;
    import android.widget.Toast;
    import android.widget.VideoView;
     
    public classMainActivity extends Activity {
        private VideoView video;
       
       /** Called when the activity is firstcreated. */
       @Override
       publicvoidonCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
           
            video=(VideoView) findViewById(R.id.video);
            File file=new File("/sdcard/1.mp4");
            MediaController mc=newMediaController(MainActivity.this);       // 创建一个MediaController对象
            if(file.exists()){
            video.setVideoPath(file.getAbsolutePath());
            video.setMediaController(mc);       // 将VideoView与MediaController关联起来
            video.requestFocus();       // 设置VideoView获取焦点
            try {
                    video.start();      // 播放视频
                }catch(Exception e) {
                    e.printStackTrace();
                }
           
            // 设置VideoView的Completion事件监听器
            video.setOnCompletionListener(new OnCompletionListener(){             
                    @Override
                    public voidonCompletion(MediaPlayer mp) {
                        Toast.makeText(MainActivity.this, "视频播放完毕!", Toast.LENGTH_SHORT).show();
                    }
                });
            }else{
            Toast.makeText(this, "要播放的视频文件不存在", Toast.LENGTH_SHORT).show();
            }
       }
    }


    二、 使用MediaPlayer播放视频

    MediaPlayer不但可以播放音乐,也可以播放视频,但是MediaPlayer没有提供视频输出界面,所以,用MediaPlayer播放视频需要和SurfaceView组件配合使用,其主要流程如下:

    (1)、在布局文件中插入SurfaceView组件,其语法格式如下:

    <SurfaceView

             android:id=”@+id/ID号”

             android:background=”背景”

             android:keepScreenOn=”true|false”

             android:layout_width=”宽度”

             android:layout_height=”高度” />

    (2)、创建MediaPlayer对象,并加载要播放的视频。加载视频的方法和上一篇文章中介绍的加载音频的方法一样,这里不再详述。

    (3)、将视频画面输出到SurfaceView,语法格式如下:

    MediaPlayer.setDisplay(SurfaceHolder sh)

    参数sh用于指定SurfaceHolder对象,可以通过SurfaceView.getHolder()方法获得。

    (4)、调用MediaPlayer的play()、stop()、pause()等方法控制视频播放。

    下面来看一个例子:

    先来看主布局文件,其内容如下:

     

    <?xml version="1.0"encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        android:orientation="vertical" >
     
       <SurfaceView
            android:id="@+id/surfaceView1"
            android:keepScreenOn="true"
            android:layout_width="576px"
            android:layout_height="432px"/>
     
       <LinearLayout
            android:id="@+id/linearLayout1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
     
            <Button
               android:id="@+id/play"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="播放" />
     
            <Button
               android:id="@+id/pause"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:enabled="false"
               android:text="暂停" />
     
            <Button
               android:id="@+id/stop"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="停止" />
       </LinearLayout>
     
    </LinearLayout>


    下面我们看主Activity文件,其内容如下:

     

    package com.liuhaoyu;
     
    import java.io.IOException;
     
    import android.app.Activity;
    import android.media.MediaPlayer;
    import android.media.MediaPlayer.OnCompletionListener;
    import android.os.Bundle;
    import android.view.SurfaceView;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
     
    public classMainActivity extends Activity {
        private MediaPlayer mp;
        private SurfaceView sv;
       @Override
       publicvoidonCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            mp=new MediaPlayer();
            sv=(SurfaceView)findViewById(R.id.surfaceView1);
            Button play=(Button)findViewById(R.id.play);
            final Button pause=(Button)findViewById(R.id.pause);
            Button stop=(Button)findViewById(R.id.stop);
          
            play.setOnClickListener(new OnClickListener() {
               
                @Override
                public void onClick(View v) {
                    mp.reset();
                    try {
                        mp.setDataSource("/sdcard/1.mp4");
                        mp.setDisplay(sv.getHolder());
                        mp.prepare();
                        mp.start();
                        pause.setText("暂停");
                        pause.setEnabled(true);
                    }catch(IllegalArgumentException e) {
                        e.printStackTrace();
                    }catch(SecurityException e) {
                        e.printStackTrace();
                    }catch(IllegalStateException e) {
                        e.printStackTrace();
                    }catch(IOException e) {
                        e.printStackTrace();
                    }
                   
                }
            });
           
            stop.setOnClickListener(new OnClickListener() {
               
                @Override
                public void onClick(View v) {
                    if(mp.isPlaying()){
                        mp.stop();
                        pause.setEnabled(false);
                    }
                   
                }
            });
           
            pause.setOnClickListener(new OnClickListener() {
               
                @Override
                public void onClick(View v) {
                    if(mp.isPlaying()){
                        mp.pause();
                        ((Button)v).setText("继续");
                    }else{
                        mp.start();
                        ((Button)v).setText("暂停");
                    }
                   
                }
            });
           
            mp.setOnCompletionListener(new OnCompletionListener(){
               
                @Override
                public voidonCompletion(MediaPlayer mp) {
                    Toast.makeText(MainActivity.this, "视频播放完毕!", Toast.LENGTH_SHORT).show();
                }
            });
           
       }
        @Override
        protected void onDestroy() {
            if(mp.isPlaying()){
                mp.stop();
            }
            mp.release();
            super.onDestroy();
        }
       
    }


  • 相关阅读:
    Maven跳过测试
    Maven教程
    使用订单号加锁
    SpringMVC重定向路径中带中文参数
    并发文章
    maven clean插件使用进阶
    线程池基础
    Session中短信验证码设置有效时间
    Linux命令
    下载并安装Cent OS 6.5
  • 原文地址:https://www.cnblogs.com/riskyer/p/3275708.html
Copyright © 2020-2023  润新知