android 编译mp4v2 2.0.0生成动态库

转载 2013年08月23日 11:41:52

最近要录制h264+aac的mp4视频,使用mp4v2来实现,下面就是编译的方法

1、下载源码,到官网http://code.google.com/p/mp4v2/downloads/list 下载,现在最新的是mp4v2 2.0.0

2、解压下载的mp4v2-2.0.0.tar.bz2,然后进入mp4v2-2.0.0,将里面的文件以及文件夹拷贝的新创建的jni目录中,目录结构例如:/home/zhangjie/mp4v2-2.0.0/jni

3、进入jni目录,将include目录中的mp4v2文件夹拷贝出来放到jni目录下面,例如:/home/zhangjie/mp4v2-2.0.0/jni/mp4v2

4、在jni目录下创建Application.mk,内容如下:

APP_ABI := armeabi
APP_PLATFORM := android-8
APP_STL := stlport_static
APP_CPPFLAGS += -fno-rtti

5、创建Android.mk文件,内容如下:

LOCAL_PATH:=$(call my-dir)  
  
include $(CLEAR_VARS)  
NDK=/opt/android-ndk-r8d  
LOCAL_SRC_FILES:= \  
    src/3gp.cpp src/atom_ac3.cpp \  
    src/atom_amr.cpp src/atom_avc1.cpp src/atom_avcC.cpp \  
    src/atom_chpl.cpp src/atom_colr.cpp src/atom_d263.cpp \  
    src/atom_dac3.cpp src/atom_damr.cpp src/atom_dref.cpp \  
    src/atom_elst.cpp src/atom_enca.cpp src/atom_encv.cpp \  
    src/atom_free.cpp src/atom_ftyp.cpp src/atom_ftab.cpp \  
    src/atom_gmin.cpp src/atom_hdlr.cpp src/atom_hinf.cpp \  
    src/atom_hnti.cpp src/atom_href.cpp src/atom_mdat.cpp \  
    src/atom_mdhd.cpp src/atom_meta.cpp src/atom_mp4s.cpp \  
    src/atom_mp4v.cpp src/atom_mvhd.cpp src/atom_nmhd.cpp \  
    src/atom_ohdr.cpp src/atom_pasp.cpp src/atom_root.cpp \  
    src/atom_rtp.cpp src/atom_s263.cpp src/atom_sdp.cpp \  
    src/atom_sdtp.cpp src/atom_smi.cpp src/atom_sound.cpp \  
    src/atom_standard.cpp src/atom_stbl.cpp src/atom_stdp.cpp \  
    src/atom_stsc.cpp src/atom_stsd.cpp src/atom_stsz.cpp \  
    src/atom_stz2.cpp src/atom_text.cpp src/atom_tfhd.cpp \  
    src/atom_tkhd.cpp src/atom_treftype.cpp src/atom_trun.cpp \  
    src/atom_tx3g.cpp src/atom_udta.cpp src/atom_url.cpp \  
    src/atom_urn.cpp src/atom_uuid.cpp src/atom_video.cpp \  
    src/atom_vmhd.cpp src/atoms.h src/cmeta.cpp \  
    src/descriptors.cpp src/descriptors.h src/exception.cpp \  
    src/exception.h src/enum.h src/enum.tcc src/impl.h \  
    src/isma.cpp src/log.h src/log.cpp src/mp4.cpp src/mp4array.h \  
    src/mp4atom.cpp src/mp4atom.h src/mp4container.cpp \  
    src/mp4container.h src/mp4descriptor.cpp src/mp4descriptor.h \  
    src/mp4file.cpp src/mp4file.h src/mp4file_io.cpp \  
    src/mp4info.cpp src/mp4property.cpp src/mp4property.h \  
    src/mp4track.cpp src/mp4track.h src/mp4util.cpp src/mp4util.h \  
    src/ocidescriptors.cpp src/ocidescriptors.h src/odcommands.cpp \  
    src/odcommands.h src/qosqualifiers.cpp src/qosqualifiers.h \  
    src/rtphint.cpp src/rtphint.h src/src.h src/text.cpp \  
    src/text.h src/util.h src/bmff/bmff.h src/bmff/impl.h \  
    src/bmff/typebmff.cpp src/bmff/typebmff.h \  
    src/itmf/CoverArtBox.cpp src/itmf/CoverArtBox.h \  
    src/itmf/Tags.cpp src/itmf/Tags.h src/itmf/generic.cpp \  
    src/itmf/generic.h src/itmf/impl.h src/itmf/itmf.h \  
    src/itmf/type.cpp src/itmf/type.h \  
    src/qtff/ColorParameterBox.cpp src/qtff/ColorParameterBox.h \  
    src/qtff/PictureAspectRatioBox.cpp \  
    src/qtff/PictureAspectRatioBox.h src/qtff/coding.cpp \  
    src/qtff/coding.h src/qtff/impl.h src/qtff/qtff.h \  
    libplatform/endian.h libplatform/impl.h \  
    libplatform/io/File.cpp libplatform/io/File.h \  
    libplatform/io/FileSystem.cpp libplatform/io/FileSystem.h \  
    libplatform/number/random.h libplatform/platform.h \  
    libplatform/platform_base.h libplatform/platform_posix.h \  
    libplatform/process/process.h \  
    libplatform/prog/option.cpp libplatform/prog/option.h \  
    libplatform/sys/error.cpp libplatform/sys/error.h \  
    libplatform/time/time.cpp libplatform/time/time.h \  
    libplatform/warning.h libplatform/io/File_posix.cpp \  
    libplatform/io/FileSystem_posix.cpp \  
    libplatform/number/random_posix.cpp \  
    libplatform/process/process_posix.cpp \  
    libplatform/time/time_posix.cpp \  
    libutil/Database.cpp \  
    libutil/Database.h libutil/Timecode.cpp libutil/Timecode.h \  
    libutil/TrackModifier.cpp libutil/TrackModifier.h \  
    libutil/Utility.cpp libutil/Utility.h libutil/crc.cpp \  
    libutil/crc.h libutil/impl.h libutil/other.cpp libutil/other.h \  
    libutil/util.h  
  
