我正在使用Cordova(PhoneGap 3.0.0-0.14.4)构建一个跨平台的移动应用程序,Android作为目标平台之一.应用功能的一个(主要但不仅仅是)部分是播放视频.我选择了html5 <video>标签作为实现视频播放器的首选方法.这些视频托管在Vimeo上.该应用程序实现为单个html文档,其中通过使用javascript更改内容来实现导航.
我使用的视频标签看起来像:
<video autoplay controls id="videotag">
<source id="videosrc" src="http://player.vimeo.com/external/..."/>
Din apparat stöder inte denna video.
</video>
Run Code Online (Sandbox Code Playgroud)
只需将视频标记添加到html中,即可开箱即用.在HTC One mini(Android 4.3)上,这个解决方案没有问题.在三星Galaxy S4 mini(Android 4.2.2)上,视频也会播放,但会出现另一个问题:视频正在被MediaPlayer组件缓冲,而且这种缓冲永远不会停止.日志由以下消息填充,无限期重复:
01-25 13:45:36.698: V/MediaPlayer(2814): message received msg=3, ext1=34, ext2=0
01-25 13:45:36.698: V/MediaPlayer(2814): buffering 34
01-25 13:45:36.698: V/MediaPlayer(2814): callback application
01-25 13:45:36.698: V/MediaPlayer(2814): back from callback
Run Code Online (Sandbox Code Playgroud)
即使在播放停止,视频标签被移除并且用户退出(暂停)应用程序之后,此缓冲也会继续.暂停应用程序不会停止缓冲,但杀死应用程序会.当缓冲达到100%时,缓冲甚至不会停止,而是显然无限期地继续缓冲.后台没有播放声音,但互联网连接保持打开状态,电池电量耗尽,设备升温.这对我们来说是一个showstopper bug,因为我们不愿意发布导致过热的应用程序.
三星Galaxy S3上的beta测试人员也报告了类似于检测到的问题的症状.问题可能仅限于三星,因为它不会出现在HTC设备上.
即使不再需要视频,MediaPlayer组件似乎也不会收到停止缓冲的消息.
我尝试了以下内容,没有成功:
这耗尽了我能够找到的平台独立技巧.有一些基于原生Android代码的方法
我正在寻找解决问题的任何解决方案,允许播放视频而不会导致过热.这应该是其他人需要解决的问题,所以希望有一个cordova插件已经解决了这个问题.有这样的插件吗?如果没有,上面提到的两种Android原生方法中的任何一种都可以在cordova中实现,他们会解决这个问题吗?
一个潜在的解决方法是在应用程序暂停时终止它.这很难看,不符合Android指南.实现这一目标的最简单方法是什么?