如何在HTML5视频上强制中止事件?我有一个叠加层,当我关闭它时,视频应暂停播放然后停止缓冲.但是,我的互联网连接仍然疯狂.哦,我在Mac OS X 10.6上使用Chrome 7.0.5.
我尝试了几件事 - 它们都没有奏效:
(对于那些不熟悉XUI的人来说,x $就像jQuery包装函数一样)
首先,调度中止HTML事件:
var videoEl = x$('#video_el')[0];
videoEl.pause();
var evObj = document.createEvent('HTMLEvents');
evObj.initEvent('abort', false, false);
videoEl.dispatchEvent(evObj);
Run Code Online (Sandbox Code Playgroud)
接下来,更改src然后强制加载:
var videoEl = x$('#video_el')[0];
videoEl.pause();
videoEl.src = "";
videoEl.load(); //tried with and without this step
Run Code Online (Sandbox Code Playgroud)
编辑:我的视频元素看起来像这样:
<video id="video_el" src="<video_url>" preload="none" controls="controls" />
Run Code Online (Sandbox Code Playgroud)
同样,这些都不起作用.以前有人遇到过这个问题吗?有什么建议?
总之,我试图强制HTML5视频元素停止缓冲.
谢谢!
我有Activity一个WebView.我有一个WebChromeClient里面.在其中,有几个回调旨在返回MediaPlayer处理视频位.例如:
@Override
public void onPrepared(MediaPlayer mp) {
Log.i(TAG, " -------------> onPrepared");
}
Run Code Online (Sandbox Code Playgroud)
当我将MP4流加载到WebView使用HTML <video>标记(通过注入)时,这些都无法触发.
当我finish()进行活动时,logcat会报告这个:
09-13 23:55:24.590: E/MediaPlayer(7949): mOnBufferingUpdateListener is null. Failed to send MEDIA_BUFFERING_UPDATE message.
09-13 23:55:24.680: E/MediaPlayer(7949): mOnBufferingUpdateListener is null. Failed to send MEDIA_BUFFERING_UPDATE message.
09-13 23:55:24.680: E/MediaPlayer(7949): mOnVideoSizeChangedListener is null. Failed to send MEDIA_SET_VIDEO_SIZE message.
09-13 23:55:25.675: E/MediaPlayer(7949): mOnBufferingUpdateListener is null. Failed to send MEDIA_BUFFERING_UPDATE message.
09-13 23:55:26.735: E/MediaPlayer(7949): mOnBufferingUpdateListener is null. Failed to …Run Code Online (Sandbox Code Playgroud) 从我能够找到的,这似乎特定于最近的三星设备.S4会这样做.Nexus 7不会.
如果带有WebChromeClient的WebView开始播放HTML5视频,则会创建一个MediaPlayer实例.一旦视频结束,似乎没有办法杀死MediaPlayer缺少System.exit(0).
这是我的整个MainActivity.java
package com.test.webviewtest;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
public class MainActivity extends Activity {
WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
webView = new WebView(this);
webView.setWebChromeClient(new WebChromeClient());
String html = "<video width=\"320\" height=\"240\" controls autoplay>" +
"<source src=\"http://www.w3schools.com/html/movie.mp4\" " +
"type=\"video/mp4\"></video>";
webView.loadData(html, "text/html", null);
setContentView(webView);
}
@Override
protected void onPause(){
super.onPause();
// attempt to kill the MediaPlayer here...
}
}
Run Code Online (Sandbox Code Playgroud)
自然这在清单中是必需的
<uses-permission android:name="android.permission.INTERNET"/>
Run Code Online (Sandbox Code Playgroud)
一旦您单击视频,logcat就会开始吐出MediaPlayer消息,并且它永远不会停止.在播放视频时有一些有用的但在此之后,它只是记录
02-25 17:13:19.395 220-8584/? V/MediaPlayerService? [470] notify (0x51b7aa00, 3, …Run Code Online (Sandbox Code Playgroud) 我的Android应用程序的一项活动包含一个显示GrooveShark播放器网页的WebView.当用户点击网页的播放按钮时,活动会自动启动播放该轨道的默认MediaPlayer.一切正常,问题出现在用户关闭此活动和MediaPlayer时,虽然不再播放音轨,但它仍然存在 ......即使应用程序关闭,MediaPlayer仍然存在.杀死它的唯一方法就是强迫应用程序停止......我似乎没什么大不了的,但在某些设备中,当用户在通话后挂机时,这个"僵尸"MediaPlayer突然开始播放即使该应用程序之前已被破坏,该轨道......
这是我的活动代码的摘要:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_song);
myWV = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWV.getSettings();
webSettings.setJavaScriptEnabled(true);
myWV.setWebViewClient(new MyWebViewClient());
myWV.setWebChromeClient(new WebChromeClient());
myWV.loadUrl(url);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
myWV.onPause();
myWV.pauseTimers();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
myWV.onResume();
myWV.resumeTimers();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
myWV.destroy();
}
private class MyWebViewClient extends …Run Code Online (Sandbox Code Playgroud)