LOCAL_ARM_MODE := arm  
LOCAL_CFLAGS := -fexceptions  
  
LOCAL_LDFLAGS := \  
        $(NDK)/sources/cxx-stl/gnu-libstdc++/4.4.3/libs/armeabi-v7a/libsupc++.a  
  
LOCAL_LDLIBS := -llog  
  
LOCAL_SHARED_LIBRARIES := \  
    libutils \  
    libbinder \  
    libcutils  
LOCAL_CXXFLAGS :=-fexceptions -Wno-write-strings  
  
LOCAL_MODULE:= libCameraShooting  
LOCAL_CPPFLAGS := -O2 -fexceptions -DHAVE_SOCKLEN_T -DHAVE_STRUCT_IOVEC  
LOCAL_MODULE_TAGS := optional  
include $(BUILD_SHARED_LIBRARY)  


6、最后在jni目录下的终端中输入ndk-build,结果如下:

root@zhangjie:/home/zhangjie/mp4v2-2.0.0/jni# ndk-build  
Android NDK: WARNING: Unsupported source file extensions in /home/zhangjie/mp4v2-2.0.0/jni/Android.mk for module CameraShooting      
Android NDK:   AppCameraShooting.h src/atoms.h src/descriptors.h src/exception.h src/enum.h src/enum.tcc src/impl.h src/log.h src/mp4array.h src/mp4atom.h src/mp4container.h src/mp4descriptor.h src/mp4file.h src/mp4property.h src/mp4track.h src/mp4util.h src/ocidescriptors.h src/odcommands.h src/qosqualifiers.h src/rtphint.h src/src.h src/text.h src/util.h src/bmff/bmff.h src/bmff/impl.h src/bmff/typebmff.h src/itmf/CoverArtBox.h src/itmf/Tags.h src/itmf/generic.h src/itmf/impl.h src/itmf/itmf.h src/itmf/type.h src/qtff/ColorParameterBox.h src/qtff/PictureAspectRatioBox.h src/qtff/coding.h src/qtff/impl.h src/qtff/qtff.h libplatform/endian.h libplatform/impl.h libplatform/io/File.h libplatform/io/FileSystem.h libplatform/number/random.h libplatform/platform.h libplatform/platform_base.h libplatform/platform_posix.h libplatform/process/process.h libplatform/prog/option.h libplatform/sys/error.h libplatform/time/time.h libplatform/warning.h libutil/Database.h libutil/Timecode.h libutil/TrackModifier.h libutil/Utility.h libutil/crc.h libutil/impl.h libutil/other.h libutil/util.h      
Compile++ arm    : CameraShooting <= 3gp.cpp  
Compile++ arm    : CameraShooting <= atom_ac3.cpp  
Compile++ arm    : CameraShooting <= atom_amr.cpp  
Compile++ arm    : CameraShooting <= atom_avc1.cpp  
Compile++ arm    : CameraShooting <= atom_avcC.cpp  
Compile++ arm    : CameraShooting <= atom_chpl.cpp  
Compile++ arm    : CameraShooting <= atom_colr.cpp  
Compile++ arm    : CameraShooting <= atom_d263.cpp  
Compile++ arm    : CameraShooting <= atom_dac3.cpp  
Compile++ arm    : CameraShooting <= atom_damr.cpp  
Compile++ arm    : CameraShooting <= atom_dref.cpp  
Compile++ arm    : CameraShooting <= atom_elst.cpp  
Compile++ arm    : CameraShooting <= atom_enca.cpp  
Compile++ arm    : CameraShooting <= atom_encv.cpp  
Compile++ arm    : CameraShooting <= atom_free.cpp  
Compile++ arm    : CameraShooting <= atom_ftyp.cpp  
Compile++ arm    : CameraShooting <= atom_ftab.cpp  
Compile++ arm    : CameraShooting <= atom_gmin.cpp  
Compile++ arm    : CameraShooting <= atom_hdlr.cpp  
Compile++ arm    : CameraShooting <= atom_hinf.cpp  
Compile++ arm    : CameraShooting <= atom_hnti.cpp  
Compile++ arm    : CameraShooting <= atom_href.cpp  
Compile++ arm    : CameraShooting <= atom_mdat.cpp  
Compile++ arm    : CameraShooting <= atom_mdhd.cpp  
Compile++ arm    : CameraShooting <= atom_meta.cpp  
Compile++ arm    : CameraShooting <= atom_mp4s.cpp  
Compile++ arm    : CameraShooting <= atom_mp4v.cpp  
Compile++ arm    : CameraShooting <= atom_mvhd.cpp  
Compile++ arm    : CameraShooting <= atom_nmhd.cpp  
Compile++ arm    : CameraShooting <= atom_ohdr.cpp  
Compile++ arm    : CameraShooting <= atom_pasp.cpp  
Compile++ arm    : CameraShooting <= atom_root.cpp  
Compile++ arm    : CameraShooting <= atom_rtp.cpp  
Compile++ arm    : CameraShooting <= atom_s263.cpp  
Compile++ arm    : CameraShooting <= atom_sdp.cpp  
Compile++ arm    : CameraShooting <= atom_sdtp.cpp  
Compile++ arm    : CameraShooting <= atom_smi.cpp  
Compile++ arm    : CameraShooting <= atom_sound.cpp  
Compile++ arm    : CameraShooting <= atom_standard.cpp  
Compile++ arm    : CameraShooting <= atom_stbl.cpp  
Compile++ arm    : CameraShooting <= atom_stdp.cpp  
Compile++ arm    : CameraShooting <= atom_stsc.cpp  
Compile++ arm    : CameraShooting <= atom_stsd.cpp  
Compile++ arm    : CameraShooting <= atom_stsz.cpp  
Compile++ arm    : CameraShooting <= atom_stz2.cpp  
Compile++ arm    : CameraShooting <= atom_text.cpp  
Compile++ arm    : CameraShooting <= atom_tfhd.cpp  
Compile++ arm    : CameraShooting <= atom_tkhd.cpp  
Compile++ arm    : CameraShooting <= atom_treftype.cpp  
Compile++ arm    : CameraShooting <= atom_trun.cpp  
Compile++ arm    : CameraShooting <= atom_tx3g.cpp  
Compile++ arm    : CameraShooting <= atom_udta.cpp  
Compile++ arm    : CameraShooting <= atom_url.cpp  
Compile++ arm    : CameraShooting <= atom_urn.cpp  
Compile++ arm    : CameraShooting <= atom_uuid.cpp  
Compile++ arm    : CameraShooting <= atom_video.cpp  
Compile++ arm    : CameraShooting <= atom_vmhd.cpp  
Compile++ arm    : CameraShooting <= cmeta.cpp  
Compile++ arm    : CameraShooting <= descriptors.cpp  
Compile++ arm    : CameraShooting <= exception.cpp  
Compile++ arm    : CameraShooting <= isma.cpp  
Compile++ arm    : CameraShooting <= log.cpp  
Compile++ arm    : CameraShooting <= mp4.cpp  
Compile++ arm    : CameraShooting <= mp4atom.cpp  
Compile++ arm    : CameraShooting <= mp4container.cpp  
Compile++ arm    : CameraShooting <= mp4descriptor.cpp  
Compile++ arm    : CameraShooting <= mp4file.cpp  
Compile++ arm    : CameraShooting <= mp4file_io.cpp  
Compile++ arm    : CameraShooting <= mp4info.cpp  
Compile++ arm    : CameraShooting <= mp4property.cpp  
Compile++ arm    : CameraShooting <= mp4track.cpp  
Compile++ arm    : CameraShooting <= mp4util.cpp  
Compile++ arm    : CameraShooting <= ocidescriptors.cpp  
Compile++ arm    : CameraShooting <= odcommands.cpp  
Compile++ arm    : CameraShooting <= qosqualifiers.cpp  
Compile++ arm    : CameraShooting <= rtphint.cpp  
Compile++ arm    : CameraShooting <= text.cpp  
Compile++ arm    : CameraShooting <= typebmff.cpp  
Compile++ arm    : CameraShooting <= CoverArtBox.cpp  
Compile++ arm    : CameraShooting <= Tags.cpp  
Compile++ arm    : CameraShooting <= generic.cpp  
Compile++ arm    : CameraShooting <= type.cpp  
Compile++ arm    : CameraShooting <= ColorParameterBox.cpp  
Compile++ arm    : CameraShooting <= PictureAspectRatioBox.cpp  
Compile++ arm    : CameraShooting <= coding.cpp  
Compile++ arm    : CameraShooting <= File.cpp  
Compile++ arm    : CameraShooting <= FileSystem.cpp  
Compile++ arm    : CameraShooting <= option.cpp  
Compile++ arm    : CameraShooting <= error.cpp  
Compile++ arm    : CameraShooting <= time.cpp  
Compile++ arm    : CameraShooting <= File_posix.cpp  
Compile++ arm    : CameraShooting <= FileSystem_posix.cpp  
Compile++ arm    : CameraShooting <= random_posix.cpp  
Compile++ arm    : CameraShooting <= process_posix.cpp  
Compile++ arm    : CameraShooting <= time_posix.cpp  
Compile++ arm    : CameraShooting <= Database.cpp  
Compile++ arm    : CameraShooting <= Timecode.cpp  
Compile++ arm    : CameraShooting <= TrackModifier.cpp  
Compile++ arm    : CameraShooting <= Utility.cpp  
Compile++ arm    : CameraShooting <= crc.cpp  
Compile++ arm    : CameraShooting <= other.cpp  
Prebuilt       : libstlport_static.a <= <NDK>/sources/cxx-stl/stlport/libs/armeabi/  
SharedLibrary  : libCameraShooting.so  
Install        : libCameraShooting.so => libs/armeabi/libCameraShooting.so  


