zoukankan      html  css  js  c++  java
  • 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();
        }
       
    }


  • 相关阅读:
    XAML学习笔记之Layout(五)——ViewBox
    XAML学习笔记——Layout(三)
    XAML学习笔记——Layout(二)
    XAML学习笔记——Layout(一)
    从0开始搭建SQL Server 2012 AlwaysOn 第三篇(安装数据,配置AlwaysOn)
    从0开始搭建SQL Server 2012 AlwaysOn 第二篇(配置故障转移集群)
    从0开始搭建SQL Server 2012 AlwaysOn 第一篇(AD域与DNS)
    Sql Server 2012 事务复制遇到的问题及解决方式
    Sql Server 2008R2升级 Sql Server 2012 问题
    第一次ACM
  • 原文地址:https://www.cnblogs.com/riskyer/p/3275708.html
Copyright © 2011-2022 走看看