我现在已经把头撞在墙上一段时间了。我需要在android上使用ffmpeg修剪部分mp4文件。我有ffmpeg编译,链接,我可以确认它在我的ndk调用中按预期工作。我遇到的是在一个可以实际使用的协议中获取一个mp4文件到ffmpeg。
现在,我有一个文件的Uri,我得到了一个ParcelFileDescriptor。我将其文件描述符传递给ndk调用,该调用使用管道协议执行所有ffmpeg处理。问题:ffmpeg无法通过管道协议读取mp4,因为它一旦找到moov原子就需要回到起点。
我正在做的就是重新制作视频。我没有做任何繁重的工作,或者更复杂的ffmpeg电话
尝试的解决方案:设置自定义AVio调用,将描述符作为文件流打开,并以此方式处理。问题:java中的文件描述符不可搜索,它更像是一个流。
可能的解决方案:预处理视频以使moov原子位于前方。问题:不允许,文件来自我无法控制的地方。
可能的解决方案:运行一个调用以查找所有文件信息,然后执行另一个调用以实际重新启动文件。问题:我不知道从第一次解析到我需要保存什么才能实现这一点。只是moov原子?我可以在第一次调用的inputFormatContext中用第二次调用中的新对象替换io对象吗?我可以将两个不同的文件描述符传递给同一个文件,而不必进行两次ndk调用吗?
非常感谢您提供的任何帮助或想法。