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

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

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

xml布局:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:paddingBottom="@dimen/activity_vertical_margin"
  7. android:paddingLeft="@dimen/activity_horizontal_margin"
  8. android:paddingRight="@dimen/activity_horizontal_margin"
  9. android:paddingTop="@dimen/activity_vertical_margin"
  10. tools:context="fanggao.qf.videoview.MainActivity">
  11.  
  12. <VideoView
  13. android:id="@+id/video_view"
  14. android:layout_width="match_parent"
  15. android:layout_height="300dp" />
  16. </RelativeLayout>

源代码:

  1. /**
  2. * VideoView surfaceView的子类
  3. */
  4. public class MainActivity extends AppCompatActivity {
  5. private String url = "http://qiubai-video.qiushibaike.com/G2XQOKE9T0NKSX4E_3g.mp4";
  6. private VideoView videoView;
  7. @Override
  8. protected void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.activity_main);
  11. //获得videoView对象
  12. videoView = (VideoView) findViewById(R.id.video_view);
  13. //给video填充数据
  14. videoView.setVideoPath(url);
  15. // videoView.setVideoURI(Uri.parse(path));第二种方式
  16. //播放本地资源
  17. // videoView.setVideoPath(new File(Environment.getExternalStorageDirectory(),"a.mp3").getPath());
  18.  
  19. /**媒体控制面版常用方法:MediaController:
  20. hide(); 隐藏MediaController;
  21. show(); 显示MediaController
  22. show(int timeout);设置MediaController显示的时间,以毫秒计算,如果设置为0则一直到调用hide()时隐藏;
  23. */
  24. //设置媒体控制器
  25. videoView.setMediaController(new MediaController(this));//设置该参数就有滑动条
  26. //设置准备监听
  27. videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
  28. @Override
  29. public void onPrepared(MediaPlayer mp) {
  30. //视频播放器播放视频
  31. mp.start();
  32. }
  33. });
  34. }
  35. /*videoVIew.stopPlayback()内部的方法如下,
  36. 只是将媒体播放器停止并释放资源
  37. if (mMediaPlayer != null) {
  38. mMediaPlayer.stop();
  39. mMediaPlayer.release();
  40. mMediaPlayer = null;
  41. */
  42. /*如果需要播放完毕后播放下一个视频只需要调用videoView.stopPlayback(),后再重新调用VideoVIew.setVideoPath(path)即可
  43. * 而serfaceView 调用stop方法后将不能再播放视频*/
  44. @Override
  45. protected void onDestroy() {
  46. //在销毁活动之前调用该方法
  47. if(videoView != null){
  48. //释放资源
  49. videoView.stopPlayback();
  50. videoView = null;
  51.  
  52. }
  53. super.onDestroy();
  54.  
  55. }
  56. }

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

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

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

使用方法跟VideoView基本一致

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

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

没有页面的activity

  1. <activity
  2. android:name="io.vov.vitamio.activity.InitActivity"
  3. android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
  4. android:launchMode="singleTop"
  5. android:theme="@android:style/Theme.NoTitleBar"
  6. android:windowSoftInputMode="stateAlwaysHidden"/>

xml文件:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. tools:context="fanggao.qf.vitamio.MainActivity">
  7.  
  8. <io.vov.vitamio.widget.VideoView
  9. android:id="@+id/videoView"
  10. android:layout_width="match_parent"
  11. android:layout_height="match_parent" />
  12. </RelativeLayout>

main函数:

  1. public class MainActivity extends AppCompatActivity {
  2. //rtmp是直播的网络协议
  3. private String url="rtmp://live.hkstv.hk.lxdns.com/live/hks";
  4. private VideoView vView;
  5.  
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. //注册
  10. Vitamio.isInitialized(this);
  11. setContentView(R.layout.activity_main);
  12.  
  13. vView = (VideoView) findViewById(R.id.videoView);
  14. //设置数据
  15. vView.setVideoPath(url);
  16. //设置控制器
  17. vView.setMediaController(new MediaController(this));
  18. //设置预加载完成后的监听
  19. vView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
  20. @Override
  21. public void onPrepared(MediaPlayer mp) {
  22. vView.start();
  23. }
  24. });
  25. }
  26.  
  27. @Override
  28. protected void onDestroy() {
  29. if(vView != null){
  30. vView.stopPlayback();
  31. vView = null;
  32. }
  33. super.onDestroy();
  34. }
  35. }

注意: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. [Hive - Tutorial] Querying and Inserting Data 查询和插入数据

    Querying and Inserting Data Simple Query Partition Based Query Joins Aggregations Multi Table/File I ...

  2. SQL游标遍历数据表

    DECLARE @资产编号 VARCHAR(50) ,@gsid VARCHAR(50) DECLARE test_Cursor CURSOR LOCAL FOR SELECT 资产编号,gsid F ...

  3. matplotlib绘制三维图

    本文参考官方文档:http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html 起步 新建一个matplotlib.figure.Figure对象, ...

  4. NotePad++ delphi/Pascal函数过程列表插件

    从cnpack上爬下来的 函数过程列表 点击下载

  5. 递归算法,JavaScript实现

    我们先来看一下定义.递归算法,是将问题转化为规模缩小的同类问题的子问题,每一个子问题都用一个同样的算法去解决.一般来说,一个递归算法就是函数调用自身去解决它的子问题. 递归算法的特点: 在函数过程中调 ...

  6. Linux优化之IO子系统监控与调优

    Linux优化之IO子系统 作为服务器主机来讲,最大的两个IO类型 : 1.磁盘IO 2.网络IO 这是我们调整最多的两个部分所在 磁盘IO是如何实现的 在内存调优中,一直在讲到为了加速性能,linu ...

  7. 关于spring管理hibernate事物

    下面这篇文章对我帮助很大.http://blog.csdn.net/jianxin1009/article/details/9202907

  8. Unity3D之Mecanim动画系统学习笔记(七):IK(反向动力学)动画

    什么是IK? IK(Inverse Kinematics)即反向动力学,即可以使用场景中的各种物体来控制和影响角色身体部位的运动,一般来说骨骼动画都是传统的从父节点到子节点的带动方式(即正向动力学), ...

  9. C#关于外挂汉化的一些思考(API函数FindWindow,FindWindowEx,SendMessage)(转)

    这次我们试着运用C#的API函数去修改别的程序的标题文本(适用范围C#) 其实这是FindWindow,FindWindowEx,SendMessage的应用举例之一 也就是所谓的外挂汉化. 附:Wi ...

  10. 【转】linux中的常见目录及文件

    1. /proc目录 Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机制.proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以 ...