我将从javascript中的视频url生成视频缩略图。我需要通过ajax完成这一点。因此,我遵循了这种方法。
var src = thumbnail; ///video url not youtube or vimeo,just video on server
var video = document.createElement('video');
video.src = src;
video.width = 360;
video.height = 240;
var canvas = document.createElement('canvas');
canvas.width = 360;
canvas.height = 240;
var context = canvas.getContext('2d');
context.drawImage(video, 0, 0, canvas.width, canvas.height);
var dataURI = canvas.toDataURL('image/jpeg');
html += '<figure>';
html += '<img src="' + dataURI + '' + '" alt="' + item.description + '" />';
html += '<figurecaption>'+item.description+'</figurecaption>'
html += '</figure>';但我得到的只是黑色图像。我猜这是因为加载问题,但找不到解决方案。期待您的回音。
致以问候。
发布于 2020-03-18 15:02:21
您可以安装npm:video-metadata-thumbnails,然后像这样使用它:
import { getMetadata, getThumbnails } from 'video-metadata-thumbnails';
const thumbnails = await getThumbnails(blob, {
quality: 0.6
});
console.log('Thumbnails: ', thumbnails);发布于 2020-04-18 20:30:05
我也遇到了同样的问题,我通过使用"loadeddata“事件解决了这个问题,但我还必须添加cors属性并播放/暂停视频:
var video = document.createElement('video');
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d')
video.addEventListener('loadeddata', function() {
context.drawImage(video, 0, 0, canvas.width, canvas.height);
video.pause();
var dataURI = canvas.toDataURL('image/jpeg');
var img = document.createElement("img");
img.src = dataURI;
that.css('background-image', 'url(' + dataURI + ')');
}, false);
video.preload = 'metadata';
video.muted = true;
video.playsInline = true;
video.setAttribute('crossOrigin', 'anonymous');
video.src = $(this).data('src');
video.play();
发布于 2018-12-18 23:30:37
,但我得到的只是黑色图像。我猜这是因为加载问题,但找不到解决方案。期待您的回音。
这可能是因为在您调用的位置还没有加载任何框架:
context.drawImage(video, 0, 0, canvas.width, canvas.height);你应该在得到一些"loadeddata“事件(检查https://developer.mozilla.org/en-US/docs/Web/Events/loadeddata)之后再这样做。
所以你的代码会变成:
var src = thumbnail; ///video url not youtube or vimeo,just video on server
var video = document.createElement('video');
video.src = src;
video.width = 360;
video.height = 240;
var canvas = document.createElement('canvas');
canvas.width = 360;
canvas.height = 240;
var context = canvas.getContext('2d');
video.addEventListener('loadeddata', function() {
context.drawImage(video, 0, 0, canvas.width, canvas.height);
var dataURI = canvas.toDataURL('image/jpeg');
html += '<figure>';
html += '<img src="' + dataURI + '' + '" alt="' + item.description + '" />';
html += '<figurecaption>'+item.description+'</figurecaption>'
html += '</figure>';
});请注意,这将是异步的,因此您可能必须更改对html变量的操作,改为设置image.src = dataURI;,将其image为对Image DOM节点(即您插入的节点)的引用。
https://stackoverflow.com/questions/40143958
复制相似问题