【问题标题】:ProcessBuilder in Java on Raspberry Pi 3 not showing error/input stream for omxplayerRaspberry Pi 3 上 Java 中的 ProcessBuilder 未显示 omxplayer 的错误/输入流
【发布时间】:2017-05-11 13:40:03
【问题描述】:

我正在 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 没有发送任何线路返回,但问题仍然存在。

【问题讨论】:

    标签: java processbuilder omxplayer


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 2012-07-19
      • 1970-01-01
      相关资源
      最近更新 更多