2013-06-06 78 views
0

對不起,因爲我是linux新手。 OS「Ubuntu 12-04-AutogenByAWSMP」從java ProcessBuilder運行ffprobe失敗

從我的servlet我希望啓動ffprobe來了解關於電影文件的信息。

從命令行,這工作正常。從Java中這總是失敗:(從錯誤流)

在/ usr/bin中/ ffprobe:/opt/bitnami/common/lib/libstdc++.so.6:版本`GLIBCXX_3.4.11' 未找到(必填通過/usr/lib/x86_64-linux-gnu/libjack.so.0) /usr/bin/ffprobe:/opt/bitnami/common/lib/libstdc++.so.6:找不到版本'GLIBCXX_3.4.9'( /usr/lib/x86_64-linux-gnu/libjack.so.0需要) /usr/bin/ffprobe:/opt/bitnami/common/lib/libstdc++.so.6:未找到版本'GLIBCXX_3.4.15' (需要/usr/lib/x86_64-linux-gnu/libjack.so.0) /usr/bin/ffprobe:/opt/bitnami/common/lib/libstdc++.so.6:版本'GLIBCXX_3.4.9'not找到(需要/usr/lib/libopencv_core.so.2.3)

我的Java代碼:

private static String PATH_FOR_ENV = "=/opt/bitnami/sqlite/bin:/opt/bitnami/java/bin:/opt/bitnami/php/bin:/opt/bitnami/mysql/bin:/opt/bitnami/apache2/bin:/opt/bitnami/common/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"; 

..... 

    final ProcessBuilder builder = new ProcessBuilder(); 

      builder.redirectErrorStream(true); 
      List<String> params = createCommand("ffprobe"); 
      this.addFFProbeArgs(params); 
      params.add(src.getAbsolutePath()); 
      ProcessBuilder command = builder.command(params); 
      if(isLinux()) 
       command.environment().put("LIBPATH", PATH_FOR_ENV); 
      Process p= command.start(); 

      InputStream input = p.getInputStream(); 
      ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
      byte[] bytes = new byte[1024]; 
      int read; 
      while ((read = input.read(bytes)) != -1) 
      { 
       bos.write(bytes, 0, read); 
      } 
      input.close(); 
      p.waitFor(); 
      String info = new String(bos.toByteArray()); 
      System.out.println(info); 

附加助理

private void addFFProbeArgs(List<String> pParams) 
    { 
     pParams.add("-v"); 
     pParams.add("quiet"); 
     pParams.add("-show_streams"); 
     pParams.add("-show_format"); 
     pParams.add("json"); 
    } 
private List<String> createCommand(String pCommand) 
    { 
     List<String> commandParams = new ArrayList<String>(); 
     if(isLinux()) 
     { 
      //commandParams.add("/bin/bash"); 
      //commandParams.add("-c"); 
     } 
     commandParams.add(ROOT_DIR+ pCommand); 
     return commandParams; 
    } 

private static String  ROOT_DIR = "/usr/bin/"; 

我知道代碼不漂亮(沿,而我試圖找出問題已經一瘸一拐)。我做了大量的谷歌搜索和大量的閱讀(包括許多在這個網站上)。你可以看到我嘗試過的東西,例如在ffprobe前放置/ bin/bash -c。此外,我目前正在將LIBPATH設置爲與我在提示時抓取的PATH相同(抓住@吸管)。

有什麼想法?提前致謝。

回答

0

你可以嘗試臨時移動libstdC++,然後再次執行你的代碼嗎?

$ mkdir /opt/bitnami/backup.libstdc++ 
$ mv /opt/bitnami/common/lib/libstdc++.* /opt/bitnami/backup.libstdc++