播放视频

使用kotlin

使用MediaController+VideoView实现方式视频播放和常用控制
这种方式是最简单的实现方式,是Android原生框架提供的方法,有比较好的兼容性

VideoView继承了SurfaceView同时实现了MediaPlayerControl接口,直接在layout中放置即可
MediaController则是安卓封装的辅助控制器,带有暂停,播放,停止,进度条等控件,在播放前和VideoView关联即可

demo介绍
demo整体介绍:
一个MainActivity负责权限申请,layout中放置一个由navigation负责页面跳转的fragment。
两个fragment,VideoFragment负责视频播放,VideoListFragment展示视频列表

关键代码和解析

下面通过关键点代码说明如何实现视频播放与控制 只展示关键代码
布局文件 fragment_video.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout <VideoViewandroid:id="@+id/videoView"android:layout_width="match_parent"android:layout_height="match_parent"... /><androidx.appcompat.widget.AppCompatButtonandroid:id="@+id/btList"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="list".../><androidx.appcompat.widget.AppCompatButtonandroid:id="@+id/btMode"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="单曲循环"  .../><androidx.appcompat.widget.AppCompatButtonandroid:id="@+id/btReplay"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="重播".../></androidx.constraintlayout.widget.ConstraintLayout>

demo中有两个全局值,一个用于指示视频索引,一个是全部视频列表。项目中,可以封装到viewModle中

/** 当前播放视频的索引 */
var curIndexOfVideos = 0/** 视频地址列表 */
val videoPathList = listOf(PathUtils.getExternalStoragePath() + File.separator + "routon" + File.separator +"3.avi",PathUtils.getExternalStoragePath() + File.separator + "routon" + File.separator +"1.mp4",PathUtils.getExternalStoragePath() + File.separator + "routon" + File.separator +"55747818-1-192.mkv"
)

关联VideoView与MediaController,播放视频

 /** 设置videoView视频地址 */fun setVideoPath() {videoView.setVideoPath(videoPathList[curIndexOfVideos])}override fun onActivityCreated(savedInstanceState: Bundle?) {....setVideoPath()//创建MediaController对象val mediaController = MediaController(activity)//VideoView与MediaController建立关联videoView.setMediaController(mediaController)//让VideoView获取焦点videoView.requestFocus()//开始播放videoView.start()...
}

播放控制

下一曲\上一曲

