• 播放视频文件其实并不比播放音频文件复杂,主要是使用 VideoView类来实现的。这个
    类将视频的显示和控制集于一身,使得我们仅仅借助它就可以完成一个简易的视频播放器。
    VideoView的用法和 MediaPlayer 也比较类似(不同点在于播放视频需要UI控件,播放音乐只需要借助MediaPlayer对象)

    VideoView,用于播放一段视频媒体,它继承了SurfaceView,位于"android.widget.VideoView",是一个视频控件。

  • 常用监听:
  • setOnCompletionListener(MediaPlayer.onCompletionListener l):监听播放完成的事件。
  • setOnErrorListener(MediaPlayer.OnErrorListener l):监听播放发生错误时候的事件。
  • setOnPreparedListener(MediaPlayer.OnPreparedListener l)::监听视频装载完成的事件

xml布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="fanggao.qf.videoview.MainActivity"> <VideoView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="300dp" />
</RelativeLayout>

源代码:

/**
* VideoView surfaceView的子类
*/
public class MainActivity extends AppCompatActivity {
private String url = "http://qiubai-video.qiushibaike.com/G2XQOKE9T0NKSX4E_3g.mp4";
private VideoView videoView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获得videoView对象
videoView = (VideoView) findViewById(R.id.video_view);
//给video填充数据
videoView.setVideoPath(url);
// videoView.setVideoURI(Uri.parse(path));第二种方式
//播放本地资源
// videoView.setVideoPath(new File(Environment.getExternalStorageDirectory(),"a.mp3").getPath()); /**媒体控制面版常用方法:MediaController:
hide(); 隐藏MediaController;
show(); 显示MediaController
show(int timeout);设置MediaController显示的时间,以毫秒计算,如果设置为0则一直到调用hide()时隐藏;
*/
//设置媒体控制器
videoView.setMediaController(new MediaController(this));//设置该参数就有滑动条
//设置准备监听
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
//视频播放器播放视频
mp.start();
}
});
}
/*videoVIew.stopPlayback()内部的方法如下,
只是将媒体播放器停止并释放资源
if (mMediaPlayer != null) {
mMediaPlayer.stop();
mMediaPlayer.release();
mMediaPlayer = null;
*/
/*如果需要播放完毕后播放下一个视频只需要调用videoView.stopPlayback(),后再重新调用VideoVIew.setVideoPath(path)即可
* 而serfaceView 调用stop方法后将不能再播放视频*/
@Override
protected void onDestroy() {
//在销毁活动之前调用该方法
if(videoView != null){
//释放资源
videoView.stopPlayback();
videoView = null; }
super.onDestroy(); }
}

可以看出,VideoView和MediaPlayer用法上很相似,其实是因为VideoView的内部封装了MediaPlayer,使得我们可以很方便的使用它,但是VideoView 并不是一个万能的视频播放工具类,它在视频格式的支持以及播放效率方面都存在着较大的不足,只适于播放一些游戏的片头动画,或者某个应用的视频宣传等.

另外,也有第三方的包Vitamio,帮助我们轻松的播放视频

vitamio,下载地址:https://www.vitamio.org/Download/    下载代码即可

使用方法跟VideoView基本一致

不过需要在清单文件中注册一个没有界面的Activity,还需要初始化

下载后将vitamio当module文件导入-修改编译版本跟之前项目一致--最后当库文件导入当前项目中(Add as library)

没有页面的activity

<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"/>

xml文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="fanggao.qf.vitamio.MainActivity"> <io.vov.vitamio.widget.VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>

main函数:

public class MainActivity extends AppCompatActivity {
//rtmp是直播的网络协议
private String url="rtmp://live.hkstv.hk.lxdns.com/live/hks";
private VideoView vView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//注册
Vitamio.isInitialized(this);
setContentView(R.layout.activity_main); vView = (VideoView) findViewById(R.id.videoView);
//设置数据
vView.setVideoPath(url);
//设置控制器
vView.setMediaController(new MediaController(this));
//设置预加载完成后的监听
vView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
vView.start();
}
});
} @Override
protected void onDestroy() {
if(vView != null){
vView.stopPlayback();
vView = null;
}
super.onDestroy();
}
}

注意:rtmp是直播的网络协议

效果:
直播中...

