一、简介

作为Android开发,我们不可避免的会接触到视频播放,VideoView做为最简单的播放器,我们是不应该不会的。

下面简单介绍一下VideoView:

•  VideoView是使用MediaPlayer来对视频文件进行控制的。

•  VideoView只支持mp4、avi、3gp格式的视频,支持格式相对单一,VideoView支持的格式可以参考MediaPlayer。

•  VideoView可以播放网络视频,支持的网络视频的协议为:Http协议和RTSP协议两种。

二、VideoView常用方法

Android VideoView类为我们提供了十分方便的视频播放API,其主要方法如下:

•  setVideoPath:设置要播放的视频文件的位置

•  start:开始或继续播放视频

•  pause:暂停播放视频

•  resume:将视频从头开始播放

•  seekTo:从指定的位置开始播放视频

•  isPlaying:判断当前是否正在播放视频

•  getCurrentPosition:获取当前播放的位置

•  getDuration:获取载入的视频文件的时长

•  setVideoPath(String path):以文件路径的方式设置VideoView播放的视频源

•  setVideoURI(Uri uri):以Uri的方式设置视频源,可以是网络Uri或本地Uri

•  setMediaController(MediaController controller):设置MediaController控制器

•  setOnCompletionListener(MediaPlayer.onCompletionListener l):监听播放完成的事件

•  setOnErrorListener(MediaPlayer.OnErrorListener l):监听播放发生错误时候的事件

•  setOnPreparedListener(MediaPlayer.OnPreparedListener l):监听视频装载完成的事件

除了简单的操作和丰富的API以外,我们在装载视频时,无需进行编码,播放完成后也无需手动回收资源。

除了播放视频,Media Controller类则为我们提供了一个悬浮的操作栏,包含了播放,暂停,快进,快退,上一个,下一个等功能键。甚至连拖动进度条至某处播放都已经实现。在使用前VideoView和MediController需要相互指定控件。其内置方法有如下:

•  boolean isShowing:当前悬浮控制栏是否显示

•  setMediaPlayer(MediaController.MediaPlayerControl player):设置控制的组件

•  setPrevNextListeners(View.OnClickListener next,View.OnClickListener prev):设置上一个视频、下一个视频的切换事件。

默认情况下,Media Controller悬浮显示3s后隐藏,触摸响应的VideoView呼出。默认上一个,下一个按钮隐藏。

三、使用VideoView实现视频播放

下面我们将展示如何使用VideoView播放香港卫视的视频流:

1. 声明权限

需要在AndroidManifest.xml添加两条权限。

两条权限分别为:网络访问权限、访问文件系统的权限。

2. 编写VideoView布局

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity">

android:layout_width="match_parent"

android:layout_height="wrap_content">

android:id="@+id/video_view"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

3. 编写播放视频代码

VideoView videoView = findViewById(R.id.video_view);

videoView.setVideoPath("http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8"); // 香港卫视地址

videoView.start();

MediaController mediaController = new MediaController(this);

videoView.setMediaController(mediaController);

mediaController.setMediaPlayer(videoView);

4. 效果图

完成代码编写的工作后启动App应该就能够如上图的香港卫视的视频内容啦。是不是感觉很简单啊,那是因为VideoView封装了MediaPlayer和SurfaceView,所有的生命周期都包装好了,所以使用的时候当然就简单啦。下面我们就解析一下VideoView了解其背后的事情。

四、VideoView 播放状态说明

下面的代码是VideoView声明的播放器声明的状态:

// all possible internal states

private static final int STATE_ERROR = -1;

private static final int STATE_IDLE = 0;

private static final int STATE_PREPARING = 1;

private static final int STATE_PREPARED = 2;

private static final int STATE_PLAYING = 3;

private static final int STATE_PAUSED = 4;

private static final int STATE_PLAYBACK_COMPLETED = 5;

为什么会声明这些状态,这就不得不提到MediaPlayer的生命周期了,看下图,应该就稍微理解了吧:

在这里我们先不具体针对这个图讲MediaPlayer的生命周期的内容。只是为了证明VideoView的状态的生命是有依据的。

private int mCurrentState = STATE_IDLE;

private int mTargetState = STATE_IDLE;

上面的代码声明了两个状态变量,分别是当前的状态和目标状态。通过这两个变量结合上面提到的常量,我们可以很清楚的知道VideoView类就是围绕这这两个状态来进行相应的操作的。而我们处理一些回调也是基于这些状态之间的变化设计的,如:

•  OnCompletionListener -- STATE_PLAYBACK_COMPLETED

•  OnPreparedListener -- STATE_PREPARED

•  OnErrorListener -- STATE_ERROR

五、使用VideoView 可能遇到的问题及解决方案

1. 视频播放时会有短暂的黑屏时间:

产生原因:

视频文件加载到内存中是需要时间,这个时间可能导入VideoView全黑。

解决方法:

(1):给VideoView添加MediaPlayer.OnPreparedListener 监听事件,在其onPrepared(MediaPlayer mp) 方法回调中播放视频这个时候视频已经完成了加载。

(2):在VideoView执行start() 方法时视频的预览图不是立即消失而是延迟几百毫秒之后消失,这是视频已经加载完成,当然体验上有些不好。

2. 跳转到其他界面回来后视频播放区域黑屏:

产生原因:

VideoView被回收掉,而自己没做VideoView的状态保存处理

