2012-02-03 22 views
5

मैं इस पर जा रहा हूं, सचमुच दिनों के लिए। मैं एंड्रॉइड एप्लिकेशन में उपयोग के लिए libmp3lame के साथ FFmpeg बनाने की कोशिश कर रहा हूं। बिल्ड स्क्रिप्ट एक --sysroot ध्वज सेट करता है जो एंड्रॉइड एनडीके निर्देशिका को इंगित करता है ताकि इन पुस्तकालयों को इस तरह से बनाया जा सके कि एंड्रॉइड उनका उपयोग कर सके।--sysroot किसी अन्य निर्देशिका पर इंगित करते समय स्थापित पुस्तकालयों का पता लगाने के लिए FFmpeg कैसे प्राप्त कर सकता हूं?

समस्या तब आती है जब मैं --enable-libmp3lame पर ध्वज जोड़ता हूं; निर्माण शुरू होने के दौरान मुझे ERROR: libmp3lame >= 3.98.3 not found मिलते हैं। मुझे पता है कि LAME, और इसकी लाइब्रेरी स्थापित हैं, क्योंकि मैं मैन्युअल रूप से ./configure --enable-libmp3lame चला सकता हूं और कॉन्फ़िगरेशन बिना किसी हिचकिचाहट के लॉन्च करता है, और यह दिखाता है कि इस बिल्ड के लिए libmp3lame सक्षम है। हालांकि, इस तरह की इमारत सिर्फ इसके लिए काम नहीं करेगी, क्योंकि मुझे कुछ काम करने के लिए एंड्रॉइड एनडीके की आवश्यकता है।

मैं तथ्य यह है कि इस बिल्ड स्क्रिप्ट sysroot घोषित किया जाता है, और कुछ शोध के माध्यम से, मैं -Luser/include, अतिरिक्त CFLAGS को -L/user/include, और LDFLAGS (जो मैंने पढ़ा है जोड़ने की कोशिश की है करने के लिए नीचे समस्या ट्रैक करने के बाद जीसीसी के लिए डिफ़ॉल्ट खोज स्थान)। मैंने कई अन्य चीजों की भी कोशिश की है, लेकिन मुझे विश्वास है कि यहां कोई व्यक्ति इस विशिष्ट समस्या से मदद कर सकता है। इस पूरी निर्माण स्क्रिप्ट इस प्रकार है:

अतिरिक्त जानकारी:

  • बिल्ड ओएस: उबंटू 11.10
  • FFmpeg वर: 3.9.x
  • एंड्रॉयड NDK: Git
  • लंगड़ा वर से नवीनतम: R7

build.sh

#!/bin/bash 

if [ "$NDK" = "" ]; then 
    echo NDK variable not set, assuming ${HOME}/android-ndk 
    export NDK=${HOME}/android-ndk 
fi 

SYSROOT=$NDK/platforms/android-3/arch-arm 
# Expand the prebuilt/* path into the correct one 
TOOLCHAIN=`echo $NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/*-x86` 
export PATH=$TOOLCHAIN/bin:$PATH 

rm -rf build/ffmpeg 
mkdir -p build/ffmpeg 
cd ffmpeg 

# Don't build any neon version for now 
for version in armv5te armv7a; do 

     DEST=../build/ffmpeg 
     FLAGS="--target-os=linux --cross-prefix=arm-linux-androideabi- --arch=arm" 
     FLAGS="$FLAGS --sysroot=$SYSROOT" 
     FLAGS="$FLAGS --soname-prefix=/data/data/net.smartnotes/lib/" 
     FLAGS="$FLAGS --enable-shared --disable-symver" 
     FLAGS="$FLAGS --enable-small --optimization-flags=-O2" 
     FLAGS="$FLAGS --disable-everything --enable-protocol=file" 
     FLAGS="$FLAGS --enable-libmp3lame --enable-encoder=nellymoser" 

     case "$version" in 
       neon) 
        EXTRA_CFLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=neon" 
        EXTRA_LDFLAGS="-Wl,--fix-cortex-a8" 
        # Runtime choosing neon vs non-neon requires 
        # renamed files 
        ABI="armeabi-v7a" 
        ;; 
       armv7a) 
        # I have tried many things here. 
        EXTRA_CFLAGS="-march=armv7-a -mfloat-abi=softfp" 
        EXTRA_LDFLAGS="" 
        ABI="armeabi-v7a" 
        ;; 
       *) 
        # I have tried many things here. 
        EXTRA_CFLAGS="-Luser/include" 
        EXTRA_LDFLAGS="" 
        ABI="armeabi" 
        ;; 
     esac 
     DEST="$DEST/$ABI" 
     FLAGS="$FLAGS --prefix=$DEST" 

     mkdir -p $DEST 
     echo $FLAGS --extra-cflags="$EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" > $DEST/info.txt 
     ./configure $FLAGS --extra-cflags="$EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" | tee $DEST/configuration.txt 
     [ $PIPESTATUS == 0 ] || exit 1 
     make clean 
     make -j4 || exit 1 
     make install || exit 1 

