我想写一个能够连接两个视频的Android应用程序
我尝试了以下代码
InputStream in=null;
OutputStream os=null;
String appFileDirectory = getFilesDir().getPath();
final String executableFilePath = appFileDirectory + "/ffmpeg";
final String input ="concat:/mnt/sdcard/input1.mpg|/mnt/sdcrad/input2.mpg";
File executable=new File(executableFilePath);
try {
in = getAssets().open("ffmpeg");
os = new FileOutputStream(executable);
int read = 0;
byte[] bytes = new byte[1024];
while ((read = in.read(bytes)) != -1) {
os.write(bytes, 0, read);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (os != null) {
try {
// outputStream.flush();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
executable.setExecutable(true);
Button b = (Button)findViewById(R.id.button);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
Process p = Runtime.getRuntime().exec(executableFilePath + "-i \""+ input + "\" -c copy /mnt/sdcrd/output.mpg");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
此代码不会出现任何错误,也不会崩溃,但单击按钮时没有任何反应。我创建了与android兼容的ffmpeg构建。所以任何人都可以帮我解决如何从android java代码运行命令。
答案 0 :(得分:0)
添加一些日志以检查ffmpeg文件是否已创建,是否获得可执行权限,是否存在/ mnt / sdcard输入文件,以及您的应用是否具有读取和写入外部存储的权限。
一个明显的错误是输入是不存在的 sdcrad ,输出尝试转到不存在的 sdcrd ,但这些可能是复制/的问题粘贴到SO。
顺便说一句,您可以轻松避免从资产中解压缩可执行文件的麻烦,请参阅How to package native commandline application in apk?上的答案