我需要在使用 HTML5 的移动设备上播放具有透明背景的视频。在 Windows Phone 上,我可以捕获视频标签的当前帧并将其显示在画布中。但这不适用于 Android 和 iOS 设备(我认为是出于安全原因?)
我的解决方案是使用 FFMPEG 拆分 .flv,然后将这些帧拼接成大图像,例如精灵表。
问题是当我切换到新的框架表时动画“挂起”。我只是在视觉上和通过控制台检查了这一点(通过在我更改当前精灵表行时记录。)我已经通过查看当我更改精灵表时它如何挂起以及当我如何不挂起来测试它只是一遍又一遍地循环同一张纸。
我预先加载了所有图像:
var frameImages = [];
for(var i = 0; i < 35; i++)
{
frameImages.push(new Image());
frameImages[i].src = 'frame' + i + '.png';
console.log(frameImages[i].src);
frameImages[i].onload = function()
{
// Notify us that it's been loaded.
console.log("Image loaded");
}
}
然后像这样玩:
processFrame = function()
{
outputCanvas.width = outputCanvas.width;
output.drawImage(frameImages[currentFrame], (curCol*153), (curRow*448), 153, 448, 0, 0, 153, 448);
curCol += 1;
if(curCol >= maxCol)
{
curCol = 0;
curRow += 1;
if(curRow >= maxRow)
{
curRow = 0;
currentFrame++;
}
}
}
}
var mozstart = window.mozAnimationStartTime;
step = function(timestamp) {
var diff = (new Date().getTime() - start) - time;
if(diff >= frameDelay)
{
processFrame();
time += frameDelay;
}
}
我已经在 Win 7 机器上的 Chrome v 23.0.1271.97 m 和带有 Chrome 的 Nexus 7 上尝试过这个。
在这里查看它的实际操作:
http ://savedbythecode.com/spokes/mozanimation.php - 这是使用 mozAnimationStartTime
和http://savedbythecode.com/spokes/newplayer.php - 这是使用每个步骤都会调整的常规 JS 计时器(来自http://www.sitepoint.com/creating-accurate-timers-in-javascript/)
有任何想法吗?问题是否足够清楚?
谢谢,凯文