Android 视频播放器vitamio框架
2017-04-11 10:18
204 查看
项目简介:
该项目为视频播放器,使用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自带的,功能十分简单,可以自己自定义一个控制栏。
相关文章推荐
- Android视频播放框架——封装FFMPEG的Vitamio
- Android开发Vitamio开发框架Audio音频播放失败
- Android视频媒体相关,VideoView和开源框架vitamio
- Android视频框架 Vitamio 打造自己的万能播放器
- Android视频框架 Vitamio 打造自己的万能播放器
- Vitamio android/ios 多媒体框架
- android视频_vitamio框架
- Android开发学习之路--基于vitamio的视频播放器(二)
- Android开发学习之路--基于vitamio的视频播放器(二)
- Android视频框架 Vitamio 打造自己的万能播放器
- 对Android基于vitamio框架调用第三方播放器播放视频的初步认识
- Android开发---Vitamio框架的实战应用
- Android视频框架 Vitamio 打造自己的万能播放器
- studio 导入Vitamio第三方框架实现播放视屏 ,报错Error:(8, 0)Could not get unknown property 'ANDROID_BUILD_SDK_VERSION
- Android开发学习之路--基于vitamio的视频播放器(一)
- 视频框架 Vitamio 使用教程+部分心得 (四) 滑动控制声音和亮度+android 4.4.X 以上时全屏播放
- Android-VitaMio框架使用记录
- Android视频框架--Vitamio
- 视频框架 Vitamio 使用教程+部分心得 (六) 适配 Android 7.0 MediaController显示
- Android开源播放框架vitamio的介绍