【问题标题】:how to save the mjpeg stream as 3gp or mp4 format video files to the sdcard in android如何将 mjpeg 流作为 3gp 或 mp4 格式的视频文件保存到 android 中的 sdcard
【发布时间】:2011-12-26 02:28:56
【问题描述】:

我已将 mjpeg 流作为 xxx.mjpeg 保存到 sdcard。但是,android 不支持 mjpeg 视频文件。那么如何将 mjpeg 视频编码为 3gp 或 mp4 格式,然后将它们存储在 sdcard 上,最后,我可以在我的 android 手机上播放 3gp 或 mp4 视频,提前谢谢。

【问题讨论】:

  • 这不是一个真正的 Android 问题,是吗?您应该能够使用任何像样的视频转换工具将 mjpeg 编码的视频转换为 3gp 或 mp4 格式,例如HandBrake.
  • 这是一个安卓问题。我从互联网 lively.so 我想把这个位图保存为 3gp 或 mp4 视频文件。最后,我可以将这个 3gp 或 mp4 视频保存在 sdcard 上。目前,我的想法是使用android ndk和c++代码手动编码位图,但是很难。
  • 啊,这对我来说不是很清楚。 SO上有一个related question在Android上显示一个mjpeg流,它下面可能也会有你的答案。
  • 我已经使用相关问题中的方法获得了位图:stackoverflow.com/questions/3205191/android-and-mjpeg。但我不知道如何处理这些位图,手动将这些位图编码为 3gp 或 mp4 视频文件并将它们保存到 sdcard。
  • 对,所以你的问题与 mjpeg 关系不大,更多的是与 “如何在 Android 设备上将图像序列转换为 3gp/mp4?” 我恐怕我真的帮不了你。我也不确定你是否应该想要这个,考虑到设备的处理能力和电池电量。我最好的猜测是使用一些为 Android 编译的本机库。祝你好运!

标签: android format codec mjpeg


【解决方案1】:

我不知道 mobo 的 ffmpeg 源的状态。我很久以前就建好了。

我尝试了 rockplayer 的 ffmpeg 端口。这有无忧的构建。 我今天能够在 NDK_r4b 上成功构建它。

您可以从这里下载源代码:http://www.rockplayer.com/tech_en.html

修改 config.mk 以更改您的工具路径并运行 build_andriod.sh(拼写错误,但它有效 :))

告诉我进展如何

【讨论】:

  • 对不起,请假。我无法通过你的方法编译rockplayer的源代码。我只是在这个网站上使用了另一种方法:zouyuefen.blog.163.com/blog/static/102780156201111312130944。但是,我只得到 1.6kb libffmpeg.so 文件。所以我失败了。我希望你能给我一些网站或建议,我可以逐步编译ffmpeg。谢谢。
  • 如果我们可以一起编译ffmpeg成功,我会把你的答案作为最佳答案。现在你也是最棒的了。
【解决方案2】:

您无法使用当前的 Android API 实现此目的。

您需要使用 C++ 中的编码器对帧进行编码,并通过 JNI 将位图传递给编码器。 您可以从 MoboPlayer 的 ffmpeg 端口开始。你可以在this page底部找到他们的ffmpeg端口的下载链接

如果您在 Bitmaps 中有图像序列,您可以使用 AndroidBitmap_* 方法从 JNI 访问 Bitmap 的缓冲区并将其传递给 ffmpeg 进行编码

【讨论】:

  • 感谢您的建议。我已经下载了moboplayer的ffmpeg端口。但我不知道如何将 ffmpeg 端口用于我的 android 项目。如何使用 ffmpeg 并构建它?我已经在windows平台上安装了ndk和cygwin。
  • 将 ffmpeg 源代码复制到应用程序工作区的 jni 文件夹(如果您没有文件夹“jni”,请创建一个)。 mobo 团队提供的 ffmpeg 源码中有一个 Android.mk。通过 cygwin 转到此路径并发出 ndk-build。这应该构建一个 libffmpeg.so。现在将一个 JNI 文件添加到您的项目中,该文件使用 ffmpeg 实现您需要的所有本机方法。将预构建的 libffmpeg.so 链接到这个 jni 库。
  • 我在使用 cygwin 和 ndk 构建时出错。有一些错误,所以我没有得到 libffmpeg.so 文件。我只是在我的项目中获取 obj 文件夹。
  • $ /cygdrive/e/android-ndk-r6b/ndk-build Android NDK:警告:/cygdrive/d/AAN/eclipse/workspace/AnR/jni/Android 中不支持的源文件扩展名。 mk for module ffmpegCompile thumb : ffmpeg bic r5,r5,#0xFF0000' E:\cygwin\tmp\ccxDmRFI.s:241: Error: unshifted register required -- eor r4,r4,r5,lsr#8' make: *** [/cygdrive/d/AAN/eclipse/workspace/AnR/obj/local /armeabi/objs/ffmpeg/libavutil/crc.o] 错误 1
  • even :我记得在 Android.mk 中使用这些选项构建它。您可以尝试 # 可选编译器标志。 **LOCAL_CFLAGS := -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 - D_LARGEFILE_SOURCE -DPIC -march=armv6 -DANDROID=1 LOCAL_CFLAGS += $(CC_OPTIMIZE_FLAG) LOCAL_ARM_MODE := arm LOCAL_LDFLAGS := -L$(SYSROOT)/usr/lib -lz - llog **
猜你喜欢
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 2012-04-15
  • 1970-01-01
相关资源
最近更新 更多