写在前面的碎碎念

  • 前一阵子终于结完了一个外包,把最后留的视频播放的坑给填上了
  • 本着能用原生组件就不用不第三方组件的愚蠢态度,最后也算是把功能实现了,长时间跑下来也没有问题,放心食用
  • 也是看了不少官方文档和博客,加上是异地协助花了不少时间,不过最后还是把东西整出来了

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 实现列表循环播放视频相关推荐

  1. 【实用】JavaScript中Video使用详解过程(多视频列表循环播放)

    做过一个项目里有用到插入多个视频类似列表循环播放的,视频信息是从后台数据库传入的 核心JS代码片段 <script type="text/javascript">var ...

  2. 91.video.ws index php_如何利用videojs实现视频列表循环播放(完整代码)

    本篇文章给大家带来的内容是关于如何利用videojs实现视频列表循环播放(完整代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 庭审直播 .video-js { /* posit ...

  3. 安卓开发,拼接屏幕、大屏幕、户外广告无人值守循环播放视频,图片。开机自动播放,断电后自动播放,重起后自动播放功能

    安卓开发,拼接屏幕.大屏幕.户外广告无人值守循环播放视频,图片.开机自动播放,断电后自动播放,重起后自动播放功能 因客户要求,开机自动播放视频,不需要电脑控制,通电自动循环播放视频. 电脑成本太高,最 ...

  4. OpenCV重复播放摄像头视频,循环播放摄像头(视频)文件,循环播放视频中某一段视频

    OpenCV中使用摄像头录像并保存并不难实现,本文针对摄像头实时帧画面进行记录,并重复播放 视频文件的读取和处理方法类似,首先,本文对摄像头进行采集和实时帧画面显示. #include <ope ...

  5. SpringBoot + thymeleaf + mysql + html<video> 实现读取视频列表并播放视频

    SpringBoot + thymeleaf + mysql + html 实现读取视频列表并播放视频 通过读取数据库video表获取当前视频的视频名.视频地址,展示至前端页面videorecord. ...

  6. html自动循环播放视频列表

    有多个视频,一个播放完以后另一个播放,知道最后,再从头循环播放. 代码如下: <video id="video1" class="indexBanner" ...

  7. 安卓高级8 SurfaceView案例三 结合mediaplay播放视频

    我们知道mediaplay无法直接播放视频所以我们结合Surface package qianfeng.com.mediaplayerdemo;import android.media.MediaPl ...

  8. MediaPlayer 之音乐循环播放器

    先说以下开发环境:Android sdk 2.2   target:android-8 AndroidManifest.xml: Java代码   <?xml version="1.0 ...

  9. Android开机自动循环播放视频

    主配置文件: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=& ...

  10. Vue audio音乐列表循环播放

    现有需求: 进入页面即自动播放音乐,多首音乐自动循环播放 废话不多说,直接上代码 html部分 注意audio标签不能加上loop属性,否则会失效 <audio :src="bgmSr ...

最新文章

  1. “智源论坛Live”报名 | 清华大学高天宇:实体关系抽取的现状和未来
  2. 大道至简第一章观后感(伪代码)
  3. 1013. 数素数 (20)
  4. 【Python】Python 远程连接服务器,用它就够了
  5. step5 . day2 网络编程 基于TPC协议的网络编程流程及API
  6. SpringBoot 数据验证错误处理
  7. 386个Linux发行版本中 你用过Ubuntu吗?
  8. FD.io的使用场景(VPP)
  9. “云”起风涌,邮件服务器助航企业云端升级
  10. python opencv保存图片_OpenCV Python 保存图片
  11. css布局-瀑布流的实现
  12. DB2 SQLCODE 异常大全编辑(五)
  13. SQL 笛卡尔积现象
  14. java:文本域的简单使用
  15. 第一章 接口测试基础
  16. 现代化综治网格管理模式——织网工程
  17. 对于《肖申克的救赎》的个人感悟
  18. Python+matplotlib可视化自定义轴域大小和位置
  19. Hash哈希查找算法
  20. 检测手机是否root

热门文章

  1. javascript设计模式实践之策略模式--输入验证
  2. 1.maven下仅shiro框架对shiro的测试使用
  3. 吴裕雄--天生自然C语言开发:作用域规则
  4. STM32串口通信(使用C8T6)
  5. CSS3知识点总结---transitionend
  6. iOS - OC NSFileManager 文件管理
  7. C++中的error C2662,const的this指针问题
  8. Python 持久存储
  9. 24点游戏算法python_24点游戏算法
  10. 堆区和方法区的小认识