我已将 ffmpeg 库移植到 Android。使用 JNI 接口(interface),我可以通过向 ffmpeg 的 main 方法提供参数来运行 ffmpeg 命令,就像从命令行一样。
为了获取视频的特定部分,我使用以下命令:
ffmpeg -i /mnt/sdcard/input_video.mp4 -ss 00:00:12 -t 00:00:10 -an /mnt/sdcard/output_video.mp4
效果很好。视频从 12. 秒分割到 22. 秒并保存视频,该方法正常返回(为 0)。
但是,如果我在第一个调用完成后进行第二个类似的调用(例如不同的开始时间),则 ffmpeg 将无法处理请求并引发段错误。
对于第一次调用,它给出这样的信息:
Guessed Channel Layout for Input Stream #0.0 : mono
并且有效。但对于第二个,消息如下:
Guessed Channel Layout for Input Stream #1.0 : mono
而且它不起作用。不知道和错误有没有关系。
一般来说,这个问题应该与静态全局变量有关(我认为),但我无法正确重置它们。多次成功调用 ffmpeg main 方法的解决方案可能是什么?最佳答案
https://github.com/jhotovy/android-ffmpeg
从同一个 Activity 多次调用 ffmpeg 的 main() 会导致段错误。这仍然是 libffmpeg 的一个问题,但 libffmpeginvoke 至少应用了此处描述的创可贴解决方案:Calling native method twice of third party library in an Activity causes the Android application to close down .
关于android - Android 中多次调用 ffmpeg main 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12665748/