7、成功编译出mp4v2库。

源作者: http://blog.csdn.net/jwzhangjie/article/details/8783263

 谢谢这个哥们了。不过要提醒大家的是,我在cygwin 中编译的时候怎么都挂载库失败,最后把库拷到编译目录下指定路径就可以了。

还有一点是编译的包很大。大家要自己改Android.mk吧。可能我编译的环境不同吧。

iOS如何编译MP4v2静态库

在Google搜索到一个能生成mp4v2的ios静态库的文件,地址是https://github.com/Thinkerfans/lib-mp4v2,解压缩里面的mp4v2-2.0.0.tar.bz2...
  • itiapp_home
  • itiapp_home
  • 2016年09月26日 13:16
  • 977

MP4v2 Android

MP4v2mp4v2是一个开源项目,为操作mp4文件提供了一套强大的API。mp4v2提供了一套基于ISO/IEC 14496-1:2001标准的mp4格式文件的创建和修改的API,这个媒体容器被广泛...
  • momo0853
  • momo0853
  • 2017年06月29日 14:18
  • 505

Mp4V2库编译及使用

用Mp4V2 库将H264流录成MP4文件
  • fb731666148
  • fb731666148
  • 2015年04月09日 12:07
  • 3644

android 编译C生成so动态链接库

