| 软件是串口控制;软件串口com5;用虚拟com6给com5发01,放第一个视频。02放第二个视频。03是关闭。 | import serial
import subprocess
# =========配置区========
COM_PORT = "COM5"
BAUD = 9600
VIDEO_MAP = {
0x01: "video1.mp4",
0x02: "video2.mp4"
}
CMD_STOP = 0x03
CMD_PAUSE = 0x04 # 串口发04 HEX →暂停
CMD_RESUME = 0x05 # 串口发05 HEX →继续播放
FFPLAY_EXE = r".\ffplay.exe"
# =======================
ser = serial.Serial(COM_PORT, BAUD, timeout=0.02)
player_proc = None
def stop_play():
global player_proc
if player_proc:
try:
player_proc.terminate()
except Exception:
pass
player_proc = None
def pause_video():
"""发送pause指令给ffplay实现暂停"""
global player_proc
if player_proc and player_proc.poll() is None:
try:
player_proc.stdin.write(b"pause\n")
player_proc.stdin.flush()
print("执行暂停")
except Exception as e:
print("暂停失败:",e)
def resume_video():
"""再次发送pause就是恢复播放,ffplay切换开关"""
global player_proc
if player_proc and player_proc.poll() is None:
try:
player_proc.stdin.write(b"pause\n")
player_proc.stdin.flush()
print("执行继续播放")
except Exception as e:
print("继续失败:",e)
while True:
if ser.in_waiting > 0:
raw_byte = ser.read(1)
cmd = ord(raw_byte)
print(f"收到串口指令 0x{cmd:02X}")
if cmd in VIDEO_MAP:
stop_play()
vid_file = VIDEO_MAP[cmd]
# stdin=subprocess.PIPE 必须加!!才能给ffplay发暂停命令
player_proc = subprocess.Popen([
FFPLAY_EXE,
"-fs",
"-autoexit",
"-x", "1920",
"-y", "1080",
vid_file
], stdin=subprocess.PIPE)
elif cmd == CMD_STOP:
stop_play()
elif cmd == CMD_PAUSE:
pause_video()
elif cmd == CMD_RESUME:
resume_video()
# 检测视频播完
if player_proc is not None:
exit_code = player_proc.poll()
if exit_code is not None:
print("视频播放完毕,等待串口触发")
player_proc = None
stop_play()
ser.close()
|