2017-05-11 2 views
1

저는 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(); 
     } 
    } 
}); 

.

답변

0

정확히 동일한 문제가있어서 -s (통계) 매개 변수로 수정할 수 있습니다. 이 경우 플레이어는 상태 정보와 모든 시작 정보를 계속 입력합니다.

관련 문제