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相同(抓住@吸管)。
有什麼想法?提前致謝。