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 MediaPlayer+SurfaceView播放视频 (异常处理)

主要包含异常处理,方便以后开发少走弯路
  • xiaoxie12321
  • xiaoxie12321
  • 2017年09月07日 11:47
  • 734

Android 使用MediaPlayer播放视频切换后台暂停再恢复互前台继续播放的bug修改

import android.media.AudioManager; import android.media.MediaPlayer; import android.net.Uri; import ...
  • d06110902002
  • d06110902002
  • 2016年11月04日 13:54
  • 6668

SurfaceView+MediaPlayer 播放视频 锁屏 没有画面等各种问题的解决方案。

这里我只简单说明下,不粘代码了,首先我们发现,当锁屏的时候,系统调用了onDestroy,再解开锁屏的时候,这个Activity又重新onCreate了,正是因为这个原因,SurfaceView会出现...
  • sinat_26279817
  • sinat_26279817
  • 2015年08月31日 16:31
  • 1496

Android MediaPlayer播放异常问题汇总

一、关于 “MediaPlayer error (XXXX,XXXX)  问题1: E/MediaPlayer(19765): stop called in state 4 E/Medi...
  • Corey_Jia
  • Corey_Jia
  • 2015年03月26日 15:21
  • 3818

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

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

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

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

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

现在越来越多的新闻app都开始有直接在新闻列表中播放视频的功能,这极大的方便了用户进行视频新闻的查看,不需要点击进入视频播放页,还可快速的切换到列表中其它视频的播放。 前段时间,刚开发了款app,也有...
  • sagittarius1988
  • sagittarius1988
  • 2016年07月31日 22:50
  • 1390

Android MediaPlayer 播放停止与恢复

如下一段程序: public AndroidMusic(AssetFileDescriptor assetDescriptor) { try { mediaPlayer = new Media...
  • siloben
  • siloben
  • 2012年04月13日 08:15
  • 3090

android中使用MediaPlayer播放视频

Android中播放视频主要有两种方式: 使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型 使用android自带的VideoView,这种...
  • d_shadow
  • d_shadow
  • 2017年02月13日 16:56
  • 1453

28、从头学Android之多媒体--使用MediaPlayer和SurfaceView播放视频

应用场景: 使用VideoView播放视频简单、方便,但除此之外,我们还可以利用MediaPlayer用来播放视频。但是我们知道MediaPlayer主要用于播放音频,它是没有提供输出图像的输出界面...
  • jiahui524
  • jiahui524
  • 2011年12月28日 11:33
  • 37390
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android列表中使用MediaPlayer播放视频的一个问题
举报原因:
原因补充:

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