视频播放-VideoVIew,Vitamio的更多相关文章

  1. Android滑动动画ViewFlipper和视频播放VideoView的使用

    Android滑动动画,可以用ViewPager或者ViewFlipper实现. ViewPager自带触摸滑动功能,结合Fragment使用很好,来自补充组件android-support-v4.j ...

  2. Android:视频(VideoView/MediaPlayer)

    Android之视频播放 VideoView if(android.os.Environment.getExternalStorageState().equals(android.os.Environ ...

  3. Android开发全套视频教程在线观看网盘下载

    千锋金牌讲师老罗老师简介: 国内第一批Android教学讲师,10多年软件开发经验,6年多教学经验,曾担任广东电信北京分公司移动事业部项目经理,主持过微软中国平台考试系统.山西省旅游局智能化平台等大型 ...

  4. android教学大纲

    android班 教学大纲 个小时 次课:Android开发环境搭建及工具介绍 Android系统简介 Android开发环境简介及搭建 AndroidStudio提供的工具组件 次课:第一个Andr ...

  5. Android代码速查,写给新手的朋友们[转]

    原文地址:http://www.open-open.com/lib/view/open1397286499090.html 0 android 创建按钮 Button button = new But ...

  6. 玩转Android之在线视频播放控件Vitamio的使用

    其实Android中自带的MediaPlayer本身就能播放在线视频,MediaPlayer结合SurfaceView播放在线视频也是不错的选择(如果你没有性能或者用户体验上的要求),关于MediaP ...

  7. Vitamio视频播放

    activity代码 package com.hck.player.ui; import io.vov.utils.StringUtils; import io.vov.vitamio.LibsChe ...

  8. Android开发学习之路--基于vitamio的视频播放器(二)

      终于把该忙的事情都忙得差不多了,接下来又可以开始good good study,day day up了.在Android开发学习之路–基于vitamio的视频播放器(一)中,主要讲了播放器的界面的 ...

  9. Android视频媒体相关,VideoView和开源框架vitamio

    虽然Android已经内置了VideoView组件和MediaPlayer类来支持开发视频播放器,但支持格式.性能等各方面都十分有限,但是Vitamio的确强大到没朋友! Vitamio 是一款 An ...

随机推荐

  1. RabbitMQ三种Exchange模式(fanout,direct,topic)的特性 -摘自网络

    RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...

  2. linux 下载软件

    wget 软件地址 eg: 下载tomcat : wget http://apache.fayea.com/apache-mirror/tomcat/tomcat-7/v7.0.52/bin/apac ...

  3. Spark SQL概念学习系列之如何使用 Spark SQL(六)

    val sqlContext = new org.apache.spark.sql.SQLContext(sc) // 在这里引入 sqlContext 下所有的方法就可以直接用 sql 方法进行查询 ...

  4. Java线程池学习

    Java线程池学习 Executor框架简介 在Java 5之后,并发编程引入了一堆新的启动.调度和管理线程的API.Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java ...

  5. HL7及PIX相关的测试工具

    最近在开发PIX项目时需要一些工具, 比如PIX各个Actor的测试工具, HL7消息的验证工具等等. 下面列下我找见的几个 必备工具. 1. http://hit-testing.nist.gov: ...

  6. CodeForces 707A Brain's Photos (水题)

    题意:给一张照片的像素,让你来确定是黑白的还是彩色的. 析:很简单么,如果有一种颜色不是黑白灰,那么就一定是彩色的. 代码如下: #pragma comment(linker, "/STAC ...

  7. CPU与内存(经典问答)

    原文:http://www.cnblogs.com/xkfz007/archive/2012/10/08/2715163.html 下面是网上看到的一些关于内存和CPU方面的一些很不错的文章. 整理如 ...

  8. shiro安全框架

    原文:http://blog.csdn.net/boonya/article/details/8233303 可能大家早先会见过 J-security,这个是 Shiro 的前身.在 2009 年 3 ...

  9. struts2的action的知识点和利用action向页面注入值的操作

    1.      Action的顺序,会先搜索指定名字下的包的action,如果找不到会去搜索默认路径下的包下的action. 2.      如果没有给action设置值,那么action会有一些默认 ...

  10. Andoird Studio 错误: 非法字符: '\ufeff' 解决方案。

    从网上下载一个安卓UI模板,导入到AndroidStudio的时候提示MainActivity非法字符: '\ufeff' 解决方案,细细一想编译器没报错,但编译出错,应该是隐蔽字符BOM的问题,于是 ...