【问题标题】:Android FFMPEG: Could not execute the ffmpeg from Java codeAndroid FFMPEG:无法从 Java 代码执行 ffmpeg
【发布时间】:2013-09-23 21:37:10
【问题描述】:

我正在开发一个 Android 应用程序,我想从 静态图像列表。在网上做了一些搜索后,它让我 意识到使用“FFMPEG”是获得这个东西的方法 完毕。所以我掌握了这个网站: https://github.com/guardianproject/android-ffmpeg-java 我从哪里来 下载了 C 库和 Java 包装器。我能够编译 C 库——当然不是指令的布局方式——而是 我仍然能够在下获得“ffmpeg”可执行文件 /external/android-ffmpeg/ffmpeg 目录。我复制了那个可执行文件 我的当前目录然后复制到Android下的一个目录 我的应用程序可以在哪里访问它。然后我调用了提供的 Java 包装器,但是 我在日志文件中看到一些错误,如下所示:

08-13 11:55:37.848: D/FFMPEG(29598): /data/data/com.sample/app_bin/ffmpeg -y -loop 1 -i /storage/emulated/0/usersnapshot/ffmpeg/image%03d.jpg -r 25 -t 2 -qscale 5 /storage/emulated/0/video/snapshot-video.mp4 
08-13 11:55:37.898: I/ShellCallback : shellOut()(29598): /data/data/com.sample/app_bin/ffmpeg[1]: syntax error: '(' unexpected
08-13 11:55:37.938: I/ShellCallback : processComplete()(29598): 1

以下是代码 sn-p(其中 targetDirectoryForFFMPEG = 存储图像的目录):

FfmpegController ffmpegController = new FfmpegController(this, targetDirectoryForFFMPEG);
String out = videoOutPutFile.getPath();
        MediaDesc mediaIn = new MediaDesc();
        mediaIn.path = targetDirectoryForFFMPEG+"/image%03d.jpg";
        mediaIn.videoFps =  "25";   
        ffmpegController.convertImageToMP4(mediaIn, 2, out,new ShellCallback() {

            @Override
            public void shellOut(String shellLine) {
                Log.i("ShellCallback : shellOut()", shellLine);
            }

            @Override
            public void processComplete(int exitValue) {
                Log.i("ShellCallback : processComplete()", exitValue+"");
            }
        });

以前有人实施过吗?如果是的话,你能指出我做错了什么吗?如果需要,我会提供更多信息。

【问题讨论】:

  • 检查ffmpeg 可执行文件的权限。

标签: android video ffmpeg


【解决方案1】:

你的设备上有根吗?

Mount '/data' 然后在 shell 中输入你相同的 'ffmpeg' 命令,看看报错是否一样。

尝试使用 shell 测试不同的命令表达式。

单独尝试 'ffmpeg' 并仅使用一个输入文件。查看这些命令是否产生预期的输出。

我的猜测是调用 'ffmpeg.main()' 存在与您的构建细节相关的问题。

【讨论】:

  • 感谢您的回复。我肯定会尝试您所说的,但是是否可以在不编译 C/C++ 代码的情况下使用 ffmpeg exec?为什么我问是因为我不懂 C/C++,我想确保我没有做错任何事情。
  • ffmpeg 不太可能在设备上运行,除非您为特定硬件使用正确的 ffmpeg.config() 进行交叉编译...
【解决方案2】:

您的 ffmpeg 可能没有为 arm 正确编译。未使用正确编译的 ffmpeg 时,我遇到了同样的错误。

【讨论】:

    猜你喜欢
    • 2015-03-13
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 2021-02-19
    • 2018-01-15
    • 2020-10-11
    • 1970-01-01
    • 2015-07-13
    相关资源
    最近更新 更多