【问题标题】:Android , Java - Rendering a video using bitmap frames to reverse a video (Xuggler)Android , Java - 使用位图帧渲染视频以反转视频 (Xuggler)
【发布时间】:2012-08-12 09:59:35
【问题描述】:

ArrayList<Bitmap> 中没有视频帧。我已经通过视频文件(.mp4)使用MediaMetadataRetriever.getFrameAtTime() 方法访问了这些帧。

我颠倒了 ArrayList 中帧的顺序。 现在使用这个反向排序的帧队列我想渲染一个视频,所以它会被反转(我希望我在正确的轨道上)。

创建该视频后,我还想将其保存到 SD 卡。

如何做到这一点? 或者 是否还有其他方法可以在java中反转视频?

编辑 1: (***使用 xuggler*)**

我尝试使用 xuggler ...我尝试使用它的 .jar 文件。 但它会引发一些错误。

[2012-08-18 00:29:16 - xugglertest2] The library 'xuggle-xuggler-5.2.jar' contains native libraries that will not run on the device.
    [2012-08-18 00:29:16 - xugglertest2]  The following libraries were found:
    [2012-08-18 00:29:16 - xugglertest2]  - com/xuggle/ferry/i686-pc-linux-gnu/libxuggle-ferry.so
    [2012-08-18 00:29:16 - xugglertest2]  - com/xuggle/ferry/i686-pc-linux-gnu/libxuggle-xuggler-io.so
    [2012-08-18 00:29:16 - xugglertest2]  - com/xuggle/ferry/i686-pc-linux-gnu/libxuggle-xuggler.so
    [2012-08-18 00:29:16 - xugglertest2]  - com/xuggle/ferry/i686-pc-linux-gnu/libxuggle.so
    [2012-08-18 00:29:16 - xugglertest2]  - com/xuggle/ferry/x86_64-pc-linux-gnu/libxuggle-ferry.so
    [2012-08-18 00:29:16 - xugglertest2]  - com/xuggle/ferry/x86_64-pc-linux-gnu/libxuggle-xuggler-io.so
    [2012-08-18 00:29:16 - xugglertest2]  - com/xuggle/ferry/x86_64-pc-linux-gnu/libxuggle-xuggler.so
    [2012-08-18 00:29:16 - xugglertest2]  - com/xuggle/ferry/x86_64-pc-linux-gnu/libxuggle.so

我该怎么办??

我将 xuggler-xuggler-5.4.jar 复制到项目的 libs 文件夹中,然后将其添加到构建路径。 我做得对吗?



编辑 2: (使用 ffmpeg)
我已经根据给定的Here 在 ubuntu 平台上为 android 编译了 ffmpeg
我根据文档获得了编译文件。
现在谁能告诉我如何在 android 应用程序中使用这些编译文件? 我应该如何处理这些文件??
我没有找到任何合适的文档。任何帮助都是 gr8。


编辑 3:(移植到 android -ffmpeg)

嘿.. 最后我在 ubuntu 上编译了 ffmpeg,我得到了 libffmpeg.so。我成功地将它移植到android。 libffmpeg.so 正在成功加载 android 活动。现在我只想测试一个简单的 ffmpeg 命令或程序。
你能建议我在哪里寻找它吗?你能建议我一个示例命令来测试它吗?

感谢和问候

【问题讨论】:

  • 你解决了吗?请帮帮我,我有类似的要求。
  • 不幸的是我没有。一旦我解决了这个问题,我会在这里发布解决方案。
  • 如果你可以访问视频文件,你不能把它复制到SD卡吗? getFrameAtTime() 无论如何只能得到 1 帧,所以我不确定你将如何从中构建视频。
  • 是的,我正在这样做!我得到帧!现在我想反转视频.. 所以我反转队列 ArrayList 中的帧顺序。现在我想使用反向帧队列渲染视频!
  • 我稍微编辑了我的问题。请看一下

标签: java android video rendering xuggler


【解决方案1】:

您可以使用ffmpeg 从图像中组合视频。您可以通过几种方式将 ffmpeg 集成到 Java(Android) 中(一种是通过

直接运行它

Runtime.getRuntime().exec("ffmpeg <options>");

),但通过Xuggler 项目可能是一个好方法——它严重依赖于ffmpeg。作为起点,这里有一个set of introduction tutorials,这里有一个完整的教程how to encode video from sequence of images。这需要大量的工作和阅读,但您需要的所有信息都在那里。祝你好运!

【讨论】:

  • 或者,您可以将 ffmpeg 构建为共享库并链接它;编写一个 JNI 包装器,你应该已经准备好了。
  • 请看看我的问题。任何帮助都会很棒。见编辑
  • 尝试将所有 jars 从 xuggler>share>java>jars 添加到构建路径
  • 请看一下我的编辑 3。我成功地将 ffmpeg 移植到了 android 上。只需要一点帮助来测试它。
  • @Chaitanya Chandurkar,你有没有让它工作或找到其他解决方案?如果您能发布对您自己问题的答案将不胜感激。
【解决方案2】:

关于您的 xuggler 使用情况,您的库版本不适用于您的特定设备,因为它包含为 x86_64 和 i686 平台编译的本机代码:

[2012-08-18 00:29:16 - xugglertest2]  - com/xuggle/ferry/i686-pc-linux-gnu/
[2012-08-18 00:29:16 - xugglertest2]  - com/xuggle/ferry/x86_64-pc-linux-gnu/

尝试使用为 ARMv6 编译的本机代码部分查找此库的版本(最常见的 Android 架构 - 包括较旧的设备,如果不想支持大约 1-2 年前的设备,ARMv7 会更好)。

否则,您需要为 ARM 编译 ffmpeg 并在支持 Android NDK 的情况下使用它。您需要用 C/C++ 编写代码,将您的一系列图像编码到特定文件中,并使用 JNI 接口将其包装起来。您可以将 Java 数组传递给类方法的本机实现。

请查看 SDK 示例中的示例 Android NDK 应用程序,了解如何在您的代码中使用 JNI

【讨论】:

    猜你喜欢
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    相关资源
    最近更新 更多