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
- Android 视频播放器vitamio框架
- android视频播放框架Vitamio
- Android vitamio视频播放器
- Android视频框架 Vitamio 打造自己的万能播放器
- Android视频框架 Vitamio 打造自己的万能播放器
- Android视频框架 Vitamio 打造自己的万能播放器
- Android视频框架 Vitamio 打造自己的万能播放器
- Android视频框架 Vitamio 打造自己的万能播放器
- Android使用Vitamio框架自定义视频播放器
- android第三方视频播放框架Vitamio
- android开发视频播放器-----视频播放 Vitamio框架的使用(一)
- 视频播放的vitamio框架
- vitamio视频播放框架使用
- android视频播放器Vitamio的使用
- android视频播放器(vitamio)
- vitamio视频播放器
- Vitamio视频播放器
- 对Android基于vitamio框架调用第三方播放器播放视频的初步认识
- C++ 代码重用
- 批处理应用笔记1
- 运用Ajax和JQuery来实现表单提交效果
- 静态PCPU变量
- java: SQLite使用实例
- Android 视频播放器vitamio框架
- 不要滥用SharedPreference
- java swing: JList ListSelectionListener 响应两次的解决办法
- POJ1008
- PHP Java Socket 通信
- MYSQL: 表加一字段并对现有记录赋值
- java Swing:获取JFrame上的所有控件
- IE8 不识别json对象
- 获取Context的3种方法