done 

उत्तर

1

पथ शामिल करने के बजाय, आप उन सभी libmp3lame फ़ाइलों की प्रतिलिपि बनाने का प्रयास क्यों नहीं करते हैं जिन्हें प्रासंगिक निर्देशिका में 'इंस्टॉल करें' द्वारा बनाया गया था जहां स्क्रिप्ट उनके लिए खोजेगी। यह पता लगाने के लिए ECHO स्टेटमेंट डालें कि वास्तव में पथ/CFLAGS/LDFLAGS उस बिंदु पर हैं जहां आपको त्रुटि मिलती है, और वहां फ़ाइलों को कॉपी करें ताकि उन्हें उन्हें मिल सके।

+0

मुझे वास्तव में नहीं पता कि वास्तविक libmp3lame फ़ाइलों को कहां स्थापित किया गया है। मैंने चेक/उपयोगकर्ता/चेक किया था और वहां एक लंगड़ा/lame.h फ़ाइल थी, और मैंने इसे [..] एंड्रॉइड-एनडीके/प्लेटफॉर्म/एंड्रॉइड -3/आर्क-आर्म/उपयोगकर्ता/में शामिल किया/लंगड़ा डीआईआर, हालांकि इससे मदद नहीं मिली है। मुझे नाराज संदेह है कि हेडर फ़ाइल स्वयं ही कटौती करने के लिए पर्याप्त नहीं होगी। मैंने एलएएम हेडर और सी फाइलों से भरे फ़ोल्डर को उपरोक्त डीआईआर में भी कॉपी और पेस्ट करने का प्रयास किया है। –

+0

केवल 1 फ़ाइल या 1 फ़ोल्डर की प्रतिलिपि बनाना बिल्कुल काम नहीं करेगा। आपको निश्चित होना चाहिए कि आपने सही जगहों पर बिल्कुल आवश्यक सभी फाइलों और फ़ोल्डरों की प्रतिलिपि बनाई है। अगर मुझे याद है कि 'इंस्टॉल करें' को कॉपी की गई सभी फाइलों को प्रिंट करना चाहिए, तो आप LAME का पुनर्निर्माण कर सकते हैं और जब 'इंस्टॉल करें' करते हैं तो सभी फ़ाइल नामों और फ़ोल्डरों का ध्यान रखें। – sashoalm

+0

धन्यवाद, मैंने इसे LAME स्रोत डाउनलोड करके किया, और इसे एक डीआईआर में निकाला। जब मैंने 'कॉन्फ़िगर' कहा था तो मैंने किया --prefix = (डीआईआर निर्दिष्ट किया कि इन बनाई गई फ़ाइलों को आउटपुट होना चाहिए)। मेक इंस्टॉल को पूरा किया, और इसमें शामिल हैं और lib निर्देशिका, और एंड्रॉइड एनडीके में क्रमशः इसमें शामिल हैं और lib dir शामिल हैं। मैं अभी भी इसे काम करने में असमर्थ था। मैंने मेरे लिए LAME को संभालने के लिए FFmpeg का उपयोग करने की कोशिश करने पर छोड़ दिया, और मेरे आवेदन में LAME के ​​मूल निर्माण का उपयोग करने के लिए वापस चला गया (जिसे मैं काम पर ला सकता हूं, लेकिन ऑडियो आउटपुट सही नहीं है)। [...] –

