python mqgg 发送 json 文件

pip install paho-mqtt

发送json,含有音频文件;

import json, base64 import paho.mqtt.client as mqtt import time def on_connect(client, userdata, flags, rc): if rc == 0: print("[A] Connected to broker") client.subscribe(TOPIC_SUB) print(f"[A] Subscribed to {TOPIC_SUB}") else: print(f"[A] Connection failed: {rc}") def on_message(client, userdata, msg): print(f"[A] Received message on '{msg.topic}': {msg.payload.decode()}") if __name__ == '__main__': #install "pip install paho-mqtt" BROKER = "192.168.8.127" BROKER = "localhost" PORT = 1883 TOPIC_SUB = "ue/state" # 订阅状态 TOPIC_PUB = "ue/command" # 发布命令 client = mqtt.Client(client_id="ClientA") client.on_connect = on_connect client.on_message = on_message client.connect(BROKER, PORT, keepalive=30) # non-blocking loop client.loop_start() wav_path = r"D:\data\audios\post_2.wav" # 发送一些命令 for i in range(5000): msg = f"command {i}" with open(wav_path, "rb") as f: audio_bytes = f.read() audio_b64 = base64.b64encode(audio_bytes).decode("utf-8") msg_audio = json.dumps({ "type": "audio", "data": audio_b64, }) client.publish("ue/messages", msg_audio) # ===== 发送命令 ===== msg_cmd = json.dumps({ "type": "command", "data": "pause", }) # client.publish("ue/messages", msg_cmd) print(f"[A] Sent: {msg}") time.sleep(3) client.loop_stop() client.disconnect()

接收json,含有音频文件

import json import base64 import paho.mqtt.client as mqtt import os # ====== 配置 ====== BROKER = "localhost" # MQTT Broker PORT = 1883 TOPIC_SUB = "ue/messages" # 订阅 Topic SAVE_DIR = r"D:\data\audios_received" os.makedirs(SAVE_DIR, exist_ok=True) file_index = 0 # ====== MQTT 回调 ====== def on_connect(client, userdata, flags, rc): if rc == 0: print("[B] Connected to broker") client.subscribe(TOPIC_SUB) print(f"[B] Subscribed to {TOPIC_SUB}") else: print(f"[B] Connection failed: {rc}") def on_message(client, userdata, msg): global file_index try: payload_str = msg.payload.decode('utf-8') data = json.loads(payload_str) if data.get("type") == "audio": audio_b64 = data.get("data", "") if not audio_b64: return audio_bytes = base64.b64decode(audio_b64) file_path = os.path.join(SAVE_DIR, f"received_{file_index}.wav") file_index += 1 # 自动判断是否是完整 WAV if is_wav_file(audio_bytes): # 已经是完整 WAV,直接写入文件 with open(file_path, 'wb') as f: f.write(audio_bytes) print(f"[B] Saved complete WAV to {file_path}") else: # 裸 PCM,需要自己加 WAV 头 # 默认假设 16-bit PCM,单声道,采样率 44100 save_pcm_as_wav(file_path, audio_bytes, sample_rate=44100, num_channels=1) print(f"[B] Saved PCM as WAV to {file_path}") elif data.get("type") == "command": cmd = data.get("data") print(f"[B] Received command: {cmd}") except Exception as e: print(f"[B] Error processing message: {e}") # ====== 判断是否完整 WAV 文件 ====== def is_wav_file(data_bytes): # WAV 文件头前4字节是 "RIFF" return data_bytes[:4] == b'RIFF' # ====== 将 PCM 数据写入 WAV 文件 ====== def save_pcm_as_wav(file_path, audio_bytes, sample_rate=44100, num_channels=1): import wave with wave.open(file_path, 'wb') as wf: wf.setnchannels(num_channels) wf.setsampwidth(2) # 16-bit wf.setframerate(sample_rate) wf.writeframes(audio_bytes) # ====== 主程序 ====== if __name__ == "__main__": client = mqtt.Client(client_id="ClientB") client.on_connect = on_connect client.on_message = on_message client.connect(BROKER, PORT, keepalive=30) client.loop_forever()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1196708.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习日记day64

Day64_0121专注时间:目标是:5h30~6h。实际:5h47min每日任务:饭后的休息(25min),学习间歇的休息(15min)都用手表计时器来监督{step1}40min二刷1道力扣hot100昨天的题再做一…

GGUF、Safetensors、ONNX三种格式

https://blog.csdn.net/woshihlf/article/details/149123005 GGUF、Safetensors、ONNX三种格式

