video - 适用于物联网的低功耗视频传输协议(protocol)

标签 video video-streaming video-capture beagleboneblack iot

我目前正在开发一种用于远程喂养和监控我的狗的设备。基本思想是使用两个主要组件来实现:

  • 第一个组件将由一个指向我的狗盘子的相机和一个带有伺服电机的微 Controller 组成,该伺服电机将打开和关闭食品容器的食品门。这个地方没有 WIFI 接入,也没有电源 socket ,所以它需要电池供电。我希望这个组件的计算量尽可能低,所以如果它可以在不运行在Linux或其他操作系统上的情况下完成,那就太好了。

  • 第二个组件将与第一个组件以及我的路由器进行通信,以便我可以通过互联网远程访问它。这个可以插入电源 socket 。

此功能的使用包括我能够将我的手机(使用我创建的应用程序)登录到第二个组件,以便它向我显示实时视频并通过它发送信号以打开食品容器门一定的时间。我有一个 BeagleBone Black 可用于该项目,我想我会将其应用于第二个组件。

我的问题:

1) 什么协议(protocol)适合两个组件之间的通信(蓝牙、zigbee、6lowpan 等)?摄像机的分辨率可能是 640*480 或更高,只要我可以观看相对连续的实时视频来检查我的狗正在吃东西并且健康状况良好,延迟(~ 15 秒 - 20 秒)就没有问题。功耗应该尽可能低,以便电池能够长时间运行。

2)有什么方法可以使第一个组件能够在不运行操作系统的情况下流式传输视频吗?

我知道有一些更合乎逻辑的解决方案(扩展 wifi 网络、购买已经上市的解决方案等),但我也希望使用这个项目作为物联网的学习实例。我进行了研究,但未能得出任何令人信服的结论。我希望你们能在这方面帮助我,或者至少为我指出正确的方向。我(和我的狗)将非常感激。

非常感谢。

最佳答案

视频

您首先需要知道什么是视频?摘要视频是包含摄像机以一定间隔拍摄的图像的字节流。每张图像均以 FRAME 命名。因此,视频流具有分辨率和颜色配置文件,这适用于所有帧。例如,24 位的 RGB 图像意味着每个 channel (红、绿、蓝)有 8 位用于颜色指示。

当您的查询指定分辨率为 640x480 时,RGB 原始图像包含:

640 * 480 * 3 = 921600 bytes
a video without compression with 24 fps (frames per second) will produce
921600 * 24 = 22.118.400 bytes per second.
this will require a bandwidth of (ideally):
22.118.400 * 8 = 176.947.200 bits roughly 168,75 mbits

不过别担心。然而,有一些压缩格式(如 Jpeg),它们会减少图像字节的总数。这种压缩取决于光线、分辨率、细节等条件。需要对其进行测试以计算总字节数,从而计算所需的带宽。有 TTL 相机模块(询问 google,例如串行相机模块 arduino 或 ttl 串行 jpeg 相机)。这些模块可以输出视频或静态图像并且可以进行配置。这些模块具有 ttl 串行接口(interface)。这是重要的部分。

转移

基于 xbee(最流行)或 NRF*** 的无线传输协议(protocol)和/或模块具有 ttl 串行接口(interface)。根据他们的数据表,他们可以以高达每秒 3mbits 的波特率进行传输。现在我们回到视频字节大小的计算。我们需要一个可以支持来自相机的数据的模块(xbee 或类似的)。

在非常基础的层面上,您的第一个组件可以包含以下组件:

ttl_camera -> xbee + battery + regulators

和第二个组件

xbee -> beaglebone -> internet connection 

但是您的问题表明,第一个组件上连接了一个伺服电机,这需要在第一个组件侧安装一个 MCU。 (xbee 有 gpio 端口,但我不确定是否可以远程控制它们来驱动伺服),因此第一个组件可以这样修改:

ttl_camera -> arduino pro mini -> xbee + battery + regulators

沟通

第一个组件和第二个组件之间必须有一个通信协议(protocol),以使 beaglebone 能够控制第一个组件。我认为你需要打开和关闭摄像头,从而打开和关闭视频流。您需要控制伺服电机。协议(protocol)架构可以是这样的:

site_2 --> site_1 (control commands)
site_1 --> site_2 ( *ONLY* Video stream )

所以连接模式可以是这样的:

CAM_TX --> xbee_RX
ARDUINO_RX --> xbee_TX
ARDUINO_TX --> CAM_RX

结论

通过此配置,您将能够从 site_1 获取视频流并通过互联网控制 site_1 和 site_2。我认为这对于学习项目来说是一个良好的开始。

关于video - 适用于物联网的低功耗视频传输协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35247106/

相关文章:

ios - 如何使用 HyprMX

HTML5 视频 : hide custom controls when native ones are re-activated

c - 如何将 ffmpeg 作为 C 程序运行

android - DummyDataSource无法打开: Android ExoPlayer

html - 使用 rtmp 和 videojs 流式传输视频

javascript - 使用 Video.js 在 YouTube 视频上预滚动 VAST

javascript - 如何计算视频使用 javascript 的带宽?

python - 用openCV +python打开视频

android - 如何在 Android 中合并音频和视频文件

python - 在 OpenCV 中跳过帧并寻找 RTSP 流的结尾