SurfaceView + MediaPlayer 实现列表循环播放视频
写在前面的碎碎念
- 前一阵子终于结完了一个外包,把最后留的视频播放的坑给填上了
- 本着能用原生组件就不用不第三方组件的愚蠢态度,最后也算是把功能实现了,长时间跑下来也没有问题,放心食用
- 也是看了不少官方文档和博客,加上是异地协助花了不少时间,不过最后还是把东西整出来了
SurfaceView + MediaPlayer 实现列表循环播放视频
正文
SurfaceView + MediaPlayer
简单介绍一下,了解的可以直接跳过
SurfaceView是一个View组件在XML里面引入,负责把视频播放区域画出来
MediaPlayer是真正的播放对象,存入视频来源、进度、声音大小、视频的宽度大小
这里的视频宽度和SurfaceView的宽度有区别 SurfaceView是画布大小 视频宽度是播放出来有效的大小 可以通过MediaPlayer进行自适应
使用SurfaceView+MediaPlayer播放一个视频的过程是
// player 拿到viewHolder
payer.setDisplay(surfaceView.getHolder());
// 设置来源监听函数等一系列参数
player.setDataSource("视频来源 可为url或者本地地址");
// 设置完成后进入Initialized状态 需要prepare才可以播放
player.prepare();
// 开始播放
player.start();
复制代码
再贴一张生命周期图
具体思路
说一下实现播放列表的第一个思路
每一个播放地址弄一个MediaPlayer
建立一个Map或者List存入这些MediaPlayer
先开始播放第一个视频
另起线程初始化剩下的player 并使用OnCompletionListener监听完成进行播放的自动切换
以此来达到循环的目的
周期上面画的图可以看到一个player播放完成之后进入stoped 不可以调用start()
所以一开始尝试再次prepare()
但是还是播放不出来 就算再调用seekTo(0)
依旧无法播放
于是尝试暴力模式 每次播放完成后
new一个新的Player进行下次播放并替代List里面的对象
一开始认为这样不存在内存泄漏问题会被系统回收
遗漏了一个点 MediaPlayer只有release之后才会被回收
所以跑了一段时间之后就会因为内存泄漏崩掉
顺便插一句
MediaPlayer实际上实现部分是C++代码调用了大量系统资源
最多能有多少并没有给出来但是是有一个上限的
不再使用一定要release释放掉
所以最后的解决方案是
player播放完成后 调用reset()方法进入Idle状态
重新进行参数设置
下次调用依旧是一个新的player并且重复使用了player
具体实现代码
SurfaceView + MediaPlayer 实现列表循环播放视频相关推荐
- 【实用】JavaScript中Video使用详解过程(多视频列表循环播放)
做过一个项目里有用到插入多个视频类似列表循环播放的,视频信息是从后台数据库传入的 核心JS代码片段 <script type="text/javascript">var ...
- 91.video.ws index php_如何利用videojs实现视频列表循环播放(完整代码)
本篇文章给大家带来的内容是关于如何利用videojs实现视频列表循环播放(完整代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 庭审直播 .video-js { /* posit ...
- 安卓开发,拼接屏幕、大屏幕、户外广告无人值守循环播放视频,图片。开机自动播放,断电后自动播放,重起后自动播放功能
安卓开发,拼接屏幕.大屏幕.户外广告无人值守循环播放视频,图片.开机自动播放,断电后自动播放,重起后自动播放功能 因客户要求,开机自动播放视频,不需要电脑控制,通电自动循环播放视频. 电脑成本太高,最 ...
- OpenCV重复播放摄像头视频,循环播放摄像头(视频)文件,循环播放视频中某一段视频
OpenCV中使用摄像头录像并保存并不难实现,本文针对摄像头实时帧画面进行记录,并重复播放 视频文件的读取和处理方法类似,首先,本文对摄像头进行采集和实时帧画面显示. #include <ope ...
- SpringBoot + thymeleaf + mysql + html<video> 实现读取视频列表并播放视频
SpringBoot + thymeleaf + mysql + html 实现读取视频列表并播放视频 通过读取数据库video表获取当前视频的视频名.视频地址,展示至前端页面videorecord. ...
- html自动循环播放视频列表
有多个视频,一个播放完以后另一个播放,知道最后,再从头循环播放. 代码如下: <video id="video1" class="indexBanner" ...
- 安卓高级8 SurfaceView案例三 结合mediaplay播放视频
我们知道mediaplay无法直接播放视频所以我们结合Surface package qianfeng.com.mediaplayerdemo;import android.media.MediaPl ...
- MediaPlayer 之音乐循环播放器
先说以下开发环境:Android sdk 2.2 target:android-8 AndroidManifest.xml: Java代码 <?xml version="1.0 ...
- Android开机自动循环播放视频
主配置文件: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=& ...
- Vue audio音乐列表循环播放
现有需求: 进入页面即自动播放音乐,多首音乐自动循环播放 废话不多说,直接上代码 html部分 注意audio标签不能加上loop属性,否则会失效 <audio :src="bgmSr ...
最新文章
- “智源论坛Live”报名 | 清华大学高天宇:实体关系抽取的现状和未来
- 大道至简第一章观后感(伪代码)
- 1013. 数素数 (20)
- 【Python】Python 远程连接服务器,用它就够了
- step5 . day2 网络编程 基于TPC协议的网络编程流程及API
- SpringBoot 数据验证错误处理
- 386个Linux发行版本中 你用过Ubuntu吗?
- FD.io的使用场景(VPP)
- “云”起风涌,邮件服务器助航企业云端升级
- python opencv保存图片_OpenCV Python 保存图片
- css布局-瀑布流的实现
- DB2 SQLCODE 异常大全编辑(五)
- SQL 笛卡尔积现象
- java:文本域的简单使用
- 第一章 接口测试基础
- 现代化综治网格管理模式——织网工程
- 对于《肖申克的救赎》的个人感悟
- Python+matplotlib可视化自定义轴域大小和位置
- Hash哈希查找算法
- 检测手机是否root