Java毕设项目:基于springboot的智慧医疗网上预约系统(源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

springboot_ssm815大学生校园图书借阅购买管理系统--论文

目录具体实现截图摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 摘要 随着高校图书馆信息化建设的不断推进,传统的人工管理模式已难以满足师生对图书借阅与购买的高效需求。基于…

#对象模型

Qt 对象模型的核心是元对象系统(Meta-Object System)Qt的对象模型是Qt核心特性的基础,它定义了对象的组织和交互方式 Qt的对象模型基于C的面向对象编程的原则,而我们又可以大致理解为对象模型是由QObject类以及它的特性元对象系统…

强烈安利8个AI论文平台,本科生搞定毕业论文!

强烈安利8个AI论文平台,本科生搞定毕业论文! AI 工具让论文写作不再难 对于许多本科生来说,毕业论文的撰写是一个既重要又令人头疼的任务。从选题、收集资料到撰写初稿、反复修改,每一步都可能让人感到力不从心。而随着 AI 技术的…

springboot_ssm816大学运动场地预约器材租借管理系统--论文

目录具体实现截图摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 摘要 随着高校体育运动的普及和场地资源的有限性,传统的人工管理方式已无法满足师生对运动场地和器材的高效预约…

leetcode 热题

leetcode 热题目录1、无重复字符的最长子串(3)2、LRU缓存机制(146)3、反转链表(206)4、数组中的第K个最大元素(215) 1、无重复字符的最长子串(3) 2、LRU缓存机制(146) 3、反转链表(206) 两个指针,prev和…

[ACTF2020 新生赛]Upload 1(一句话木马加蚁剑)

上传图片一句话木马,他的后缀名一定是白名单里的 如果图片一句话木马太大,记得先改一下图片像素,让文件减小,再生成图片一句话木马上传时打开BP拦截,将.jpg改为.phtml 再点击放行 phtml文件相当于php文件的早期形式&am…

springboot_ssm817学生信息管理系统--论文

目录 具体实现截图摘要 系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 具体实现截图 摘要 随着信息技术的快速发展,高校学生信息管理系统的智能化、高效化需求日益增长。传统的纸质或单机版管理…

【深度测评】2026年护考刷题APP算法横评:为何“易小考”能成为护资备考首选?

前言:医学教育软件的“去应试化”技术变革 随着2026年护士执业资格考试(护资)与初级护师考试的改革深化,命题逻辑已从单纯的知识点记忆转向临床思维与病例分析。据《2025-2026年中国医学教育软件行业发展白皮书》数…

【毕业设计】基于springboot的智慧医疗网上预约系统(源码+文档+远程调试,全bao定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

RHCSA结课综合作业

一、项目架构(1)整体结构1、使用LNMP环境Discuz论坛源程序2、LNMPLinuxNginxmariablePHP(2)Nginx1、最初于2004年10月4日为俄罗斯知名门户站点而开发的2、Nginx是一款轻量级的网站服务软件,因其稳定性和丰富 的功能而深…

【课程设计/毕业设计】基于springboot的智慧医疗网上预约系统医院在线挂号与患者预约管理【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

springboot_ssm807古诗词数字化分享平台--论文

目录具体实现截图摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 摘要 随着数字化技术的快速发展,传统文化资源的保护与传承面临新的机遇与挑战。古诗词作为中华优秀传统文化的重…

异常检测:提示工程架构师如何识别提示数据中的异常行为?

异常检测:提示工程架构师如何识别提示数据中的异常行为? 引言:当提示成为关键基础设施 在当今以大型语言模型(LLM)为核心的应用架构中,提示(Prompt) 已经从简单的指令语句&#xff0…

字节面试官:问你C++观察者模式,你答了7点他说不够深

二面技术官问了你一道看似简单的问题:“用C实现一个观察者模式,说说关键点。” 你噼里啪啦说了一通:接口设计、注册注销、通知机制……自我感觉良好。结果他皱了皱眉说:“这些是基础,我想听的是C特有的实现难点。” …

分流抢票软件bypass,Bypass-分流抢票:让你秒杀抢票,稳定捡漏的神器!

马上要过年了。你的火车票好买吗?希望大家都能买到心仪的火车票,开开心心,安安全全回家过年。bypass是一款抢票服务类软件,系统会实时定位用户位置,快速搜索附近列车信息,在线改期可在线进行,延…

springboot_ssm808图书借阅挂失崔还系统功能全--论文

目录具体实现截图摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 摘要 随着信息化技术的快速发展,图书馆管理系统逐渐从传统的手工管理模式向数字化、智能化方向转变。基于Sprin…

K8s修改Pod的Command/Args参数报错?这篇实操指南帮你搞定

K8s修改Pod的Command/Args参数报错?这篇实操指南帮你搞定在Kubernetes日常运维中,修改Pod配置是很常见的操作,但不少同学会遇到类似“Pod updates may not change fields other than...”的报错,尤其是修改容器启动命令&#xff0…