我试过几件事 – 他们都没有工作:
(对于那些不熟悉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" />
同样,这些都没有工作。任何人遇到这个问题之前?有什么建议么?
总之,我试图强制HTML5视频元素停止缓冲。
谢谢!
解决方法
这里是我的分析和解决方案:
总之,我试图解决的问题:
我注意到,当播放器暂停时,HTML5播放器不会停止下载(即使在一段合理的时间之后)。使用一个24/7的音频流和开发移动网站我意识到,这是远远不是最佳的考虑到高数据使用率,如果他们离开网站开放 – 虽然我认为我会让一些电信公司非常高兴“俯瞰“ 这个问题…
只是为了澄清,我真的不关心固定长度的文件。下载完整的文件是大多数时候查看在线资源所需的功能(想慢连接),所以没有我试图阻止。
分析:
HTML5音频元素没有stop()函数,也没有一个选项,您可以设置允许缓冲的数据量,或者说要让元素停止缓冲的方式 – 不要将其与“preload”函数混淆,这只适用于播放按钮被点击之前的元素。
我没有线索为什么这是,为什么这个功能不可用。如果任何人可以向我解释为什么这些关键功能没有实现在一个标准,应该使Web开发手机更好,更标准化我想知道。
解:
我发现在音频元素中实现(一种)停止函数的唯一工作解决方案如下:
1.暂停当前播放器 – 您可以通过audio.addEventListener(‘pause’,yourFunction)挂起播放器上的暂停事件;
2.将源设置为空 – audio.src =“”;
3.加载src – audio.load();
4.删除整个音频元素
5.插入未定义源的新HTML5音频元素
6.设置源(首先在那里的源) – audio.src =“old source url
7.重新挂起暂停事件 – audio.addEventListener(‘pause’,current-function);
iOS需要完全注入新的HTML5音频播放器。只需重置src然后加载它会导致播放器在我的情况下“自动播放”…
对于懒人(包括jQuery):
var audio = $("audio").get(0); audio.pause(0); var tmp = audio.src; audio.src = ""; audio.load(); $("audio").remove(); $("#audio-player").html("<audio controls preload='none'></audio>");<br> audio = $("audio").get(0); audio.src = tmp; audio.addEventListener('pause',current-function);
按下暂停将导致您的访问者丢失音频/视频文件中的当前位置,并将重新开始。我没有这个问题的解决方案。然后再次,如果你正在处理一个直播流,这个解决方案应该很好。
希望这可以帮助。