在某些设备上成功编译ffmpeg和chromaprint for android

时间:2016-07-23 17:19:01

标签: android compilation ffmpeg

我遵循本网站的建议:

https://bitbucket.org/phorton1/chromaprint

我从网站上复制了ffmpeg和chromaprint库的multi-configuremulti-make脚本。我已将它们用于ffmpeg 3.0和chromaprint 1.3.2的最新克隆。我开始工作' .so' arm,x86和armv7的文件。我没有编译问题。我将它们加载到我的应用程序(一个非常简单的应用程序,只是为了测试这个库),我在我的两个设备上尝试它。一个是三星Galaxy TabPro(SM-T320,api 19),一个是三星S4(api 21)。我让程序在两者上运行。我可以使用' -version'命令获取chromaprint版本信息。当我尝试指纹音频文件时,该软件可以在较旧的平板电脑上使用,但不能在s4上使用。在s4上,错误消息是错误解码音频'。

我已经尝试过ffmpeg 0.9,因为bitbucket网站建议。我也有同样的问题。我尝试了ffmpeg 2.7,我认为这是有效的。现在我无法让2.7工作。和以前一样,代码在api 19设备上工作,而不是s4。

Tab是armeabi-v7a设备,s4是armeabi / armeabi-v7设备,所以我想删除“armeabi”#39;二进制我在两台机器上都有相同的文件,它们必须工作。这种尝试什么也没做。我正在使用android studio。

下面列出了一些我的ffmpeg配置。它们取自多配置脚本。

    --enable-static
    --disable-shared
    --disable-doc
    --disable-txtpages
    --disable-iconv

    --enable-memalign-hack
    --enable-debug
    --disable-avdevice
    --disable-avfilter
    --disable-swscale
    --disable-ffmpeg
    --disable-ffplay
    --disable-ffserver
    --disable-network
    --disable-muxers
    --disable-demuxers
    --enable-rdft
    --enable-demuxer=aac
    --enable-demuxer=ac3
    --enable-demuxer=ape
    --enable-demuxer=asf
    --enable-demuxer=flac
    --enable-demuxer=matroska_audio
    --enable-demuxer=mp3
    --enable-demuxer=mpc
    --enable-demuxer=mov
    --enable-demuxer=mpc8
    --enable-demuxer=ogg
    --enable-demuxer=tta
    --enable-demuxer=wav
    --enable-demuxer=wv
    --disable-bsfs
    --disable-filters
    --disable-parsers
    --enable-parser=aac
    --enable-parser=ac3
    --enable-parser=mpegaudio
    --disable-protocols
    --enable-protocol=file
    --disable-indevs
    --disable-outdevs
    --disable-encoders
    --disable-decoders
    --enable-decoder=aac
    --enable-decoder=ac3
    --enable-decoder=alac
    --enable-decoder=ape
    --enable-decoder=flac
    --enable-decoder=mp1
    --enable-decoder=mp2
    --enable-decoder=mp3
    --enable-decoder=mpc7
    --enable-decoder=mpc8
    --enable-decoder=tta
    --enable-decoder=vorbis
    --enable-decoder=wavpack
    --enable-decoder=wmav1
    --enable-decoder=wmav2
    --enable-decoder=pcm_alaw
    --enable-decoder=pcm_dvd
    --enable-decoder=pcm_f32be
    --enable-decoder=pcm_f32le
    --enable-decoder=pcm_f64be
    --enable-decoder=pcm_f64le
    --enable-decoder=pcm_s16be
    --enable-decoder=pcm_s16le
    --enable-decoder=pcm_s16le_planar
    --enable-decoder=pcm_s24be
    --enable-decoder=pcm_daud
    --enable-decoder=pcm_s24le
    --enable-decoder=pcm_s32be
    --enable-decoder=pcm_s32le
    --enable-decoder=pcm_s8
    --enable-decoder=pcm_u16be
    --enable-decoder=pcm_u16le
    --enable-decoder=pcm_u24be
    --enable-decoder=pcm_u24le
    --enable-decoder=rawvideo

以下是我从系统信息应用程序获得的有关s4的一些信息。

Build Info
    Build.BOARD: MSM8960
    Build.BRAND: Verizon
    Build.DEVICE: jfltevzw
    Build.DISPLAY: LRX22C.I545VRUGOF1
    Build.PRODUCT: jfltevzw
    Build.HARDWARE: qcom
    Build.FINGERPRINT: Verizon/jfltevzw/jfltevzw:5.0.1/LRX22C/I545VRUGOF1:user/release-keys
    Build.CPU_ABI: armeabi-v7a
    Build.SUPPORTED_32_BIT_ABIS: [armeabi-v7a, armeabi]
    Build.SUPPORTED_64_BIT_ABIS: []
    Build.SUPPORTED_ABIS: [armeabi-v7a, armeabi]
    Build.HOST: SWDD6122
    Build.ID: LRX22C
    Build.MANUFACTURER: samsung
    Build.MODEL: SCH-I545
    Build.PRODUCT: jfltevzw
    Build.TAGS: release-keys
    Build.TIME: 2015-07-15T03:39:01.000-0400
    Build.TYPE: user
    Build.USER: dpi
    Build.BOOTLOADER: I545VRUGOF1
    Build.TAGS: release-keys
    Build.VERSION.CODENAME: REL
    Build.VERSION.INCREMENTAL: I545VRUGOF1
    Build.VERSION.RELEASE: 5.0.1
    Build.VERSION.SDK_INT: 21

修改

这是我的项目的完整来源,减去了个人的api-key。 https://github.com/radiodee1/awesome-fpcalc代码在git存储库中部分排列。 ' fpcalc-testapp'部分只是Android Studio项目。 ' fpcalc-build'部分是我尝试使用最新版本的ffmpeg,chromaprint和kissfft。 ' fpcalc-build-complete' part是一系列重现P. Horton ffmpeg 2.7场景的脚本。再见,我相信最好的图书馆是在' build-complete'文件夹。

1 个答案:

答案 0 :(得分:0)

我发现chromaprint支持kiss-fft作为ffmpeg的补充。特别推荐在chromaprint git存储库的NEWS文件中安装android。我抬起头来吻了一下。它很小。我在下面的网址找到了它:

https://sourceforge.net/projects/kissfft/

我没有单独编译库,而是将kiss-fft的源代码复制到了色度指标“src'夹。 (我也移动了' tools'文件夹。)然后我修改了chromaprint的make文件。首先,我将WITH_AVFFT=ON替换为WITH_KISSFFT=ON。然后我只需再添加一行。

    COBJS += $(BUILD_DIR)/src/kiss_fft.o

然后我按照原来的方式编译了ffmpeg和chromaprint。生成的二进制文件略大,似乎可以与我的两个设备一起使用。这个问题是解决方案很混乱。你必须将所有的kiss-fft源复制到chromaprint' src'夹。另一个问题是你没有从构建中删除ffmpeg。最后一个问题是我想弄清楚的。

我不会在这里包含整个make文件。感谢所有人阅读此内容以获取所有帮助。