/** 播放下一曲 */
fun palyNextView() {curIndexOfVideos++if (curIndexOfVideos == videoPathList.size) {curIndexOfVideos = 0}setVideoPath()videoView.start()
}/** 播放上一曲 */
fun playPrevVideo() {curIndexOfVideos--if (curIndexOfVideos < 0) {curIndexOfVideos = videoPathList.size - 1}setVideoPath()videoView.start()
}//注册监听
mediaController.setPrevNextListeners({//点击下一曲LogUtils.i("next")palyNextView()}, {//点击上一曲LogUtils.i("prev")playPrevVideo()})

暂停/播放 由MediaController自带实现

循环模式

//由一个标志位控制
var singleCycle = false
//点击bt控制该标志位
btMode.apply {text = if (singleCycle) {"单曲循环"} else {"列表循环"}clickWithTrigger {singleCycle = !singleCycletext = if (singleCycle) {"单曲循环"} else {"列表循环"}}
}//注册播放完成之后监听
videoView.setOnCompletionListener {if (singleCycle) {//定位到开始位置,然后开始播放videoView.seekTo(0)videoView.start()} else {//播放下一曲palyNextView()}
}

重播

btReplay.clickWithTrigger {//调用videoView自己方法videoView.resume()
}

列表点选播放

一个简单的列表。点击修改全局变量curIndexOfVideos,然后返回视频界面

最后

如果你看到了这里,觉得文章写得不错就给个赞呗!欢迎大家评论讨论!如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足,定期免费分享技术干货。谢谢!

[Android]简易播放视频相关推荐

  1. Android MediaPlayer播放视频详细步骤

    MediaPlayer类是媒体框架最重要的组成部分之一,此类的对象能够获取,解码以及播放音频和视频,而且只需极少量设置,它支持多种不同的媒体源,例如: 本地资源 内部Url,例如您可能从内容解析器获取 ...

  2. android 6 videoview,android VideoView播放视频-source

    [实例简介]android VideoView播放视频-source [实例截图] [核心代码] package com.example.shenxiaolei.myapplication; impo ...

  3. Android VideoView 播放视频

    目录 VideoView 简 介 播放 res/raw 目录下的文件 播放设备本地文件 Environment 类详解 播放网络在线视频 uses-permission 权限统计 VideoView ...

  4. Android WebView播放视频并支持全屏

    1. 前言 支持视频在线播放的网页随处可见,前端开发不需要做太多的工作就可以实现大多数需求.因为播放视频的具体功能是由浏览器核心在处理的.我以为Android的WebView应该是默认支持视频播放的, ...

  5. 微信android自动播放视频文件,vue-player或TcPlayer在微信内自动播放video和audio

    不管是IOS框互理.各近架跳机蓝种近架跳机蓝种近架跳和Android,当video和audio初始src为空,根据点击不同的媒体源(非播放器控件),比如多个章节的视频列表,动态给src赋值并执行pla ...

  6. android webview 播放视频总结,Android WebView 播放视频总结~

    此次遇到一个问题就是webView无法播放视频,查了下谷歌发现可以设置 setting.setPluginsEnabled(true); (从API 11 支持,可以不加) 这个从而播放视频,但是最新 ...

  7. android mediaplayer 播放 视频 【转】

    留着,当时,对这个 没有搞清楚的... 这两天在android上面捣弄它的mediaplayer,结果发现它果然挑食无比,非常的难伺候,其成熟程度跟iphone完全不在同一个level的.放在http ...

  8. Android WebView播放视频(包括全屏播放)

    最近项目开发中用到了WebView播放视频的功能,总结了开发中犯过的错误,这些错误在开发是及容易遇到的,所以我这里总结了一下,希望大家看到后不要再犯类似的错误,尽可能提高开发效率: 这个Demo我这里 ...

  9. android7开启静音,android静音播放视频

    http://blog.csdn.net/spinchao/article/details/51439322 使用videvocView来静音播放视频,像微信朋友圈小视频预览一样. 实现方法是给vid ...

最新文章

  1. 2019年值得关注的人工智能技术的五大趋势
  2. 【数据竞赛】数据竞赛中最贵的四个特征
  3. CSDN排名及积分规则
  4. android 加载网络bitmap图片 oom 简书_Android常见问题--ImageView加载图片OOM
  5. java静态页面我都做不出_Java高并发:静态页面生成方案
  6. 利用域名(host碰撞)碰撞实现从任何地方发起中间人攻击(理论篇)
  7. 尤雨溪介绍 Vue 3:语法不变、TS 支持很好、2.0 系列还会发一个版本
  8. android double转string_如何使用Java程序将Double转换为String
  9. 萌新关于C#委托一点见解
  10. 在centos7部署etcd v3的c++客户端
  11. 深度学习教程(1) | 深度学习概论(吴恩达·完整版)
  12. android手机解除root,手机一键ROOT以后如何解除?手机root后怎么恢复
  13. Eclipse官方下载步骤
  14. 台式计算机未识别网络,台式机显示未识别网络怎么办
  15. 测试化妆品真假软件,查询化妆品真伪的app叫什么
  16. excel引用其他表数据
  17. 在Silverlight 2 beta1中使用IronPython等动态语言
  18. 极米h3s和坚果j10、当贝f3三款投影实测对比来了!
  19. FFmpeg执行命令时屏蔽输出
  20. vs2012报“nuget 基础连接已经关闭:发送时发生错误”的问题

热门文章

  1. 如何正确理解深度学习(Deep Learning)的概念
  2. Nonbsp;beannbsp;namednbsp;#039;/mlogin#039;nbsp;isnbsp;defin…
  3. asp心得感受_半年多来自学ASP的几点体会……
  4. Android 基于dkPlayer实现抖音列表播放
  5. 中国十大调查研究咨询公司排名数据情况
  6. 暑期LeetCode打卡
  7. Vue中预览HIKVSION海康威视的NVR(网络硬盘录像机)中多个通道(摄像机)的视频
  8. 基于matlab和FFT算法实现信号频谱分析
  9. php配置libzip,PHP配置Configure报错:Please reinstall the libzip distribution
  10. 信息系统投标的一些心得和总结