Wai*_*ino 6 android android-webview html5-video cordova cordova-3
我正在使用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指南.实现这一目标的最简单方法是什么?
在类似的事情上苦苦挣扎了一天多之后,我发现您可以通过将 a 发送到带有 HTML5 视频标签且视频网址错误的页面来使 aMediaPlayer内部崩溃。下面的示例是具有有效视频标签的主要活动。如果您按播放键,将会接管并开始永远运行...但是当您单击返回或主页并离开应用程序时, 会被触发,并且会被重定向到带有错误视频网址的页面并被告知自动播放。尝试玩游戏会崩溃,瞧!这WebViewWebViewMediaPlayeronPause()WebViewMediaPlayerMediaPlayer没有了。
package com.test.webviewtest;\n\nimport android.app.Activity;\nimport android.graphics.Bitmap;\nimport android.os.Bundle;\nimport android.webkit.WebChromeClient;\nimport android.webkit.WebView;\nimport android.webkit.WebViewClient;\n\npublic class MainActivity extends Activity {\n WebView webView;\n\n @Override\n protected void onCreate(Bundle savedInstanceState) {\n super.onCreate(savedInstanceState);\n webView = new WebView(this);\n webView.setWebChromeClient(new WebChromeClient());\n webView.setWebViewClient(new WebViewClient());\n String html = "<video width=\\"320\\" height=\\"240\\" controls>" +\n "<source src=\\"http://www.w3schools.com/html/movie.mp4\\" " +\n "type=\\"video/mp4\\"></video>";\n webView.loadData(html, "text/html", null);\n setContentView(webView);\n }\n\n @Override\n protected void onPause(){\n super.onPause();\n // attempt to kill the MediaPlayer here...\n webView.getSettings().setJavaScriptEnabled(true);\n webView.setWebViewClient(new WebViewClient(){\n @Override\n public void onPageStarted(WebView view, String url, Bitmap favicon){\n String js = "javascript:document.getElementsByTagName(\'video\')[0].play();";\n webView.loadUrl(js);\n }\n });\n String html = "<video width=\\"320\\" height=\\"240\\" controls>" +\n "<source src=\\"http://www.w3schools.com/html/" +\n "NOT_A_MOVIE.mp4" +\n "\\" type=\\"video/mp4\\"></video>";\n webView.loadData(html, "text/html", null);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n注意日志:
\n\n02-26 13:19:13.010 220-25370/? V/MediaPlayerService\xef\xb9\x95 [607] notify (0x43a3aeb8, 100, 1, -1004)\n02-26 13:19:13.010 25262-25274/com.test.webviewtest V/MediaPlayer\xef\xb9\x95 message received msg=100, ext1=1, ext2=-1004\n02-26 13:19:13.010 25262-25274/com.test.webviewtest E/MediaPlayer\xef\xb9\x95 error (1, -1004)\n02-26 13:19:13.010 25262-25274/com.test.webviewtest V/MediaPlayer\xef\xb9\x95 callback application\n02-26 13:19:13.020 25262-25274/com.test.webviewtest V/MediaPlayer\xef\xb9\x95 back from callback\n02-26 13:19:13.020 25262-25262/com.test.webviewtest E/MediaPlayer\xef\xb9\x95 Error (1,-1004)\nRun Code Online (Sandbox Code Playgroud)\n\n然后幸福的沉默就消失了MediaPlayer木头……
请参阅Android WebView HTML5 Video Spawns MediaPlayer,该播放器永远存在于 Samsung S4 上 [已发现黑客答案]。
\n| 归档时间: |
|
| 查看次数: |
2763 次 |
| 最近记录: |