Vitamio VideoView 示例
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>
Vitamio VideoView 示例的更多相关文章
- vitamio videoView 用隐藏除videoview的控件,并旋转屏幕方向实现的全屏功能,出现的画面不能填充满videoview(画面不完整)
使用vitamio 封装的播放器 当切换到全屏模式,有时候会出现播放的画面不是全屏的情况, 全屏时,画面只占左半部分并出现拉伸效果,还显示不全,等等其他情况 阅读分析源代码发现是getHolder() ...
- 玩转Android之在线视频播放控件Vitamio的使用
其实Android中自带的MediaPlayer本身就能播放在线视频,MediaPlayer结合SurfaceView播放在线视频也是不错的选择(如果你没有性能或者用户体验上的要求),关于MediaP ...
- Android 多媒体视频播放一( 多媒体理解与经验分享)
前言 说到android的多媒体,一把辛酸一把泪,当初听说会多媒体的比较牛掰,公司也有需求,于是乎我也积极的加入研究android多媒体的行列,记得以前刚接触的时候,最开始还是比较头大的,主要是但是很 ...
- 视频播放-VideoVIew,Vitamio
播放视频文件其实并不比播放音频文件复杂,主要是使用 VideoView类来实现的.这个类将视频的显示和控制集于一身,使得我们仅仅借助它就可以完成一个简易的视频播放器.VideoView的用法和 Med ...
- Android视频媒体相关,VideoView和开源框架vitamio
虽然Android已经内置了VideoView组件和MediaPlayer类来支持开发视频播放器,但支持格式.性能等各方面都十分有限,但是Vitamio的确强大到没朋友! Vitamio 是一款 An ...
- VideoView 视频播放 示例
介绍 实现的功能: 可播放本地视频或网络视频,可控制播放或暂停 最小化时保存播放位置及播放状态,resume时恢复所有状态: 横竖屏切换时保持切换前的位置及状态 在屏幕上竖直滑动可调节屏幕亮度和音量 ...
- Vitamio
前言 虽然Android已经内置了VideoView组件和MediaPlayer类来支持开发视频播放器,但支持格式.性能等各方面都十分有限,这里与大家一起利用免费的Vitamio来打造属于自己的And ...
- vitamio框架
import io.vov.vitamio.LibsChecker; import io.vov.vitamio.MediaPlayer; import io.vov.vitamio.MediaPla ...
- Android视录视频示例
这几天需要搞一个Android视频通话功能,从最简单的视频录制开始,网上例子大多不完整.下面的示例参考过别人的代码,还是拿出来给需要的朋友分享下. Activity类:VideoActivity pa ...
随机推荐
- golang io需要牢记的几个点
对于Reader比较麻烦需要记住以下: When Read encounters an error or end-of-file condition after successfully readin ...
- jQuery中的模拟操作
jQuery中的模拟操作主要是通过trigger来触发,相当于页面加载完成后不需要用户点击按钮,就可以自动触发页面中的相关事件. trigger(type,[data])可以用来模拟触发自定义事件的触 ...
- Thinkphp 零散知识点(caa/js路径,引入第三方类,ajax返回,session/cookie)
一.关于JS和CSS路径问题 1.找路径是从入口文件index.php来找的,而不是从文件本身所在位置来找, 因为我们访问时是访问的入口文件 2.在存放JS和CSS的时候可以放到public文件夹下 ...
- js 鼠标双击滚动单击停止
<!DOCTYPE html> <html> <head> <title>双击滚动代码</title> <script src=&qu ...
- window.onload() 等待所有的数据加载都完成之后才会触发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Javascript图片轮播
原文链接:http://www.imooc.com/article/7393 编辑HTML代码: <div id="wrap"><!--图片展示区--> & ...
- Android 之 WebView
1:在AndroidManifest.xml中添加允许android访问网络权限. <uses-permission android:name="android.permission. ...
- 将银行读卡设备读取到的身份证头像Bitmap属性转换成路径
需求是这样的,在项目开发的时候要求读取身份证,读到身份证的所有信息(信息里面包括头像属性,类型是Bitmap的).然后服务器要求我传过去的头像信息是String类型的Uri路径. 这是读卡器读到的身份 ...
- (转载)PHP mb_substr函数在实际编码中的应用方法
(转载)http://developer.51cto.com/art/200912/166080.htm 我们在使用PHP语言进行实际编码中时,通常会遇到许多错误的出现,比如在截取字符串时会出现乱码等 ...
- 【动态规划】POJ 1161 & ZOJ1463 & XMU 1033 Brackets sequence
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1033 http://poj.org/problem?id=1141 ZOJ目前挂了. ...