找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7|回复: 0
打印 上一主题 下一主题
收起左侧

软件是串口控制;软件串口com5;用虚拟com6给com5发01,放第一个视频。02放第二个...

[复制链接]
跳转到指定楼层
楼主
ID:285686 发表于 2026-8-11 12:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
软件是串口控制;软件串口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()


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表