VideoView 播放本地视频
/**
* 会根据视频尺寸自动缩放
* 自己对VideoView设置的宽高基本不起任何作用
*/
public class VideoViewDemo extends Activity implements io.vov.vitamio.MediaPlayer.OnPreparedListener, OnClickListener {
private EditText et_path;
private Button bt_play;
private VideoView mVideoView;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Vitamio.isInitialized(this);
setContentView(R.layout.videoview);
et_path = (EditText) findViewById(R.id.et_path);
bt_play = (Button) findViewById(R.id.bt_play);
mVideoView = (VideoView) findViewById(R.id.surface_view);
mVideoView.setMediaController(new MediaController(this));
mVideoView.setOnPreparedListener(this);
bt_play.setOnClickListener(this);
}
@Override
public void onPrepared(MediaPlayer mp) {
mp.setPlaybackSpeed(1.0f);
}
@Override
public void onClick(View v) {
String filepath = et_path.getText().toString().trim();
mVideoView.setVideoPath(Environment.getExternalStorageDirectory().getAbsolutePath() + filepath);
mVideoView.requestFocus();
mVideoView.start();
}
}
<?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/surface_view"
android:layout_width="300dp"
android:layout_height="300dp"
android:layout_gravity="center_horizontal" />
<EditText
android:id="@+id/et_path"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="/a.rmvb" />
<Button
android:id="@+id/bt_play"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="播放本地多媒体" />
</LinearLayout>
VideoView 播放网络视频、控制缩放类型
/**
* 字幕,调整视频缩放类型
* @author 白乾涛
*/
public class VideoViewSubtitle extends Activity implements OnPreparedListener, OnClickListener, OnTimedTextListener {
//HTTP,无效
//path= "http://www.modrails.com/videos/passenger_nginx.mov";
//path= "http://wsmp32.bbc.co.uk/";
//RTSP,无效
//path= "http://m.livestream.com";
//path= "rtsp://xgrammyawardsx.is.livestream-api.com/livestreamiphone/grammyawards";
//MMS,无效
//path= "mms://112.230.192.196/zb12";
//path = "mms://ting.mop.com/mopradio";
//组播 ,无效
//path = "udp://236.1.0.1:2000";
private String path = "http://dlqncdn.miaopai.com/stream/MVaux41A4lkuWloBbGUGaQ__.mp4";
private String subtitle_path = "";
private VideoView mVideoView;
private TextView mSubtitleView;
private Button btn_changeLayout;
private Button bt_play1, bt_play2, bt_play3, bt_play4;
private long mPosition = 0;
private int mVideoLayout = 0;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Vitamio.isInitialized(getApplicationContext());
setContentView(R.layout.subtitle2);
mVideoView = (VideoView) findViewById(R.id.surface_view);
btn_changeLayout = (Button) findViewById(R.id.btn_changeLayout);
bt_play1 = (Button) findViewById(R.id.bt_play1);
bt_play2 = (Button) findViewById(R.id.bt_play2);
bt_play3 = (Button) findViewById(R.id.bt_play3);
bt_play4 = (Button) findViewById(R.id.bt_play4);
btn_changeLayout.setOnClickListener(this);
bt_play1.setOnClickListener(this);
bt_play2.setOnClickListener(this);
bt_play3.setOnClickListener(this);
bt_play4.setOnClickListener(this);
mVideoView.setVideoPath(path);
mVideoView.setMediaController(new MediaController(this));
mVideoView.requestFocus();
mVideoView.setOnPreparedListener(this);
mVideoView.setOnTimedTextListener(this);
}
@Override
protected void onPause() {
mPosition = mVideoView.getCurrentPosition();
mVideoView.stopPlayback();
super.onPause();
}
@Override
protected void onResume() {
if (mPosition > 0) {
mVideoView.seekTo(mPosition);
mPosition = 0;
}
super.onResume();
mVideoView.start();
}
@Override
public void onPrepared(MediaPlayer mp) {
mp.setPlaybackSpeed(1.0f);
mVideoView.addTimedTextSource(subtitle_path);//不知道哪来的API
mVideoView.setTimedTextShown(true);
//不知道哪来的API
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.btn_changeLayout) {
changeLayout(v);
} else {
switch (v.getId()) {
case R.id.bt_play1:
path = "http://112.253.22.157/17/z/z/y/u/zzyuasjwufnqerzvyxgkuigrkcatxr/hc.yinyuetai.com /D046015255134077DDB3ACA0D7E68D45.flv";
break;
case R.id.bt_play2://HLS m3u8
path = "http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8";
break;
case R.id.bt_play3:
path = "http://7xt0mj.com1.z0.glb.clouddn.com/xia.v.1280.720.f4v";
break;
case R.id.bt_play4:
path = "http://7xt0mj.com1.z0.glb.clouddn.com/lianaidaren.v.640.480.mp4";
break;
}
mVideoView.setVideoPath(path);
mVideoView.requestFocus();
mVideoView.start();
}
}
@Override
public void onTimedText(String text) {
mSubtitleView.setText(text);
}
@Override
public void onTimedTextUpdate(byte[] pixels, int width, int height) {
}
public void changeLayout(View view) {
mVideoLayout++;
if (mVideoLayout == 4) mVideoLayout = 0;//循环
switch (mVideoLayout) {
case 0:
mVideoLayout = VideoView.VIDEO_LAYOUT_ORIGIN;//原始画面
view.setBackgroundResource(R.drawable.mediacontroller_sreen_size_100);
break;
case 1:
mVideoLayout = VideoView.VIDEO_LAYOUT_SCALE;//全屏
view.setBackgroundResource(R.drawable.mediacontroller_screen_fit);
break;
case 2:
mVideoLayout = VideoView.VIDEO_LAYOUT_STRETCH;//拉伸
view.setBackgroundResource(R.drawable.mediacontroller_screen_size);
break;
case 3:
mVideoLayout = VideoView.VIDEO_LAYOUT_ZOOM;//裁剪
view.setBackgroundResource(R.drawable.mediacontroller_sreen_size_crop);
break;
}
mVideoView.setVideoLayout(mVideoLayout, 0);//第二个参数为【宽高比】,为0将自动检测
}
}
<?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" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="400dp"
android:layout_gravity="center_horizontal"
android:orientation="vertical" >
<io.vov.vitamio.widget.CenterLayout
android:id="@+id/dd"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<io.vov.vitamio.widget.VideoView
android:id="@+id/surface_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true" />
</io.vov.vitamio.widget.CenterLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="@string/res_audio" />
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/bt_play1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="flv" />
<Button
android:id="@+id/bt_play2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="m3u8" />
<Button
android:id="@+id/bt_play3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="f4v" />
<Button
android:id="@+id/bt_play4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="mp4" />
<Button
android:id="@+id/btn_changeLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/mediacontroller_sreen_size_100" />
</LinearLayout>
</LinearLayout>
VideoView 显示缓冲信息
/**
* 显示缓冲相关信息
* @author 白乾涛
*/
public class VideoViewBuffer extends Activity implements OnInfoListener, OnBufferingUpdateListener, OnPreparedListener {
private String path = "http://112.253.22.157/17/z/z/y/u/zzyuasjwufnqerzvyxgkuigrkcatxr/hc.yinyuetai.com /D046015255134077DDB3ACA0D7E68D45.flv";
private Uri uri;
private VideoView mVideoView;
private ProgressBar pb;
private TextView downloadRateView, loadRateView;//网速和已经加载的百分比
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Vitamio.isInitialized(getApplicationContext());
setContentView(R.layout.videobuffer);
mVideoView = (VideoView) findViewById(R.id.buffer);
pb = (ProgressBar) findViewById(R.id.probar);
downloadRateView = (TextView) findViewById(R.id.download_rate);
loadRateView = (TextView) findViewById(R.id.load_rate);
uri = Uri.parse(path);
mVideoView.setVideoURI(uri);
mVideoView.setMediaController(new MediaController(this));
mVideoView.requestFocus();
mVideoView.setOnInfoListener(this);
mVideoView.setOnBufferingUpdateListener(this);
mVideoView.setOnPreparedListener(this);
}
//******************************************************************************************
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {//在有警告或错误信息时调用。例如:开始缓冲、缓冲结束、下载速度变化
switch (what) {
case MediaPlayer.MEDIA_INFO_BUFFERING_START://开始缓存,暂停播放,显示正在加载
if (mVideoView.isPlaying()) {
mVideoView.pause();
pb.setVisibility(View.VISIBLE);
downloadRateView.setText("");
loadRateView.setText("");
downloadRateView.setVisibility(View.VISIBLE);
loadRateView.setVisibility(View.VISIBLE);
}
break;
case MediaPlayer.MEDIA_INFO_BUFFERING_END://缓存完成,继续播放
mVideoView.start();
pb.setVisibility(View.GONE);
downloadRateView.setVisibility(View.GONE);
loadRateView.setVisibility(View.GONE);
break;
case MediaPlayer.MEDIA_INFO_DOWNLOAD_RATE_CHANGED://显示 下载速度(KB/s)
downloadRateView.setText("" + extra + "kb/s" + " ");
break;
}
return true;
}
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {//在网络视频流缓冲变化时调用
loadRateView.setText(percent + "%");
}
@Override
public void onPrepared(MediaPlayer mp) {
mp.setPlaybackSpeed(1.0f);
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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.CenterLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<io.vov.vitamio.widget.VideoView
android:id="@+id/buffer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true" />
</io.vov.vitamio.widget.CenterLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="horizontal" >
<ProgressBar
android:id="@+id/probar"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/download_rate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="" />
<TextView
android:id="@+id/load_rate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="" />
</LinearLayout>
</RelativeLayout>