我有一个视频(称之为混合视频),由多个其他视频按某种模式串联而成。例如,下面的截图展示了由两个和四个其他视频组成的视频:
然而,我需要以不同的方式显示它:一个主大视频和N-1
个视频缩略图,其中N
是视频的总数。以下是与上述视频对应的另一种显示:
为了显示主要内容,我使用HTML和CSS的组合来定位我想要的视频在更大的div中。无论混合视频中包含的视频数量有多少,它都可以平稳运行。
为了显示缩略图,我使用<canvas>
来绘制我想要的部分:
video.addEventListener('play', function() {
(function loop() {
drawThumbnails();
setTimeout(loop, 1000 / 30); // drawing at 30fps
})();
}, false);
function drawThumbnails() {
for (var i = thumbs.length - 1; i >= 0; i--) {
drawThumbnail(thumbs[i]);
};
}
function drawThumbnail(thumb) {
var thumbNumber = Number(thumb.id.match(/\d+/g));
var canvasContext = thumb.getContext('2d');
var thumbCoordinates = getVideoCoordinates(thumbNumber);
var srcX = thumbCoordinates.column * videoWidth;
var srcY = thumbCoordinates.row * videoHeight;
canvasContext.drawImage(
video, srcX, srcY, videoWidth, videoHeight, // Source
0, 0, thumb.width, thumb.height); // Destination
}
在三个(有时是四个)视频的情况下,它运行良好。但是,随着合成视频中视频数量的增加,缩略图中的视频开始冻结和不流畅运行。这可能是因为同时进行了太多的图像处理。
我认为正确的方法是以某种方式使用<video>
和专用于视频而不是图像的方法。我还尝试过在多个<video>
标记中使用相同的src
(每个缩略图一个),并添加eventListeners
以播放/暂停缩略图中的视频,一旦主视频播放/暂停。那不是很有效率,特别是当寻求/缓冲时,视频有时会失去同步。
有没有一种方法可以在多个<video>
标记中仅使用一个视频,并仅使用其中一个(在我的情况下,包含主视频的视频)来控制所有其他视频?如果无法实现这种方式,是否有另一种解决我问题的方法?
非常感谢,
P.S.在我的情况下,拥有多个分离的视频不是一个选项。处理输入视频并将其分成多个视频需要很长时间。