2012-02-03 30 views
5

Tôi đã thực hiện việc này, theo nghĩa đen trong nhiều ngày. Tôi đang cố gắng xây dựng FFmpeg với libmp3lame để sử dụng trong một ứng dụng Android. Tập lệnh xây dựng đặt cờ --sysroot trỏ đến thư mục NDK của Android cần thiết để xây dựng các thư viện này theo cách Android có thể sử dụng chúng.Làm thế nào tôi có thể nhận được FFmpeg để xác định vị trí thư viện được cài đặt khi --sysroot trỏ đến một thư mục khác?

Sự cố xảy ra khi tôi thêm cờ vào --enable-libmp3lame; Tôi nhận được ERROR: libmp3lame >= 3.98.3 not found trong khi bắt đầu xây dựng. Tôi biết rằng LAME, và thư viện của nó được cài đặt, bởi vì tôi chỉ có thể chạy ./configure --enable-libmp3lame theo cách thủ công và cấu hình khởi chạy mà không bị cản trở và cho thấy rằng libmp3lame được bật cho bản dựng này. Tuy nhiên, việc xây dựng như thế này sẽ không làm việc cho những gì tôi cần, vì tôi cần NDK của Android để thực hiện một số công việc.

Tôi đã theo dõi các vấn đề xuống thực tế là xây dựng này kịch bản được tuyên bố sysroot, và thông qua một số nghiên cứu, tôi đã cố gắng thêm -Luser/include, -L/user/include đến CFLAGS thêm, và ldflags (mà tôi đã đọc là vị trí tìm kiếm mặc định cho gcc). Tôi cũng đã thử nhiều thứ khác, nhưng tôi tin chắc rằng ai đó ở đây có thể giúp giải quyết vấn đề cụ thể này. Đây toàn bộ xây dựng kịch bản là như sau:

thêm thông tin:

  • OS xây dựng: Ubuntu 11.10
  • FFmpeg Ver: Gần đây nhất từ ​​git
  • LAME Ver: 3.9.x
  • Android NDK: 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 

Trả lời

1

Thay vì thay đổi đường dẫn bao gồm, tại sao bạn không thử sao chép tất cả các tệp libmp3lame được tạo bởi 'make install' vào thư mục có liên quan nơi tập lệnh sẽ tìm kiếm chúng. Chèn câu lệnh ECHO để tìm hiểu chính xác PATH/CFLAGS/LDFLAGS là gì tại điểm bạn nhận được lỗi và sao chép các tệp ở đó để tìm thấy chúng.

+0

Tôi thực sự không biết các tệp libmp3lame thực được cài đặt ở đâu. Tôi đã kiểm tra trong/người dùng/bao gồm và có một tập tin lame/lame.h đó là trong đó, và tôi đặt nó trong [..] android-ndk/nền tảng/android-3/arch-arm/người dùng/bao gồm/lame dir, tuy nhiên điều đó đã không giúp đỡ. Tôi có nghi ngờ dai dẳng rằng tập tin tiêu đề của chính nó sẽ không đủ để cắt nó. Tôi cũng đã thử sao chép và dán một thư mục đầy đủ các tiêu đề LAME và các tệp C vào thư mục ở trên, quá. –

+0

Sao chép chỉ 1 tệp hoặc 1 thư mục sẽ không hoạt động. Bạn phải chắc chắn rằng bạn đã sao chép hoàn toàn tất cả các tệp và thư mục cần thiết, vào đúng vị trí. Nếu tôi nhớ chính xác 'make install' sẽ in ra tất cả các tệp đã sao chép, vì vậy bạn có thể xây dựng lại LAME và khi thực hiện 'make install', hãy lưu ý tất cả tên tệp và thư mục. – sashoalm

+0

Cảm ơn, tôi đã làm điều đó bằng cách tải xuống nguồn LAME và trích xuất nó vào một thư mục. Khi tôi gọi là 'cấu hình' tôi đã làm --prefix = (chỉ định các thư mục mà các tập tin được thực hiện nên được xuất ra). Hoàn thành việc cài đặt, và lấy thư mục include và lib, và lưu trữ nó trong NDK của Android bao gồm và thư mục lib, tương ứng. Tôi vẫn không thể làm việc này được. Tôi đã từ bỏ việc cố gắng sử dụng FFmpeg để xử lý LAME cho tôi, và trở lại chỉ bằng cách sử dụng một bản dựng LAME gốc trong ứng dụng của tôi (mà tôi có thể làm việc, nhưng đầu ra âm thanh không chính xác). [...] –

1

tôi thấy bạn đang sử dụng các dự án tọa lạc tại http://bambuser.com/opensource

tôi đã cùng một vấn đề và giải quyết như thế này:

  1. biên dịch què cho android sử dụng https://github.com/intervigilium/liblame
  2. đây là một nhỏ diff giữa bản gốc build.sh từ "bambuser.com" và cái tôi đã sử dụng:

    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. từ dự án "intervigilium" sao chép thư mục liblame/jni/lame-PATH_TO_NDK/platforms/android-3/arch-arm/usr/include

  4. từ bản sao dự án "intervigilium" liblame/libs/armeabi-v7a/liblame.so để PATH_TO_NDK/platforms/android-3/arch-arm/usr/libsRENAME nó trong libmp3lame.so.
  5. cuối cùng chạy build.sh.
  6. bạn nên sử dụng tốt:

    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 
    

Hãy nhận biết, tôi vẫn cần phải kiểm tra kết quả FFmpeg xây dựng. Để nói sự thật, bây giờ tôi phải học cách sử dụng nó trong App của tôi ...;)

EDIT: Tôi đã cố gắng loại bỏ --disable-everything và nó được xây dựng OK giống nhau, với rất nhiều bộ mã hóa, giải mã vv , nhưng tăng lên ~ 40MB cho thư mục build.

Các vấn đề liên quan