使用 Chrome 在 HTML5 视频中搜索
Seeking in HTML5 video with Chrome
我在使用 Chrome 搜索视频时遇到问题。
出于某种原因,无论我做什么,video.seekable.end(0)
总是 0。
当我调用video.currentTime = 5
,后跟console.log(video.currentTime)
时,我看到它总是0,这似乎重置了视频。
我尝试过基于 MP4 和 VP9 的 webm 格式,但都给出了相同的结果。
更烦人的是,Firefox完美地运行了一切。Chrome 有什么特别之处是我应该了解的吗?
这是我的代码(仅适用于 Firefox):
<div class="myvideo">
<video width="500" height="300" id="video1" preload="auto">
<source src="data/video1.webm" type="video/webm"/>
Your browser does not support videos.
</video>
</div>
这是javascript:
var videoDiv = $(".myvideo").children().get(0)
videoDiv.load();
videoDiv.addEventListener("loadeddata", function(){
console.log("loaded");
console.log(videoDiv.seekable.end(0)); //Why is this always 0 in Chrome, but not Firefox?
videoDiv.currentTime = 5;
console.log(videoDiv.currentTime); //Why is this also always 0 in Chrome, but not Firefox?
});
请注意,简单地调用videoDiv.play()
实际上可以在两个浏览器中正确播放视频。
电影文件完全加载后,videoDiv.buffered.end(0)
还会在两个浏览器中给出正确的值。
我花了一段时间才弄清楚...
问题原来出在服务器端。我正在使用Jetty的一个版本来提供我的所有视频文件。Jetty 的简单配置不支持字节服务。
Firefox和 Chrome 的区别在于,即使服务器不支持 http 代码 206(部分内容),Firefox 也会下载整个视频文件,以便您可以通过它进行搜索。另一方面,Chrome拒绝下载整个文件(除非它真的很小,比如大约2-3mb)。
因此,要使html5视频的currentTime
参数在Chrome中正常工作,您需要一个支持http代码206的服务器。
对于其他有此问题的人,您可以使用curl仔细检查您的服务器配置:
curl -H Range:bytes=16- -I http://localhost:8080/GOPR0001.mp4
这应该返回代码 206。如果它返回代码 200,Chrome 将无法查找视频,但由于浏览器中的解决方法,Firefox 将查找视频。
最后一个提示:您可以使用 npm http-server 为支持部分内容的本地文件夹获取一个简单的 http-server:
npm install http-server -g
并运行它以提供本地文件夹:
http-server -p 8000
如果修改服务器代码不可行,请变通办法。对视频进行 API 调用,然后将 Blob 加载到URL.createObjectURL
中,并将其馈送到视频 html 标记的 src
属性中。这将加载整个文件,然后 chrome 将知道文件的大小,从而允许搜索功能工作。
axios.get(`${url}`, {
responseType: "blob"
})
.then(function(response) {
setVideo(URL.createObjectURL(response.data));
})
.catch(function(error) {
// handle error
console.log(error);
});
如果您等待canplaythrough
而不是loadeddata
,它可以工作。
请参阅此代码笔示例。
视频标签有 3 种可能性:MP4、OGG、WebM。
并非所有格式都适用于所有浏览器。
在这里,我认为 WebM 适用于 Firefox 但不适用于 Chrome,因此您应该为 MP4 和 WebM 文件提供两种替代格式,方法是包含引用 MP4 文件的第二个源标签。
例如 src="data/video1.mp4" type="video/mp4"
浏览器将自动选择相关版本。
我也有类似的问题。我正在收听视频上的结束事件,并将当前时间设置为视频中间以连续循环播放。它在Safari或Chrome中不起作用。
我认为 Safari/Chrome 中可能存在一个错误,除非媒体当前正在播放,否则播放头位置属性不可用。
我的解决方法是在视频结束之前开始循环,而不是让它真正结束。
尝试先开始播放来测试你的功能,然后运行你的功能,看看它是否适用于 Safari Chrome。
- 用程序搜索JQuery数据表中的文本
- 视频HTML没有'无法在Internet Explorer 11上工作
- 播放当前视频时如何停止其他视频?JavaScript
- 在html Select中添加搜索
- 使用Facebook live API创建实时视频对象时的隐私设置
- Ajax Live搜索发布到Laravel视图
- 在iPad上播放HTML5视频并搜索
- 谷歌图片/视频搜索
- 使用 Chrome 在 HTML5 视频中搜索
- 当使用 JavaScript 点击链接时,在 youtube 中搜索视频
- 阻止用户在HTML5视频中搜索
- 用HTML5视频检测帧精确搜索
- 如何显示视频链接的列表,并使用Youtube搜索API播放
- 在可搜索时寻找HTML5视频的方法.长度= 0
- Youtube API搜索获取视频列表
- 检索视频从Youtube和搜索/分类
- HTML5视频搜索到视频中间'end '在Safari
- 如何抓取YouTube视频链接与关键字搜索
- 如何加载YouTube视频内联搜索时向下滚动
- Youtube数据API v3 -搜索视频使用逗号分隔的视频id