我正在尝试使用监护人项目将两个mp4视频合并为我的应用中的库项目。但它不会在指定位置生成输出。我为它做了各种解决方案,但没有成功。 PFB代码:
File fileTmp = this.getCacheDir();
File fileAppRoot = new File(this.getApplicationInfo().dataDir);
FfmpegController fc;
fc = new FfmpegController(fileTmp, fileAppRoot);
final Clip out = new Clip(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+"/Video/compiled.mp4");
ArrayList<Clip> listVideos = new ArrayList<Clip>();
File fileVideoRoot = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+"/Video");
String[] fileList = fileVideoRoot.list();
for (String fileVideo : fileList)
{
if (fileVideo.endsWith("mp4"))
{
Clip clip = new Clip();
clip.path = new File(fileVideoRoot,fileVideo).getCanonicalPath();
fc.getInfo(clip);
clip.duration = clip.duration-1;
listVideos.add(clip);
}
}
fc.concatAndTrimFilesMP4Stream(listVideos, out, false, false, new ShellUtils.ShellCallback() {
@Override
public void shellOut(String shellLine) {
System.out.println("fc>" + shellLine);
}
@Override
public void processComplete(int exitValue) {
if (exitValue < 0)
System.err.println("concat non-zero exit: " + exitValue);
}
});
我得到例外:
渲染视频时出现问题: /mnt/sdcard/Download/Video/compiled.mp4
请指导我如何在android中连接视频。
答案 0 :(得分:0)
这不是来自ffmpeg的stdout的ffmpeg错误。
为了弄清楚实际发生了什么,你需要在android层中捕获STREAM = stdout和来自本地&#39;流程构建者的STREAM = stderr&#39;或者你用来从Android / java获得shell的任何东西......
例如:
ProcessBuilder builder = new ProcessBuilder(command);
Map<String, String> environ = builder.environment();
// for(Entry<String, String> entry : environ.entrySet()){
// System.out.println("ENV " +entry.getKey() + " " +entry.getValue());
// }
// builder.redirectErrorStream(true);
Process process = null;
try {
process = builder.start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
//System.out.println(line);
outfil=line;
}
// int exitVal = process.waitFor();
// System.out.println("Process exitValue: " + exitVal);
如果您使用root电话进行测试,那么您应该只能使用adb push将ffmpeg二进制文件移动到/ data / data / ...并直接调用它。
您可以将stderr / stdout与CLI测试一起重定向到日志文件。