android列表中使用MediaPlayer播放视频的一个问题

原创 2016年07月31日 22:50:44

现在越来越多的新闻app都开始有直接在新闻列表中播放视频的功能,这极大的方便了用户进行视频新闻的查看,不需要点击进入视频播放页,还可快速的切换到列表中其它视频的播放。

前段时间,刚开发了款app,也有跟新闻app类似的列表视频播放功能,效果图如下:


这里播放的是网络的hls视频,所以直接使用了系统的MediaPlayer进行播放。由于列表中会存在多个视频,所以列表item中针对视频播放都会有个SurfaceView,为了避免不必要的渲染和界面切换时的黑屏,这里默认都不显示SurfaceView,只有在点击播放的时候才会显示SurfaceView。

原先考虑的比较简单,点击了播放后,开始调用MediaPlayer设置视频源和SurfaceHolder便开始了播放了。但出来的现象总是会有个问题,第一次播放时,总是播放失败,不出视频画面,如下图:


但第二次点击播放的时候,却能播放成功。

查看logcat提示信息,发现第一次播放进行SurfaceHolder和视频源设置的时候报错了,提示The surface has been released。debug后发现MediaPlayer设置Holder的时候,Holder的值也不为空,但为什么会提示surface被released了呢?

想到在列表中对SurfaceView的显示控制,可能跟这里的控制有点关系,尝试在SurfaceView的几个生命周期回掉中加入log输出,观察几个生命周期和MediaPlayer设置时的顺序。结果是surfaceCreated是在MediaPlayer设置之后(设置放在播放按钮的click中),所以原因应该就是SurfaceView的初始化没有那么及时,才会出现第一次播放不了,第二次能播放的原因了。

所以这里的解决办法为,将MediaPlayer的设置和播放,放在surfaceCreated中,保证每次播放总是在SurfaceView初始化之后进行。



转载请声明原文地址:http://blog.csdn.net/sagittarius1988/article/details/52081431

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android在滚动列表中实现视频的播放(ListView & RecyclerView)

英文原文:Implementing video playback in a scrolled list (ListView & RecyclerView)  本文将讲解如何在列表中实现视频播...
  • jdsjlzx
  • jdsjlzx
  • 2016年01月31日 18:26
  • 16023

Android列表嵌入视频播放

Android列表中嵌入视频播放,当Item消失时会自动停止正在播放的视频

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Android--MediaPlayer(实现列表选歌,上一首,下一首,清空播放列表,搜索本地音乐文件)

下载链接:http://download.csdn.net/detail/zlqqhs/5079025   MediaPlayerActivity类:   package com.vince....
  • zlQQhs
  • zlQQhs
  • 2013年02月22日 00:11
  • 20479

Android之MediaPlayer的简单介绍之播放音乐

一个极其简单的音乐播放器~很简单很简单~~ 先看效果吧: 接下来我就说下步骤: 1.音乐路径: 我们要把播放的音乐文件放在虚拟机的SD卡中,要到第一个0目录下面,按照下面这个图来~ 2.播...

Android MediaPlayer各种状态切换

1.状态图 对播放音频/视频文件和流的控制是通过一个状态机来管理的。下图显示一个MediaPlayer对象被支持的播放控制操作驱动的生命周期和状态。椭圆代表MediaPlayer对象可能驻留的状...
  • joke124
  • joke124
  • 2016年06月14日 19:07
  • 6849

android直播音频开发准备

前言随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能,那么作为开发一个小白,如何快速学习音视频基础知识,了解音视频编解码的传输协议,编解码方式,...

HLS直播技术方案及踩过的坑

一、为什么是IJKPlayer 在基础技术方面,后端有比较成熟的系统,就不再说了,这里说说客户端方面。 有直播就会有弹幕,基本上是标配了。 字幕方面bilibili开源了一个Android的项目...

Android播放HLS协议的流媒体

最近需要测试Android是否支持HLS协议的流媒体播放,在网上找了些例子都是播放本地文件的,还有一些播放网络文件的却不是HLS协议的流媒体。据Android3.0的更新说明介绍,Android3.0...

(HLS播放器之一)HLS协议之M3U8解析

参照 http://tools.ietf.org/html/draft-pantos-http-live-streaming-08, 可以对M3U8有比较系统的认识。           ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android列表中使用MediaPlayer播放视频的一个问题
举报原因:
原因补充:

(最多只允许输入30个字)