众所周知,弱的Arduino微控制器无法通过自身传递视频流。如果您从另一侧着手处理此任务?...并及时延长拍摄过程。嘿,许多人已经为自己猜想这种技术称为延时摄影(慢动作单幅拍摄)。即,这不是视频拍摄,而是其结果是创建视频的拍摄。我承认,起初我并不打算慢动作。我只是想为自己的活动注册活动,包括照片。好吧,然后断断续续。如果我的读者不参与开发,那么他只能看到结果(来自Chrome)。我的系统包括:- Arduino Mega开发板
- 相机的JPEG模块;
- 实用程序和MongoDB数据库;
- 用于托管HTML文件的WEB服务器;
当arduina将其数据发送到服务器时,其自己的时间戳将附加到每个参数。发送了参数-将一条记录添加到存储库,再发送两次-保存了另外两个记录。储存库的所有工作都是通过实用程序(以下称为中介程序)执行的,该实用程序在固定计算机上启动。同时,WEB服务器本身仅提供静态内容。也就是说,所有客户端都通过中介的实用程序进行信息交换,类似于流行的MQTT协议。与MQTT的主要区别在于,该中介可以直接与数据仓库配合使用,并提供历史数据。此事实简化了交互方案,并且不需要其他网络流量即可保存数据。为了方便开发Web应用程序,我使用以下API创建了一个JavaScript库:这将创建一个用于处理网络存储的客户端:var client = new MgtClient("localhost", "login", "password", onDebugLog);
功能参数:- 运行中间程序的网络地址,您只需指定IP,例如“ 127.0.0.1”;
- 用户登录;
- 用户密码
- 回调函数,用于调试字符串消息;
用于调试消息的回调函数可能如下所示:function onDebugLog(aStr) {
console.log((new Date()).getTimeString() + ' ' + aStr + '\n');
}
还不困难吗?此外,这将是困难的。存储请求结构:var request = {
name: " 1",
placeId: 1,
beginTime: 1458108472000,
endTime: 1458194872000,
limit: 10000
};
还不困惑吗?然后是对请求的响应的结构:var result = {
times: [],
values: [],
position: 20,
status: "progress",
progress: 91
};
是的,它更复杂吗?“状态”字段的状态:- “完成”-收到请求的所有内容(接收到整个时间范围内的数据,或工作记录数量的限制);
- “进度”-表示这不是最后一条数据,下载过程尚未完成;
- “中止”-数据下载被中断(对工作的数据总量的限制),您可以立即生成一个新请求以接收丢失的数据;
- “失败”-出了点问题(也许插座没有电流?)
你认为就这些了吗?不幸的是,没有。请求的参数可以是不同的类型。- 如果参数为数字,则数字将出现在值数组中。
- 如果是字符串,那么在值数组中将是字符串。
- 如果为布尔值,则值的数组将为“ true”或“ false”。
- 如果它是二进制的(例如JPEG图像),则字节数组将在值数组中。
- 如果这是一个事件,则返回以特殊方式形成的数组。
单个事件记录的示例:var event = [
" ",
"",
27.5,
"",
true,
...
"",
1458108472000
];
即,每个事件记录可以包含任意一组参数。这样的分组对于分析整体图片非常方便。乌夫,最难的部分已经过去了。因此,发送自身的请求看起来像:
client.readArchive(aRequest, onReadArchive);
反函数获得答案:
onReadArchive(aResult) {
return false;
}
最后,我们来到了视频编辑本身。为了创建视频,我使用了Whammy javascript库,在这里有更多详细信息。创建视频的功能:
<script src="whammy.js"></script>
<canvas id="canvas" style="display:none"></canvas>
<video id="player" controls autoplay loop></video>
function createVideo() {
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
canvas.width = '640';
canvas.height = '480';
var framerate = 10;
var quality = 0.8;
var video = new Whammy.Video(framerate, quality);
for (var i = 0; i < images.length; i++) {
var image = images[i];
context.globalAlpha = 1;
context.drawImage(image, 0, 0, 640, 480);
video.add(context);
}
var output = video.compile();
var url = URL.createObjectURL(output);
document.getElementById('player').src = url;
}
不幸的是,您无法在所有浏览器中创建视频。例如,我最喜欢的Firefox不知道如何将图像转换为WebP格式,在此基础上会转换为视频。尽管我找到了一个进行此类转换的javascript库,但转换速度如此之慢(而且帧太多),以至于我拒绝使用它。但是,在所有使用Chrome引擎的浏览器中,此功能都可以使用。在这里,您可以看到我的所作所为。没有完整的文档,我可以提供以前的文章。第1条第2条嗯,仅此而已,我无话可说。