2012-03-20 65 views
3

我正在实施一个视频标记系统。我们使用Zencoder将用户上传的视频和VideoJS转换为播放视频。用户应该能够在观看视频时标记和添加评论。除了我想在用户标记时拍摄视频的小快照(54像素高)以外,所有内容都可以工作。我有这个Javascript:如何截取Amazon S3上托管的视频?

function getSnapshot(htmlPlayerId){ 
    var video = document.getElementById(htmlPlayerId); 
    var canvas = document.createElement('canvas'); 

    var ratio = 54/video.videoHeight; 

    canvas.width = ratio * video.videoWidth; 
    canvas.height = 54; 
    var ctx = canvas.getContext('2d'); 
    ctx.drawImage(video, 0, 0, video.videoWidth, video.videoHeight, 0, 0, canvas.width, canvas.height); 

    return canvas.toDataURL('image/jpeg'); 
} 

不幸的是,我收到一个安全错误,因为该文件托管在Amazon S3上。我知道这是一个Access-Control-Allow-Origin问题。 我已经看到这些Why does canvas.toDataURL() throw a security exception?https://forums.aws.amazon.com/thread.jspa?messageID=329118和相关的线程。

我不知道是否有工作可以拍摄快照。

+0

不幸的是,亚马逊并未计划添加对Access-Control-Allow-Origin标头的支持。 – bodi0 2012-03-28 13:10:11

回答

1

我最近遇到了同样的问题,我的解决方案是在S3中用视频和一些JavaScript托管一个小的html文件,然后在iframe中加载该页面。当你想要使用屏幕截图时,你不能使用postMessage来请求iframe为你拍照,然后在iframe中取得屏幕截图,并再次使用postMessage将data:// URL传递回父页面。

+0

这听起来很巧妙!我没有想到这个! – 2012-04-15 11:47:15

0

也尝试window.open(canvas.toDataURL(“image/png”));

相关问题