1

मैंने देखा कि आप http://bambuser.com/opensource

पर स्थित परियोजना उपयोग कर रहे थे मैं एक ही समस्या थी और इस तरह का समाधान:

  1. का उपयोग करके android के लिए लंगड़ा संकलन https://github.com/intervigilium/liblame
  2. इस एक छोटे से diff है "bambuser.com" से मूल build.sh और मैंने उपयोग किया:

    3c3,6 
    < export NDK=${HOME}/downloads/android-ndk # r8d 
    --- 
    > if [ "$NDK" = "" ]; then 
    >  echo NDK variable not set, assuming ${HOME}/android-ndk 
    >  export NDK=${HOME}/android-ndk 
    > fi 
    15,16c18 
    < #for version in armv5te armv7a; do 
    < for version in   armv7a; do 
    --- 
    > for version in armv5te armv7a; do 
    24c26 
    <  FLAGS="$FLAGS --disable-everything --enable-libmp3lame" 
    --- 
    >  FLAGS="$FLAGS --disable-everything" 
    
  3. "intervigilium" परियोजना से फ़ोल्डर liblame/jni/lamelibmp3lame.so में PATH_TO_NDK/platforms/android-3/arch-arm/usr/libs और यह नाम करने के लिए "intervigilium" परियोजना की नकल liblame/libs/armeabi-v7a/liblame.so से PATH_TO_NDK/platforms/android-3/arch-arm/usr/include

  4. को कॉपी।
  5. अंत में build.sh चलाएं।
  6. आप ठीक होना चाहिए:

    install prefix   ../build/ffmpeg/armeabi-v7a 
    source path    /home/samuele/downloads/ffmpeg/ffmpeg-android/ffmpeg 
    C compiler    arm-linux-androideabi-gcc 
    ARCH      arm (generic) 
    big-endian    no 
    runtime cpu detection  no 
    ARMv5TE enabled   yes 
    ARMv6 enabled    yes 
    ARMv6T2 enabled   yes 
    ARM VFP enabled   yes 
    IWMMXT enabled   no 
    NEON enabled    no 
    debug symbols    yes 
    strip symbols    yes 
    optimizations    small 
    static     yes 
    shared     yes 
    postprocessing support no 
    new filter support  yes 
    network support   yes 
    threading support   pthreads 
    SDL support    no 
    Sun medialib support  no 
    AVISynth enabled   no 
    frei0r enabled   no 
    libdc1394 support   no 
    libdirac enabled   no 
    libfaac enabled   no 
    libgsm enabled   no 
    **libmp3lame enabled  yes** 
    libnut enabled   no 
    libopencore-amrnb support no 
    libopencore-amrwb support no 
    libopencv support   no 
    libopenjpeg enabled  no 
    librtmp enabled   no 
    libschroedinger enabled no 
    libspeex enabled   no 
    libtheora enabled   no 
    libvorbis enabled   no 
    libvpx enabled   no 
    libx264 enabled   no 
    libxavs enabled   no 
    libxvid enabled   no 
    zlib enabled    no 
    bzlib enabled    no 
    
    Enabled decoders: 
    
    Enabled encoders: 
    mpeg2video  nellymoser 
    
    Enabled hwaccels: 
    
    Enabled parsers: 
    
    Enabled demuxers: 
    
    Enabled muxers: 
    
    Enabled protocols: 
    
    Enabled filters: 
    buffer 
    
    Enabled bsfs: 
    
    Enabled indevs: 
    
    Enabled outdevs: 
    
    License: LGPL version 2.1 or later 
    Creating config.mak and config.h... 
    libavutil/avconfig.h is unchanged 
    

ध्यान रखें, मैं अभी भी जिसके परिणामस्वरूप FFmpeg निर्माण का परीक्षण करने की जरूरत है। सच कहते हैं कि करने के लिए, अब मैं कैसे मेरी App में इसका इस्तेमाल करने के जानने के लिए है ...;)

संपादित करें: मैं --disable-everything को दूर करने की कोशिश की और यह ठीक ही बनाता है, एनकोडर, डिकोडर आदि का एक बहुत साथ , लेकिन build डीआईआर के लिए ~ 40 एमबी तक बढ़ रहा है।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^