(最初是作为一般性问题发布的,然后我发现了 ffplay 论坛)
我正在尝试设置一个守护进程,以便在交互式轮椅骑行过程中播放简短的音效。(下周安装!!)我正在使用带有 Debian Buster 的华硕 Tinker Board R2。无论是 Debian 还是 Python,这都是一个陡峭的学习曲线。我的策略(感谢提出想法!)是让主控制例程在需要音效时将一个简单的值加载到文本文件中。
声音例程每 0.5 秒轮询一次文件,如果找到有效值,它将播放相关的 mp3 声音文件并重置“信号量”。这样做的目的是避免在播放声音时主例程被阻塞。
如果我从命令行 (python3 /home/scripts/runsound.py) 调用 playsound 循环,它会完美地运行,播放声音并清除信号量。如果我将 runsound.py 作为 systemd 服务启动,它会运行并清除信号量,但不会产生声音。我尝试了几种不同的策略来启动声音操作,它们都做同样的事情。
我设置了多个测试来尝试找出问题所在。命令如下:
sudo ffplay /home/carousel/sounds/4_StartBell.mp3 -autoexit -vn -acodec mp3
在 .ssh shell 中发出的命令有效。.sh 脚本中的同一行会产生错误并失败:
'o 可以找到名称为 'mp3
无法打开文件“/home/carousel/sounds/4_StartBell.mp3”或配置过滤器图
我在一些论坛上看到,通过控制台和脚本发出命令之间存在差异,并且 ffplay 可能没有设置所需的环境变量。
另一个线索是,如果我从上面的命令行删除 sudo -u root 部分,它会找到 mp3 文件,但会失败并显示消息:
没有指定协议无法初始化 SDL - 没有可用的视频设备(您是否设置了 DISPLAY 变量?)
如果我使用 sudo -u linaro(这是华硕设置的预配置帐户),该命令也会起作用。如果我克隆此帐户,我认为复制组成员身份和权限不会起作用。
这一切都让我怀疑我没有正确设置 ffplay。如果知道的人能给我一些建议,我将不胜感激...