旅游政务网站建设,龙文网站建设,wordpress不能将请求写入临时文件.,阿里云服务器免费试用窗口 本系列前章介绍#xff0c;叫号器的显示端#xff0c;完成了视频音频的形成和传输的介绍。本章节开始定制小窗口。 最终实现#xff0c;处于桌面最前端#xff0c;发送指令#xff0c;集合前篇即可完成#xff1a;
处理本地text.txt更新#xff0c;随之被rtsp采集… 窗口 本系列前章介绍叫号器的显示端完成了视频音频的形成和传输的介绍。本章节开始定制小窗口。 最终实现处于桌面最前端发送指令集合前篇即可完成
处理本地text.txt更新随之被rtsp采集 ffmpeg 参数 -vf drawtexttextfiletext.txt:reload1:x10:y10:fontsize20:fontcolorred:fontfilesimhei.ttf播报语音 透过虚拟声卡发送到rtsp ffmpeg 参数-f dshow -i audioCABLE Output (VB-Audio Virtual Cable) -acodec aac -b:a 128k
集成运行的要点
指定声卡为虚拟声卡。运行mediamtx免费的流媒体服务器本网络有一台可接受投屏并支持rtsp流的显示设备android推荐airReciever
补充 ffmpeg进程需要常驻后台有断开检测。重启后需要再次推送。 推流 的python任务需要检测播放状态。dlna是播放就结束。airplay是播放后等待。需要选择一种。
主要窗体代码
import tkinter as tk
import pyttsx3
from tkinter import messageboximport asyncio# 数值验证函数
def say(text):engpyttsx3.init()eng.say(text)eng.runAndWait()update_status(f{saytext}-播放结束)def validate_num_input(text):if text : # 允许清空输入框return Truetry:int(text)return Trueexcept ValueError:return False# 数值操作函数
def increase():try:current int(num_entry.get())except ValueError:current 0num_entry.delete(0, tk.END)num_entry.insert(0, str(current 1))def decrease():try:current int(num_entry.get())except ValueError:current 0num_entry.delete(0, tk.END)num_entry.insert(0, str(current - 1))# 数据发送函数
def send_data():global saytexttext text_entry.get()number num_entry.get()saytexttext.replace(n,number)update_status(f{saytext}-准备播放)def update_status(new_status):# 更新状态栏的文本内容global status_barstatus_bar.config(textnew_status)# 刷新界面以立即显示更新status_bar.update_idletasks() # messagebox.showinfo(# 发送结果,# f文本内容{text}\n数字数值{number}\n说出文本{saytext},# parentroot# )# 创建主窗口
root tk.Tk()
root.title(控制面板)
root.geometry(250x150)# 输入验证注册
validate_cmd root.register(validate_num_input)# 控件创建
tk.Label(root, text文本输入).grid(row0, column0, padx1, pady1, stickyw)
text_entry tk.Entry(root)
text_entry.grid(row0, column1, padx1, pady1, columnspan2)
default_text 请n号就诊
text_entry.insert(tk.END, default_text)
tk.Label(root, text数字输入).grid(row1, column0, padx1, pady1, stickyw)
num_entry tk.Entry(root,validatekey,validatecommand(validate_cmd, %P)
)
num_entry.grid(row1, column1, padx2, pady2, columnspan2)
num_entry.insert(0, 0) # 设置初始值# 按钮区域
button_frame tk.Frame(root)
button_frame.grid(row2, column0, columnspan3, pady10)
tk.Button(button_frame, text-, commanddecrease).pack(sideleft, padx1)
tk.Button(button_frame, text, commandincrease).pack(sideleft, padx1)buttontk.Button(button_frame, text发送, commandsend_data,bgwhite)
button.pack(sideleft, padx1,pady2)status_bar tk.Label(root, text初始状态)
status_bar.grid(row3, column1, padx1, pady1, stickyw)
# 模拟一个异步函数
saytextNone
async def async_task():global saytextwhile True:# print(异步任务正在运行...)await asyncio.sleep(1)if saytext:say(saytext)saytextNone# 将异步任务与 Tkinter 集成
def run_async_task(root):loop asyncio.get_event_loop()task loop.create_task(async_task())def update():loop.stop()loop.run_forever()root.after(100, update)root.after(100, update)run_async_task(root)
root.wm_attributes(-topmost, 1)
root.mainloop()
bilibile com title-投屏器的发送端 视频来源