我想知道是否有一种简单直接的方法来实现这个效果,而不需要后端代码来提取帧、将其保存为jpg并在某处存储。
当视频加载时,第一帧仅作为海报显示的效果会非常有帮助(显然,只有浏览器能播放视频,才能起作用,这可能与传统的 poster
的工作方式略有不同,但这并不是一个问题)。
我想知道是否有一种简单直接的方法来实现这个效果,而不需要后端代码来提取帧、将其保存为jpg并在某处存储。
当视频加载时,第一帧仅作为海报显示的效果会非常有帮助(显然,只有浏览器能播放视频,才能起作用,这可能与传统的 poster
的工作方式略有不同,但这并不是一个问题)。
您尝试了以下方法吗?
只需在源URL后添加时间(秒)#t={seconds}:
<video controls width="360">
<source src="https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/1080/Big_Buck_Bunny_1080_10s_1MB.mp4#t=0.1" type="video/mp4" />
</video>
有一个名为Popcorn.js的插件,名为Popcorn.capture,它允许您从HTML5视频的任何帧创建海报。
浏览器强制实施了一个限制,禁止读取跨域请求的像素数据(使用画布API记录当前帧的值)。要使此方法有效,源视频必须托管在与请求脚本和HTML页面相同的域上。
使用此插件创建海报的代码非常简单:
// This block of code must be run _after_ the DOM is ready
// This will capture the frame at the 10th second and create a poster
var video = Popcorn( "#video-id" );
// Once the video has loaded into memory, we can capture the poster
video.listen( "canplayall", function() {
this.currentTime( 10 ).capture();
});
this.capture({at: 1}).currentTime(0);
会从第一秒开始获取海报,然后将视频放到开头,但实际上它仍然停留在第一秒。你有相关经验吗? - Damon最近我在一个可在桌面和移动设备上使用的项目中进行了这项工作。关键是使其在iPhone上正常工作。
preload=metadata
在桌面和安卓设备上有效,但在iPhone上无效。
对于iPhone,我必须将其设置为autoplay
,这样海报图像就会在初始加载时自动出现。iPhone会阻止视频自动播放,但结果会显示海报图像。
我需要使用Pavan在此处找到的答案检查iPhone。 检测iPhone浏览器。 然后根据设备使用适当的视频标签,带有或不带autoplay
。
var agent = navigator.userAgent;
var isIphone = ((agent.indexOf('iPhone') != -1) || (agent.indexOf('iPod') != -1)) ;
$videoTag = "";
if(isIphone()) {
$videoTag = '<video controls autoplay preload="metadata">';
} else {
$videoTag = '<video controls preload="metadata">';
}
element.play().then(()=> element.pause());
是这样的。 - MarcinLpreload='auto'
来自动加载视频的第一帧。<video width="300" height="150" id='my-video'>
<source src="testvideo.mp4#t=2" type="video/mp4" />
</video>
$(function () {
let videoJs = videojs('my-video');
videoJs.one('play', function () {
this.currentTime(0);
});
});
preload =“metadata”
添加到视频元素中,并在源URL的结尾处添加#t=1.75
。向视频元素添加eventListener,仅监听play
事件一次。一旦事件被触发,重置视频时间。<video width="100%" controls="controls" preload="metadata" id="myVid">
<source src="path/to/your/video#t=1.75" type="video/mp4">
</video>
<script>
var el = document.getElementById('myVid');
el.addEventListener('play', () => {
el.currentTime = 0;
}, { once: true });
</script>
对于其他想要指定图片作为海报的人,请使用poster属性
:
<video src="/path/to/video.mp4" poster="/path/to/poster.png"></video>
t
值很小,这显著增加了我的页面加载时间。 - zerohedge