MQTT 服务器如何从多个客户端发布输出单个原始文件?

物联网 MQTT ESP8266
2021-06-27 10:57:46

我正在尝试我的第一个物联网项目,我想:

  • 有一个驻极体麦克风捕获音频
  • 使用 ESP8266 NodeMCU 12-E 板将捕获的音频提交到远程服务器
  • 让远程服务器使用 MQTT 服务器接收音频数据
  • 将音频数据作为 .WAV 文件发布到服务器上

我在网上看到有人在这个 YouTube 视频中展示了类似的东西

https://www.youtube.com/watch?v=rU_Pw9Jb_PM

作者在这里分享了github上的项目

https://github.com/hjltu/esp8266-wifi-microphone

当我研究代码时,我认为我看到的是作者将 的值analogRead(A)附加到某种字符串作为有效负载,然后将其发布到 MQTT 服务器。

看到作者希望MQTT服务器或者其他一些软件处理ESP8266麦克风音频数据,输出为.RAW文件。这个 RAW 文件最终在 ffmpeg 的帮助下转换为 .WAV 文件。

我的问题是:什么命令允许 MQTT 服务器生成 .RAW 文件?或者这是由完全不同的软件完成的?而在我看来,对于一个记录/音频文件,该my_record()esp8266-wifi-mic.ino文件将多个有效载荷发送到MQTT服务器。那么MQTT服务器如何知道哪个发布的传输属于哪个RAW文件呢?

1个回答

您对麦克风输入是正确的,void my_record()对麦克风输出电平采样 1000 次,将每个读数附加到字符串变量并将结果字符串发布到 MQTT 代理。

每次调用 my_record() 时,此过程都会重复 11 次。

注意:您对 .RAW 文件有点误解。它是一个原始文件,这意味着它未经处理且未经格式化......只是一个字节流。使用术语 .RAW 意味着文件扩展名。

What command allows MQTT server to generate the .RAW file?

MQTT 代理(服务器)不生成原始文件,该文件由外部源(在本例中为 ESP8266)发布到 MQTT 代理。

So how does the MQTT server know which published transmission belongs to which RAW file?

它不知道。它所做的只是中继消息。publisher发送给正确topic的人subscriber,并由 观看正确主题的数据。

消息可能无序到达订阅者,因此如果需要正确的数据序列,则需要在消息中包含序列号。

查看这些以获取 MQTT 消息的可视化演示。

https://shiftr.io/shiftr-io/demo ...你只能订阅这个

https://shiftr.io/tryhttps://shiftr.io/shiftr-io/try ...你可以发布到这个(和订阅)

您可以拥有自己的帐户并观看自己发送和接收的消息,而不会受到其他消息的干扰。