저는 Raspberry pi 3 Jessie에서 Java로 약간의 프로그램을 작성하고 있으며 omxplayer를 사용하여 Java 프로그램 내부에서 사운드를 재생하려고합니다.Raspberry Pi의 Java에서 ProcessBuilder가 omxplayer에 대한 오류/입력 스트림을 표시하지 않습니다
는 다음 코드가 :이 프로그램은 제대로 사운드를 재생합니다
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로하지 않고 스트림을 읽는 시도
다음 omxplayer 어떤 라인 반환을 보내지 않았지만, 문제가 남아있는 경우
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();
}
}
});
.