捕获单个网络摄像头帧.在PHP中使用

Capture single webcam frame. Use in PHP

本文关键字:PHP 单个 网络 摄像头      更新时间:2023-09-26

是否有一种方法可以从用户网络摄像头捕获单个帧并将其传递到服务器端?

我尝试使用navigator.getUserMedia,它允许我创建一个LocalMediaStream对象,我可以将其传递给视频元素,但似乎没有可以理解的方法来获得视频本身用于其他用途。

有人有什么想法吗?

这是一个比较复杂的任务。您需要将流中的数据放入video元素,然后将其放入canvas元素,这将允许您创建数据URL,然后将其转换为服务器端图像。(深吸一口气)

你的代码可能看起来像这样:
var stream, video, canvas, data;
navigator.getUserMedia({video: true}, function(s) {
    stream = s;
});
video = document.createElement('video');
video.src = window.URL.createObjectURL(stream);
video.play();
canvas = document.createElement('canvas');
canvas.getContext('2d').drawImage(video, 0, 0, 240, 150);
data = canvas.toDataURL();

data现在将是一个数据URL,看起来有点像这样:"data:image/png;base64,iVBORw0KGgoA...(在末尾有更多的字符!)。然后可以使用AJAX将其发送到服务器。

许多语言都有从数据URL获取信息的方法。我从未使用过它,但PHP看起来特别好。您应该能够这样做:

$image = imagecreatefrompng(substr($data, 22));

,其中$data是从浏览器发送的数据。注意,我还没有测试过这段PHP代码。


为了改善用户体验,你可以显示视频元素:这样用户就可以在拍摄时看到镜头。此外,您可以将drawImage调用作为对事件的响应,例如用户单击按钮。还要注意的是,getUserMedia函数还不是跨浏览器的,所以您可能需要做一些编辑才能使它在所有浏览器中工作。