Android 视频播放器vitamio框架

来源:互联网 发布:数据库建设的意义 编辑:程序博客网 时间:2024/06/16 11:25

项目简介:

该项目为视频播放器,使用Vitamio框架完成。
vitamio框架下载地址:到这里去
另外,使用Android原生的VideoView播放视频请 参考
使用SurfaceView+MediaPlayer播放视频请参考

详细介绍:

用户点击按钮后,进入另一个Activity并开始播放视频。无论是用户用home键返回桌面还是用返回键返回上一个Activity,只要该应用程序所在进程没有被杀死,在此进入该视频将继续接着上次位置开始播放

该应用涉及到的知识有:

  • 1.vitamio 框架
    vitamio 是封装了FFMPEG的视频播放框架,对外提供的接口全部都是java API。该框架使用用法类似与VideoView,该框架最大的好处是方法名几乎与VideoView一样
    注意该框架给的并不是一个jar包,而是一个类库。

  • 2.如何让自己的项目关联类库:

注意:

  • 1.相关的视频框架还有百度媒体云,但是我没用过
  • 2.使用vitamio框架,一定要在清单文件中注册vitamio中的Activity
     <activity android:name="io.vov.vitamio.activity.InitActivity"></activity>

如果没有添加这一句,可能会出现这样的错误

Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {hhh.exercise.smultimedia/io.vov.vitamio.activity.InitActivity}; have you declared this activity in your AndroidManifest.xml?

步骤:

1.首先要把vitamio框架导入到Eclipse中(框架下载地址请看项目简介上,有地址)

首先就是与导入普通的Android项目,一样,点击Eclipse中的 File –》Import –》Existing Project into Workspace –》Browse  ,然后选中vitamio_lib,点击finish。然后点击Vitamio,鼠标右键后点击properties,选中is Library的钩即可

这里写图片描述

2.创建一个Android项目,然后让自己的项目关联类库

点击自己的项目,然后点击鼠标右键,点击properties,选中Android,点击add按钮,选中vitamio_lib,点击ok,关联类库就完成了。

这里写图片描述

2.创建两个布局文件。

第一个布局文件为activity_main.xml,这个布局文件十分简单,只有一个按钮:

import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    public void click(View v) {        Intent it = new Intent(this, ThirdActivity.class);        startActivity(it);    }}

第二个布局文件为activity_third.xml,里面只有一个VideoView控件,用来播放视频。注意这里的VideoView是vatimio自定义的控件,而不是android的原生控件,所以要加上包名:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <io.vov.vitamio.widget.VideoView        android:id="@+id/vvv"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></LinearLayout>

3.编写Activity代码

首先是MainActivity的代码,这个Activity只有一个作用,那就是跳转到视频播放界面:

import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    public void click(View v) {        Intent it = new Intent(this, ThirdActivity.class);        startActivity(it);    }}

然后是ThirdActivity的代码,这个Activity就是控制视频的播放的:

import java.io.File;import android.app.Activity;import android.content.pm.ActivityInfo;import android.os.Bundle;import android.os.Environment;import android.util.Log;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.widget.Toast;import android.view.Window;import android.view.WindowManager;import io.vov.vitamio.LibsChecker;import io.vov.vitamio.MediaPlayer;import io.vov.vitamio.MediaPlayer.OnCompletionListener;import io.vov.vitamio.widget.MediaController;import io.vov.vitamio.widget.VideoView;/** * @author HHH * */public class ThirdActivity extends Activity {    private VideoView vvv;    private MediaController mc;    private static long thirdCurrentPosition;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // 隐藏标题栏        requestWindowFeature(Window.FEATURE_NO_TITLE);        // 设置横屏        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);        // 设置全屏        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);        setContentView(R.layout.activity_third);        final File file = new File(Environment.getExternalStorageDirectory().getPath(), "s2.mkv");        // 检测是否支持vitamio引擎是否安装.因为该框架内置了FFMPEG,他是自己调用C语言作视频的编解码,需要硬件的支持。如果硬件不支持,无法编码        // 如果vitamio引擎没有安装,则自动安装,若安装不来,就结束程序        // vitamio引擎检测是需要配置一个Activity:io.vov.vitamio.activity.InitActivity,因为检测是在该Activity中做的        if (!LibsChecker.checkVitamioLibs(this)) {            return;        }        vvv = (VideoView) findViewById(R.id.vvv);        mc = new MediaController(this);        // 指定要播放的视频        vvv.setVideoPath(file.getPath());        SurfaceHolder surfaceHolder = vvv.getHolder();        surfaceHolder.addCallback(new Callback() {            @Override            public void surfaceDestroyed(SurfaceHolder holder) {                Log.i("HHH", "销毁");            }            @Override            public void surfaceCreated(SurfaceHolder holder) {                if (file.exists()) {                    // 设置要播放的视频                    vvv.setVideoPath(file.getPath());                    // 设置VideoView与MediaController相关联                    vvv.setMediaController(mc);                    // 设置VideoView获取焦点                    vvv.requestFocus();                    // 开始播放视频(如果上次有播放记录,接着上次播放)                    vvv.start();                    vvv.seekTo(thirdCurrentPosition);                } else {                    Toast.makeText(getApplicationContext(), "视频不存在", 0).show();                }            }            @Override            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {                Log.i("HHH", "改变");            }        });        // 播放完毕后,重新开始播放        vvv.setOnCompletionListener(new OnCompletionListener() {            @Override            public void onCompletion(MediaPlayer mp) {                mp.seekTo(0);                mp.start();            }        });    }    // 当Activity退出界面(无论Activity是否销毁了),记录当前视频播放进度    @Override    protected void onPause() {        if (vvv.isPlaying()) {            thirdCurrentPosition = vvv.getCurrentPosition();            vvv.pause();            vvv.suspend();        }        super.onPause();    }}

4.清单文件

首先要在清单文件中注册Activity

 <activity android:name=".ThirdActivity" >        </activity>         <activity android:name="io.vov.vitamio.activity.InitActivity"></activity>

添加权限

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

5.部署一下,看看效果

进入该应用,点击按钮看个片压压惊

这里写图片描述

这是视频格式是mkv的,原生的VideoView是无法播放的,而vatimio框架是可以播放的

点击一下屏幕,出现控制栏

这里写图片描述

点击SeekBar(即进度条)到任意位置,都会找到那个位置进行播放

直接按手机home键或者返回键返回,下次进入界面都会继续播放。但是一定整个应用的进程没有背杀死。

但是,也有一点要注意,如果频繁的使用home键,然后在点进来,会出现一个bug,视频无法播放,只有彻底杀死这个进程,才能重新播放。

目前这个控制栏是vatimio自带的,功能十分简单,可以自己自定义一个控制栏。

0 0
原创粉丝点击