Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video HTML5视频:强制中止缓冲_Video_Html - Fatal编程技术网

Video HTML5视频:强制中止缓冲

Video HTML5视频:强制中止缓冲,video,html,Video,Html,如何在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

如何在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);
接下来,更改src,然后强制加载:

var videoEl = x$('#video_el')[0];
videoEl.pause();
videoEl.src = "";
videoEl.load(); //tried with and without this step
编辑:我的视频元素如下所示:

<video id="video_el" src="<video_url>" preload="none" controls="controls" />
var wasPlaying = !audioPlayer.paused;
audioPlayer.currentTime = 0.0; // Optional -- can be left out for pause
audioPlayer.pause();

if (wasPlaying) { // This prevents the browser from trying to load the entire source
    audioPlayer.load();
}

同样,这些都不起作用。以前有人遇到过这个问题吗?有什么建议吗

总之,我试图强制HTML5视频元素停止缓冲


谢谢

好的,在过去的几天里,我一直在努力解决这个问题。
以下是我的分析和解决方案:

简而言之,我试图解决的问题是:
我注意到HTML5播放器在暂停时并没有停止下载(甚至在一段合理的时间之后)。通过24/7音频流和开发移动网站,我意识到这对我的访问者来说远远不是最佳选择,因为如果他们离开开放的网站,他们的数据使用率会很高——尽管我确实认为,如果“忽略”这个问题,我会让一些电信公司非常高兴……
我只是想澄清一下,我并不真正关心固定长度的文件。下载完整的文件在大多数情况下是查看在线资源所需的功能(想想慢速连接),所以我并没有试图阻止这一点

分析:
HTML5音频元素没有stop()函数,也没有可以设置允许缓冲的数据量的选项,也没有表示希望元素停止缓冲的方式-不要将此与“preload”函数混淆,这仅适用于单击播放按钮之前的元素。
我不知道为什么会这样,为什么这个功能不可用。如果有人能向我解释为什么这些关键功能没有在一个标准中实现,而这个标准应该使移动电话的web开发更好、更标准化,我很想知道

解决方案:
我发现在音频元素中实现(某种)停止功能的唯一有效解决方案如下:
1.暂停当前播放机-您可以通过audio.addEventListener(“暂停”,yourFunction)将暂停事件挂接到播放机上
2.将源设置为空-audio.src=“”
3.加载src-audio.Load()
4.移除整个音频元素
5.插入未定义源的新HTML5音频元素
6.设置源(最初存在的源)-audio.src=“旧源url
7.重新读取暂停事件-audio.addEventListener(“暂停”,当前功能);

完全注入一个新的HTML5音频播放器对于iOS来说是必要的。简单地重置src然后加载它会导致播放器“自动播放”

对于懒惰的人(包括jQuery):

var audio=$(“audio”).get(0);
音频暂停(0);
var tmp=audio.src;
audio.src=“”;
load();
$(“音频”).remove();
$(“#音频播放器”).html(“”;
音频=$(“音频”).get(0); audio.src=tmp; audio.addEventListener(“暂停”,当前功能);
按“暂停”将导致访问者丢失音频/视频文件中的当前位置,并将重新启动。我没有解决此问题的方法。如果您处理的是实时流,则此方法也可以


希望这有帮助。

实际上,您可以通过将src属性设置为带有一些参数的php/aspx文件来读取文件内容并将数据检索为等效类型(例如,
内容类型:video/mp4
)来做同样的事情。但它在IE 11中不起作用(令人惊讶的是:D),然后您需要为这个华丽的浏览器执行上述操作

用这个

<video id="v1" preload="none">
  <source src="video.php?id=24" type="video/mp4">
</video>
在我的本地主机测试中

Firefox26在您按下play键后,它总是会缓冲整个文件

IE 11(考虑到
src=“video-24.mp4”
,因为另一个不起作用)在您按下play后,它总是一块一块地缓冲文件,即使文件被暂停,并且完全忽略
preload=“none”
属性

Chrome 32工作正常(与Opera 18相同)。

使用preload=“none”,这就是我在暂停视频后强制中止缓冲,然后使用jQuery在暂停位置恢复播放的方式

<video id="video_el" src="<video_url>" preload="none" controls="controls" />    

<script>
jQuery(function() {

  var video = jQuery('video').get(0);

  video.addEventListener('pause',function(){
     var tmp_src = video.src;
     var playtime = video.currentTime;
     video.src = '';
     video.load();
     video.src = tmp_src;
     video.currentTime = playtime;
  });

});
</script>

jQuery(函数(){
var video=jQuery('video').get(0);
video.addEventListener('pause',function(){
var tmp_src=video.src;
var playtime=video.currentTime;
video.src='';
video.load();
video.src=tmp_src;
video.currentTime=播放时间;
});
});

关键步骤似乎是在调用
load()
之前将
src
设置为空值。我成功地做到了以下几点:

<video id="video_el" src="<video_url>" preload="none" controls="controls" />
var wasPlaying = !audioPlayer.paused;
audioPlayer.currentTime = 0.0; // Optional -- can be left out for pause
audioPlayer.pause();

if (wasPlaying) { // This prevents the browser from trying to load the entire source
    audioPlayer.load();
}

在Win10上的Chrome和Firefox中,这都会触发一个中止事件。在我的具体案例中,这是关闭否则将无限期保持打开状态的套接字所必需的,这导致在同一页面上使用多个播放器时达到了每个服务器六个连接的限制。

您还可以将src更改为包含一个seco的mp3然后用新的src调用play函数。 加载新mp3时,流的缓冲停止

var audio=document.getElementById(“audioradio”);
audio.src=“/sound/pause.mp3”;
audio.play();

为什么不将当前时间存储在一个临时变量上,当用户单击播放按钮时,您可以将音频播放器设置为该值?您确实可以这样做,但我开发了这个功能来卸载实时流。在按下停止的位置拾取实时流有点毫无意义;)但对于非常大的文件,这是不可能的我可以补充一点,这是一个很好的例子
var wasPlaying = !audioPlayer.paused;
audioPlayer.currentTime = 0.0; // Optional -- can be left out for pause
audioPlayer.pause();

if (wasPlaying) { // This prevents the browser from trying to load the entire source
    audioPlayer.load();
}