gpt4 book ai didi

java - Raspberry Pi 3 上的 Java 中的 ProcessBuilder 未显示 omxplayer 的错误/输入流

转载 作者:太空宇宙 更新时间:2023-11-04 11:29:49 24 4
gpt4 key购买 nike

我正在 Raspberry pi 3 Jessie 上用 Java 编写一个小程序,并且尝试使用 omxplayer 从 java 程序内部播放声音。

我有以下代码:

ProcessBuilder p = new ProcessBuilder("omxplayer", "/path/to/wav");
p.redirectErrorStream(true);

Process pr = p.start();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(pr.getInputStream()));
Executors.newSingleThreadExecutor().execute(new Runnable() {
@Override
public void run() {
try {
String line = "";
while((line = bufferedReader.readLine()) != null) {
System.out.println("Reading " + line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
});

程序将正确播放声音,但不会输出任何内容,直到到达 wav 末尾,然后打印所有内容。但是,当我直接在终端中启动相同的命令时,我可以看到 wav 期间显示的文本。

例如,当我在运行 omxplayer 的终端中按“+”或“-”时,它会更改音量并打印“当前音量:blabla mB”,但是当我通过 ProcessBuilder 发送“+”或“-”时,我可以听到 wav 的声音发生变化,但仍然没有输出。

这很奇怪,因为我已经将 ProcessBuilder 用于许多其他用途,但从未遇到过这样的问题。

您认为问题出在 omxplayer 的实现上吗?或者我在这里做错了什么?

编辑:

我尝试在没有 BufferedReader 的情况下读取流:

InputStream inputStream = pr.getInputStream();
Executors.newSingleThreadExecutor().execute(new Runnable() {
@Override
public void run() {
try {
int read;
while((read = inputStream.read()) >= 0) {
System.out.println("Reading " + (char)read);
}
} catch (IOException e) {
e.printStackTrace();
}
}
});

如果 omxplayer 没有发送任何行返回,但问题仍然存在。

最佳答案

我遇到了完全相同的问题,可以使用参数-s(统计)来修复它。在这种情况下,播放器不断地输入状态信息以及所有开始信息。

关于java - Raspberry Pi 3 上的 Java 中的 ProcessBuilder 未显示 omxplayer 的错误/输入流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43917142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com