Android 4.4中播放HTML视频的Bug

标签: 技术开发 android html5 video webview | 发表时间:2013-11-29 05:22 | 作者:igudi
出处:http://www.igudi.com

近期Nexus 4手机自动升级到Android4.4,本来挺好的一件事儿,结果发现自己的应用中出现一个Bug,应用中使用了Webview播放HTML5视频,代码如下:
<video width="480" height="280" poster="test.jpg" src="test.mp4" preload="auto"></video>

在4.3版本之前播放正常,新版本中播放时只能听到声音,而画面停留在最初的画面,也就是poster属性中的图片,但不会显示视频动画,只有点击暂停按钮,然后再次点击播放按钮时,视频动画才会显示正常。

网上查阅了很多国外论坛,发现两个类似的反馈,但解决方法不同,其中的一个办法是使用CSS3的-webkit-transform: translate3d(0, 0, 0)属性强制打开3D渲染,可以使视频播放正常,但这种方法会导致初始的poster图片只显示一下,然后一闪而过停留在视频播放界面,点击播放时,视频播放倒是一切正常。

另外在官方论坛找到一个类似的反馈报告: https://code.google.com/p/android/issues/detail?id=62145#makechanges
其中提到此问题可能是由于preload属性引起,只有设定preload="none"才可以显示视频,官方已经确认了这个bug,并表示已经解决,下个版本会更新。但经我测试,单独设置preload="none"并不会完全解决此问题,视频仍旧只有声音,画面停留在初始界面。

经我多次试验,将上述两种方法结合起来,最终解决了这个问题,代码如下:
<video width="480" height="280" poster="test.jpg" src="test.mp4" preload="none" style="-webkit-transform: translate3d(0, 0, 0)"></video>

默认的poster显示正常,点击播放,视频声音画面显示也都正常。

这个Bug产生的原因我认为是在视频开始播放时没有启动3D加速,导致原始的poster图片未被刷新到视频画面。设置preload="none"禁止了视频的自动载入,确保了poster画面被正确载入;同时在点击播放视频时,-webkit-transform: translate3d(0, 0, 0)确保打开了3D加速,自动刷新了poster的原始画面。

当然以上原因都为猜测,解决办法也是临时的,因为这不符合HTML5标签的原始定义,未来还要看官方的下一个Android版本是否解决掉这个Bug。

相关 [android 4.4 播放] 推荐:

Android 4.4中播放HTML视频的Bug

- - 爱谷地
近期Nexus 4手机自动升级到Android4.4,本来挺好的一件事儿,结果发现自己的应用中出现一个Bug,应用中使用了Webview播放HTML5视频,代码如下:. 在4.3版本之前播放正常,新版本中播放时只能听到声音,而画面停留在最初的画面,也就是poster属性中的图片,但不会显示视频动画,只有点击暂停按钮,然后再次点击播放按钮时,视频动画才会显示正常.

优秀的Android Podcast播放器

- Yao - Solidot
John Ryan 写道 "Podcast是通过互联网传播、分成多集播放的节目. 它包括了音频和视频文件,大多数Podcas文件可供下载. 术语podcasting最早是在2004年发明的,某些人可能会错误以为这种媒体需要苹果的iPod才能收听. Android Market 中有大量独立和集成的Podcast播放器,部分功能有限,部分开发还没完成.

优秀的Android音频播放器

- SUN - Solidot
Simon Jessop 写道 "我们常常看到人们把Android设备当成音乐播放器使用,但Android自带的播放器有许多不足,例如缺乏无缝播放. 不过好在Android平台上有许多免费和功能丰富的音乐播放器替代. 这里收集了八款优秀的Android音乐播放器,包括了Winamp,MixZing,Songbird,开源播放器Cubed Music Player,DeaDBeeF Player,等等.

Android三种播放视频的方式

- - CSDN博客推荐文章
在Android中,我们有三种方式来实现视频的播放:. 指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型. 2、使用VideoView来播放. 在布局文件中使用VideoView结合MediaController来实现对其控制. 3、使用MediaPlayer类和SurfaceView来实现,这种方式很灵活.

Android播放HLS协议的流媒体

- - CSDN博客推荐文章
最近需要测试Android是否支持HLS协议的流媒体播放,在网上找了些例子都是播放本地文件的,还有一些播放网络文件的却不是HLS协议的流媒体. 据Android3.0的更新说明介绍,Android3.0已经开始支持大部分的HLS流媒体类型,于是就做了一下测试. mvdView.setVideoURI(uri); // mvdView是一个videoView控件.

开源的Android视频播放器

- - CSDN博客推荐文章
之前尝试自己解码视频,然后播放显示,虽然音视频都可以播放,但是实现不了音视频的同步,所以使用第三方的视频库Vitamio来实现视频播放器功能,这样自己只需要实现播放解码的制作不不要关心底层解码和显示问题. 是使用Vitamio 4.0,制作的视频播放器,后续会继续添加直播,网络播放功能. 2.使用ListView显示本地视频的缩略图,文件名称,播放时间.

【Android】播放视频的简易播放器源码

- - CSDN博客推荐文章
一,MainActivity.java源码. if(!checkSDCard()) //如果没有SD卡. mSurfaceView01 = (SurfaceView) findViewById(R.id.mSurfaceView1); //显示动画用的容器. 三,源码中所需其余图片等 ,自备就可以.

MIUI 音乐播放器[Android] | 小众软件 > Android

- zhipeng - 小众软件 - Appinn
如果你用 Android ,你应该听过 MIUI ,最近小米手机发布的消息更是异常火爆. 这里给大家推荐一下 MIUI 的本地音乐播放器 – MIUI Music Player. MIUI Music Player 黑色调、简约风格,歌词与封面下载等功能一应俱全,标配均衡器,是一款值得体验的音乐播发器.

Android 4.4 登陆 Nexus 4

- - Engadget 中国版
分类: 智能手机, 软件应用. Google 在 上周曾表示 Android 4.4 KitKat「很快」就会登陆 Nexus 4 和部分版本的 Nexus 7,现在他们果然兑现了承诺的. 继昨天 Moto X 的用户收到升级通知以后,今天又有多位 Nexus 4 使用者报告称已经顺利完成更新,开始享受 Android 最新版本所带来的改进和新功能.

android 4.4 下载文件

- - CSDN博客推荐文章
在android4.0以后,下载程序如果在主线程中出现的话,会报android.os.NetworkOnMainThreadException 错误. 这可能是因为,在android的4.0以后使编码更加规范. 在主线程中下载可能会导致线程的假死状态. 这里我用android4.4编写了一个下载的demo.