一、步骤     1、定义并调用本地方法           private native int add(int i,int j);     2、在根目录下创建jni文件夹     3、jni文件夹...
  • yunzhonghe5786
  • yunzhonghe5786
  • 2016年03月19日 14:34
  • 549

Android使用Mp4v2用h264流和aac流合成mp4

前言在能够使用原生的情况下,博主是绝对不会尝试陌生的jni编程的。但是,偏偏android原生的MediaMuxer(合成器)使用有限制不说,在合成的时候出现各种问题,网上的可参考资料也少,绝大多数都...
  • chezi008
  • chezi008
  • 2017年04月14日 15:25
  • 3586

编译MP4v2

Mp4v2 一开始是与mpeg4ip这个开源项目捆绑在一起的,现在已经脱离mpeg4ip以一个单独的库存在着。Mp4v2库提供了一些API用来创建修改MP4文件。 源码在http://mp4v2.g...
  • u012377333
  • u012377333
  • 2014年12月02日 11:37
  • 1509

海思3520DV300编译mp4v2

一、下载源码mp4v2-2.0.0.tar.bz2 https://code.google.com/p/mp4v2/ 二、编译 ubuntu:~$ tar jxf mp4v2-2.0.0.tar.bz...
  • fteworld
  • fteworld
  • 2016年09月20日 21:00
  • 977

H264学习过程总结2 android 编译mp4v2 2.0.0生成动态库

android 编译mp4v2 2.0.0生成动态库 主要参考这作者的帖子 http://blog.csdn.net/jwzhangjie/article/details/8783263 但...
  • tankaro
  • tankaro
  • 2014年03月31日 17:04
  • 876

编译Android平台的OpenCV生成动态库

看网上说使用Cmake-gui,结果本人在使用中各种坑,最后直接命令编译,因为gui也是执行的命令编译嘛。 首先你得安装CMake 然后你得下载一份OpenCV源代码 在源代码目录下切换到script...
  • u010696783
  • u010696783
  • 2016年08月25日 15:39
  • 764

嵌入式Linux下MP4视频录制库MP4V2移植和简介

MP4V2的前身是MPEG4IP开源项目中的一个功能库,但是现在MPEG4IP已经不在更新了。但是MP4V2还在更新,并且独立出来了。MP4V2主要是作为MP4文件的录制一个开源库...
  • wavemcu
  • wavemcu
  • 2014年10月31日 21:03
  • 3093
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android 编译mp4v2 2.0.0生成动态库
举报原因:
原因补充:

(最多只允许输入30个字)