先上图,在Android中使用Vitamio播放香港卫视:
第一步,AndroidStudio中导入Vitamio
1 Vitamio源码下载,源码下载下来后,我们将vitamio导入AndroStudio中。
2 File->new->Import Module,导入vitmio文件夹。
3 vitamio目录下的build.gradle中下图配置,要和app目录下的build.gradle中的配置相同:
4 app目录下的build.gradle,在dependencies 中添加依赖 compile project(‘:vitamio’) ,如果你导入module中更改过名字的话 要改成修改后的名字,如下图:
上述步骤完成后,rebuild即可导入。
第二步,配置vitamio
导入vitamio后,我们还要进行如下配置:
1 在AndroidManifest中,注册io.vov.vitamio.activity.InitActivity:
<activity
android:name="io.vov.vitamio.activity.InitActivity"
android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
android:launchMode="singleTop"
android:theme="@android:style/Theme.NoTitleBar"
android:windowSoftInputMode="stateAlwaysHidden" />
2 在AndroidManifest中,添加权限:
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
第三步,使用vitamio
vitamio中常用的两个组件是:VideoView和MediaController。
VideoView是播放器组件,继承了SurfaceView。VideoView可以加载各种来源的图像,还可以计算视频尺寸,以便在任意布局管理器中使用,它还提供了诸如缩放等显示选项。VideoView也提供封装了许多MediaPlayer的方法,例如getVideoWidth、setSubShown。常用API如下:
/**
* 获取扫描视频的Uri。
* 参数layout(缩放参数)参见MediaPlayer的常量:VIDEO_LAYOUT_ORIGIN(原始大小)、VIDEO_LAYOUT_SCALE(画面全屏)、VIDEO_LAYOUT_STRETCH(画面拉伸)、VIDEO_LAYOUT_ZOOM(画面裁剪)、VIDEO_LAYOUT_FIT_PARENT(画面铺满)
* 参数aspectRation(宽高比),为0将自动检测
*/
public void setVideoLayout(int layout,float aspectRatio);
//Surface是否有效。 参见Surface的isValid方法。
public boolean isValid();
//设置视频路径。
public void setVideoPath(String path);
//设置视频URI。(可以是网络视频地址)
public void setVideoURI(Uri uri);
//停止视频播放,并释放资源。
public void stopPlayback();
/**
* 设置媒体控制器。
* 参数controller:媒体控制器,注意是io.vov.vitamio.widget.MediaController。
*/
public void setMediaController(MediaController controller);
//注册一个回调函数,在视频预处理完成后调用。在视频预处理完成后被调用。此时视频的宽度、高度、宽高比信息已经获取到,此时可调用seekTo让视频从指定位置开始播放。
public void setOnPreparedListener(OnPreparedListener l);
//获取当前播放位置。
public long getCurrentPosition();
//设置播放位置。单位毫秒
public void seekTo(long msec);
//是否正在播放。
public boolean isPlaying();
//获取缓冲百分比。
public int getBufferPercentage();
/**
* 设置视频质量。
* 参数quality参见MediaPlayer的常量:VIDEOQUALITY_LOW(流畅)、VIDEOQUALITY_MEDIUM(普通)、VIDEOQUALITY_HIGH(高质)
*/
public void setVideoQuality(int quality);
//设置视频缓冲大小。默认1024KB,单位byte
public void setBufferSize(int bufSize);
//检测是否缓冲完毕。
public boolean isBuffering();
//设置元数据编码。例如:UTF-8
public void setMetaEncoding(String encoding);
MediaController用于加载一个布局文件,在makeControllerView中返回布局对应的View。
第四步,使用vitamio实现播放器,直播香港卫视。
1 自定义MediaController:
package com.xi.liuliu.topnews.controller;
import android.app.Activity;
import android.content.Context;
import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import com.xi.liuliu.topnews.R;
import io.vov.vitamio.widget.MediaController;
import io.vov.vitamio.widget.VideoView;
public class LiveMediaController extends MediaController {
private GestureDetector mGestureDetector;
private ImageButton mGoBack;
private ImageView mBattery;
private TextView mTime;
private TextView mBatteryPercent;
private VideoView mVideoView;
private Activity mActivity;
private Context mContext;
private int mControllerWidth = 0;
public LiveMediaController(Context context, VideoView videoView, Activity activity) {
super(context);
this.m