捕获视频帧,然后在 HTML5 中导出为位图

Posted

技术标签:

【中文标题】捕获视频帧,然后在 HTML5 中导出为位图【英文标题】:Capturing Video Frame and then Exporting as Bitmap in HTML5 【发布时间】:2011-07-19 08:29:23 【问题描述】:

我有一个可以播放视频的网络应用程序。

我正在考虑使用 html5 <video> 元素,并确定它可以满足我的所有要求,除了一个:允许用户拍摄当前视频帧的快照并将其保存为光栅图片格式(即 JPG)。

对于这个要求,我还没有找到解决方案,非常感谢任何关于这个问题的指导。

为了帮助回答这个问题,这里提供了更多详细信息。我将通过 HTTP 从服务器下载视频文件,然后在浏览器中播放。这将不是视频流,而是在收到文件后开始播放的下载。视频将采用 MP4 格式。

该解决方案只需要在 IE 9 中运行。(当然我希望该解决方案尽可能跨浏览器/平台。)

【问题讨论】:

【参考方案1】:

将图像捕获到canvas 元素:

var video  = document.getElementById(videoId);
var canvas = document.createElement('canvas');
canvas.width  = video.videoWidth;
canvas.height = video.videoHeight;
var ctx = canvas.getContext('2d');
ctx.drawImage(video, 0, 0);

然后使用toDataURL()方法获取图片:

canvas.toDataURL('image/jpeg');

请注意,要让所有这些工作the video has to be from the same origin as the page。

【讨论】:

有趣。如果视频是由 Silverlight 之类的插件渲染的,您认为使用 canvas 是否也可以工作?请参阅***.com/questions/5372521/… 上的相关问题。 这太棒了!它确实开辟了很多超出我想象的可能性。谢谢。 @RickRoth 规范明确指出drawImage 的参数必须是 HTMLImageElement、HTMLCanvasElement 或 HTMLVideoElement - 所以我不认为 Silverlight 会起作用。 我也是这么想的。再次感谢您提供的出色解决方案。 “视频必须与页面来自同一来源”。那么this 是如何工作的呢?【参考方案2】:

但请看这个 Flash 示例,作者在 Flash 中对网络摄像头帧进行编码并将其传递给 javascript。 http://code.google.com/p/flashcam

【讨论】:

以上是关于捕获视频帧,然后在 HTML5 中导出为位图的主要内容,如果未能解决你的问题,请参考以下文章

将视频帧捕获到位图数据(额外-将位图添加到PV3D材质)

HTML5 视频帧捕获到位图

SSIS 2008 - 在平面文件目标中导出为指数值的浮点值

使用 HTML5 和 JavaScript 从视频中捕获帧

在 Adob​​e Illustrator 画布大小问题中导出为 SVG [关闭]

AE怎么提取其中的一帧画面作为一张图片