解决方法:

在VideoView所在的Activity或者Fragment的生命周期中处理VideoView视频播放和暂停。(查看VideoView的生命周期相关的方法)

本文转自:博客园 - 灰色飘零,转载此文目的在于传递更多信息,版权归原作者所有。

android播放器设置中文,Android 视频播放器 (一):使用VideoView播放视频相关推荐

  1. linux自带视频播放VLC,如何将VLC媒体播放器设置为默认视频播放器?

    问题描述 我似乎无法将VLC媒体播放器设置为默认视频播放器.我已进入系统设置→系统信息→默认应用程序,并将"Video"更改为VLC媒体播放器. 但是,默认情况下,所有电影仍然使用 ...

  2. Android原生视频播放器下载,视频播放器:VideoPlayer下载_视频播放器:VideoPlayer官方下载【手机安卓版】-华军软件园...

    视频播放器:Video Player是最简单.高效的手机视频文件播放器.VideoPlayer可以支持大部分格式的视频及音频多媒体文件,如光盘,设备和网络流媒体.我们确保你的多媒体文件在原分辨率下播放 ...

  3. kodi没有中文设置_kodi播放器设置中文的方法

    KODI播放器是一款强大的多媒体播放器,其能够支持目前几乎所有的主流格式文件的播放,而且除了视频文件外,即使是音乐.图片.电视节目等其他媒体文件也能够正常进行播放,而且能够支持投屏扥更种辅助功能,为用 ...

  4. kodi没有中文设置_kodi播放器如何设置为中文界面-kodi播放器设置中文的方法 - 河东软件园...

    KODI播放器是一款强大的多媒体播放器,其能够支持目前几乎所有的主流格式文件的播放,而且除了视频文件外,即使是音乐.图片.电视节目等其他媒体文件也能够正常进行播放,而且能够支持投屏扥更种辅助功能,为用 ...

  5. android输入法中文在哪里设置,android输入法怎么设置中文

    android输入法怎么设置中文?对于Android开发者来说,好的模拟器可以事半功倍,特别是在现在Android设备层出不穷的市场中,为了兼容各个版本,需要模拟器和真机的测试,真机成本不小,模拟器是 ...

  6. AVPlayer自定制视频播放器(1)——视频播放器基本实现

    在iOS多媒体开发的过程中,经常会用到视频播放器,简单是视频播放器,直接使用苹果封装好的MPMoviePlayerController和MPMoviePlayerViewController就可以实现 ...

  7. Android实战练习——简单的网络视频播放器

    项目目录 一.项目概述 二.开发环境 三.项目结构 四.运行演示 五.项目总结 六.源码获取 一.项目概述 本次项目实现了一个简单的网络视频播放器,调用的是高度自定义的视频框架jiaozivideop ...

  8. 用Android做的一个简单的视频播放器

    視頻播放器项目功能需求 1 项目概述 1.1 项目描述 視頻播放器(以及視頻管理系統)是一款由java(Swing,安卓和数据库)做的手机视频播放器,可以看手机本地的各种视频,通过按钮进入手机视频管理 ...

  9. Android OpenGL ES (十三) 视频播放器

    课程介绍 在学习了前面章节OpenGL基础知识后,读者应该具备了复杂界面特效.图片高效处理的开发能力.接下来的章节主要转向Android视频应用开发中的OpenGL ES部分. 一. 视频播放器搭建 ...

最新文章

  1. [我的1024开源程序]200元仿豆瓣小程序带评论
  2. 消息队列中点对点与发布订阅区别
  3. 转 Java jar (SpringBoot Jar)转为win可执行的exe程序
  4. 为什么c语言软件调试不出来,急急急……求指导,程序调试不出来
  5. KubeEdge@MEC:Kubernetes容器生态与5G的结合
  6. Windows 上安装 Scala
  7. mysql5.7.28升级到5.7.29_MySQL升级5.7.29
  8. idea如何远端调试
  9. java打印两个小人_Swing多线程实现奔跑的小人动画代码实现 | 彬菌
  10. vulhub漏洞复现30_Jetty
  11. PCIE配置空间设置
  12. 什么是 MAC 地址?
  13. 饥荒联机云服务器_饥荒(Don't Starve Together)腾讯云服务器搭建(unbuntu篇)
  14. java用下拉框实现出生日期_纯JS实现出生日期[年月日]下拉菜单效果
  15. 搜索引擎检索的一点经验
  16. 【毕业设计_课程设计】在线免费小说微信小程序的设计与实现(源码+论文)
  17. js面向对象怎么理解
  18. 【邀请函】2022中国开源年会如约而至,XuperChain三道关等你闯!
  19. 1 色相、饱和度、明度定义
  20. 电影之记忆1:V字仇杀队

热门文章

  1. 微信网页授权登录(公众号)
  2. 计算机组成ldi指令码,计算机组成原理 实验报告四(含答案).docx
  3. 第二代支付系统及电票线上清算相关知识
  4. 37 张图详解 DHCP :给你 IP 地址的隐形人
  5. Django项目实践(商城):九、QQ登录
  6. [Go] MAC Go环境配置
  7. 云原生应用的最小特权原则
  8. 《斜杠青年:如何开启你的多重身份》读书笔记
  9. 十大优质贵金属期货交易APP下载平台排名(2022年榜单)
  10. 1、企业级项目测试报告模板