2012-01-11 13 views
10

मैं Android के लिए libx264 के साथ FFMPEG बनाने की कोशिश कर रहा हूं।Android के लिए x264 के साथ FFMPEG बनाएं

मैं सफलतापूर्वक एंड्रॉइड के लिए एफएफएमपीईजी का निर्माण और उपयोग कर सकता हूं लेकिन मुझे एहसास हुआ कि मुझे एन्कोड करने की क्षमता की आवश्यकता है, इसलिए मैं x264 के साथ एफएफएमपीईजी बनाने की कोशिश कर रहा हूं।

"ERROR: libx264 not found"

और मेरी लॉग में यह कहते हैं::

मैं

एंड्रॉयड http://www.roman10.net/how-to-build-ffmpeg-for-android/ के लिए FFmpeg का निर्माण करने की जब FFMPEG निर्माण करने के लिए मैं कोई त्रुटि मिलती है की कोशिश कर रहा इस ट्यूटोरियल का उपयोग कर रहा

"/usr/local/lib/libx264.a: could not read symbols: Archive has no index; run ranlib to add one..."

मेरे पास एफएफएमईजीई और एक्स 264 दोनों के नवीनतम संस्करण हैं। मैं समझता हूँ कि FFmpeg, शीर्ष लेख और में usr/lib और usr/शामिल पुस्तकालयों ढूंढती है, इसलिए है ताकि इसे x264 प्राप्त करने के लिए में मैं CFLAGS और LDFLAGS का उपयोग करें:

  • --extra-CFLAGS = "मैं/usr/स्थानीय/शामिल हैं "
  • --extra-LDFLAGS =" एल/usr/स्थानीय/lib "

कई विभिन्न विकल्पों के साथ मैं कोशिश की है इमारत x264 इंटरनेट पर अन्य लोगों ने कहा है कि कि मुझे जरूरत है। जैसे। --enable- shared, --enable-static, --disable-pthreads आदि कुछ फ़ोरम कहते हैं कि इसे सक्षम करें, अन्य कहते हैं कि कोई अक्षम नहीं है।

किसी भी मदद की बहुत सराहना की जाएगी, धन्यवाद

संपादित करें:

अगर मैं सबसे सरल आदेशों के साथ FFmpeg निर्माण libx264 शामिल करने के लिए तो यह काम करता है। यानी।

./configure --enable-gpl --enable-libx264 --extra-cflags="-I/usr/local/include" --extra-ldflags="-L/usr/local/lib" --enable-static --enable-shared 

हालांकि मुझे एंड्रॉइड के लिए काम करने की आवश्यकता है। स्क्रिप्ट मैं उपयोग कर रहा हूँ है:

NDK=~/Desktop/android-ndk-r7 
PLATFORM=$NDK/platforms/android-8/arch-arm/ 
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86 
function build_one 
{ 
./configure --target-os=linux \ 
    --prefix=$PREFIX \ 
    --enable-cross-compile \ 
    --enable-shared \ 
    --enable-static \ 
    --extra-libs="-lgcc" \ 
    --arch=arm \ 
    --cc=$PREBUILT/bin/arm-linux-androideabi-gcc \ 
    --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \ 
    --nm=$PREBUILT/bin/arm-linux-androideabi-nm \ 
    --sysroot=$PLATFORM \ 
    --extra-cflags=" -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit=300 $OPTIMIZE_CFLAGS -I/usr/local/include" \ 
    --extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L $PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog -L/usr/local/lib " \ 
    --enable-gpl \ 
    --enable-libx264 \ 
    --disable-everything \ 
    --enable-demuxer=mov \ 
    --enable-demuxer=h264 \ 
    --disable-ffplay \ 
    --enable-protocol=file \ 
    --enable-avformat \ 
    --enable-avcodec \ 
    --enable-decoder=rawvideo \ 
    --enable-decoder=mjpeg \ 
    --enable-decoder=h263 \ 
    --enable-decoder=mpeg4 \ 
    --enable-decoder=h264 \ 
    --enable-encoder=mjpeg \ 
    --enable-encoder=h263 \ 
    --enable-encoder=mpeg4 \ 
    --enable-encoder=h264 \ 
    --enable-parser=h264 \ 
    --disable-network \ 
    --enable-zlib \ 
    --disable-avfilter \ 
    --disable-avdevice \ 
    $ADDITIONAL_CONFIGURE_FLAG 

make clean 
make -j4 install 
$PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o 
$PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -soname libffmpeg.so -shared -nostdlib -z,noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog --warn-once --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a 
} 

CPU=armv7-a 
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU " 
PREFIX=./android/$CPU 
ADDITIONAL_CONFIGURE_FLAG= 
build_one 

मैं अनुमान लगा रहा हूँ कि मेरी कॉन्फ़िगर आदेश में कुछ विकल्प को सक्षम करने libx264

नोट से जूझ रहा है: यदि मैं --enable-libx264 को दूर तो यह काम करता है

+0

तो मैं दोनों x264 और FFmpeg --disable स्थैतिक और --enable-साझा के साथ निर्माण, तो मैं अब भी वही त्रुटि मिलती है, लेकिन मेरे लिए यह लॉग में इस समय कोई: यहाँ मेरी x264 संकलन स्क्रिप्ट है अब कहता है "... प्रतीकों को नहीं पढ़ सका ..." लेकिन इसके बजाय यह कहता है "-xx264 नहीं मिल सकता ..." – Kage

+0

आपने x264 कैसे स्थापित किया? क्या आपने इसे स्रोत डाउनलोड करके और './configure', 'make', 'इंस्टॉल करें' करके, या आपने कुछ और किया है? इसके अलावा, आपकी बिल्ड सिस्टम क्या है - * निक्स या विंडोज (साइगविन/एमएसआईएस के साथ)? – sashoalm

+0

मैंने स्रोत डाउनलोड किया और इस्तेमाल किया .configure, बनाने, बनाने के लिए मैक पर मैक (10.7) – Kage

उत्तर

3

मुझे भी यही समस्या थी। लेकिन एनडीके को संस्करण 5 सी में डाउनग्रेड करने के बाद यह अर्धिनजा द्वारा वर्णित कार्य करता है। (उबंटू 64 बिट)। वहाँ 5 से करने के लिए 7.

[email protected]:/tmp/android-ffmpeg-x264/Project/jni$ ndk-build 
Compile thumb : ffmpeg <= ffmpeg.c 
Compile thumb : ffmpeg <= cmdutils.c 
Executable  : ffmpeg 
Install  : ffmpeg => libs/armeabi/ffmpeg 
Compile thumb : videokit <= uk_co_halfninja_videokit_Videokit.c 
Compile thumb : videokit <= ffmpeg.c 
Compile thumb : videokit <= cmdutils.c 
SharedLibrary : libvideokit.so 
Install  : libvideokit.so => libs/armeabi/libvideokit.so 
+0

एंड्रॉइड में ffmpeg कमांड चलाने के लिए मैं इसका उपयोग कैसे कर सकता हूं? क्या मुझे इन पुस्तकालयों का उपयोग करने के लिए ग्रहण में "मूल समर्थन जोड़ें" विकल्प के लिए जाना है? –

1

मैं --enable स्थैतिक विकल्प libx264 के लिए व्यवहार को जोड़ने ffmpeg पर कोई असर नहीं होता है की खोज की है toolchain में कुछ बदलाव होने लगते हैं। मैं ffmpeg की एक प्रति का निर्माण करने में कामयाब साथ libx264 config.mak संपादन के बाद मैं एक निर्देशिका में स्रोत से कॉन्फ़िगर x264

  • बिल्ड चलाने था
  • में EXTRALIBS लाइन के लिए libx264.a जोड़े द्वारा स्थिर शामिल config.mak
  • कॉन्फ़िगरेशन में EXTRALIBS लाइन से -lx264 निकालें।mak

पहले

EXTRALIBS=-ldl -lX11 -lx264 etc. 

बाद

EXTRALIBS=/home/adam/x264sourcebuild/libx264.a -ldl -lX11 etc. 
3

ffmpeg स्रोत कोड अद्यतन किया जा रहा है, और मैं निम्नलिखित के रूप में एंड्रॉयड NDK के लिए x264 के साथ ffmpeg संकलन सकता है।

1 डाउनलोड https://github.com/halfninja/android-ffmpeg-x264

2 से halfninja के एंड्रॉयड-ffmpeg-x264 Git फ़ाइल "halfninja-android-ffmpeg-x264-fe12be0/परियोजना/JNI" निर्देशिका में, "configure_ffmpeg.sh" "libgcc से जोड़ने के लिए संशोधित .a "ऐसी समस्या को हल करने के लिए जो" __aeabi_f2uiz "को हल नहीं कर सकता है।

./configure $DEBUG_FLAG --enable-cross-compile \ 
--arch=arm5te \ 
--enable-armv5te \ 
--target-os=linux \ 
--disable-stripping \ 
--prefix=../output \ 
--disable-neon \ 
--enable-version3 \ 
--disable-shared \ 
--enable-static \ 
--enable-gpl \ 
--enable-memalign-hack \ 
--cc=arm-linux-androideabi-gcc \ 
--ld=arm-linux-androideabi-ld \ 
--extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -I../x264 -Ivideokit" \ 
$featureflags \ 
--disable-ffmpeg \ 
--disable-ffplay \ 
--disable-ffprobe \ 
--disable-ffserver \ 
--disable-network \ 
--enable-filter=buffer \ 
--enable-filter=buffersink \ 
--disable-demuxer=v4l \ 
--disable-demuxer=v4l2 \ 
--disable-indev=v4l \ 
--disable-indev=v4l2 \ 
--extra-ldflags="-L../x264 -L../toolchain/lib/gcc/arm-linux-androideabi/4.4.3" \ 
--extra-libs="-lgcc" 

3 नई पुस्तकालय "libswresample.a" को जोड़ने के लिए "Android.mk" संशोधित करें।

FFMPEG_LIBS := $(addprefix ffmpeg/, \ 
libavdevice/libavdevice.a \ 
libavformat/libavformat.a \ 
libavcodec/libavcodec.a \ 
libavfilter/libavfilter.a \ 
libswscale/libswscale.a \ 
libavutil/libavutil.a \ 
libswresample/libswresample.a \ 
libpostproc/libpostproc.a) 

4 ffmpeg निर्देशिका में लोगों के साथ videokit निर्देशिका में ffmpeg.c और cmdutils.c बदलें।

5 README.textile में वर्णित एक प्रक्रिया का पालन करें।

+0

एंड्रॉइड में ffmpeg कमांड चलाने के लिए मैं इसका उपयोग कैसे कर सकता हूं? क्या मुझे इन पुस्तकालयों का उपयोग करने के लिए ग्रहण में "मूल समर्थन जोड़ें" विकल्प के लिए जाना है? –

+0

मेरे लिए काम नहीं करता है, जो आप एनडीके का उपयोग कर रहे हैं? – Guy

2

ये मेरी काम कर झंडे हैं:

x264 (हाल ही में एक स्थिर):

./configure --cross-prefix=arm-linux-androideabi- \ 
--enable-pic \ 
--enable-static \ 
--disable-cli \ 
--disable-asm \ 
--host=arm-linux 

ffmpeg (रिलीज/0.10):

./configure --enable-cross-compile \ 
--arch=arm5te \ 
--enable-armv5te \ 
--target-os=linux \ 
--disable-stripping \ 
--prefix=../output \ 
--disable-neon \ 
--enable-version3 \ 
--disable-shared \ 
--enable-static \ 
--enable-gpl \ 
--enable-memalign-hack \ 
--cc=arm-linux-androideabi-gcc \ 
--ld=arm-linux-androideabi-gcc \ 
--extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated" \ 
--disable-everything \ 
--enable-decoder=h264 \ 
--enable-demuxer=mov \ 
--enable-muxer=mp4 \ 
--enable-encoder=libx264 \ 
--enable-libx264 \ 
--enable-protocol=file \ 
--enable-decoder=aac \ 
--enable-encoder=aac \ 
--disable-ffmpeg \ 
--disable-ffplay \ 
--disable-ffprobe \ 
--disable-ffserver \ 
--disable-network \ 
--enable-filter=buffer \ 
--enable-filter=buffersink \ 
--enable-filter=scale \ 
--disable-demuxer=v4l \ 
--disable-demuxer=v4l2 \ 
--disable-indev=v4l \ 
--disable-indev=v4l2 \ 
--extra-cflags="-I../x264" \ 
--extra-ldflags="-L../x264" \ 
--extra-libs="-lgcc" 

जाहिर है आप रास्तों को समायोजित करना होगा ।

2

मैं एक साथ ffmpeg + x264 यहाँ के लिए एक एंड्रॉयड निर्माण प्रणाली तैयार की है: https://github.com/guardianproject/android-ffmpeg

हम इसे चलाने के लिए भी कुछ आवरण जावा पर काम कर रहे हैं, लेकिन वह अभी तक वास्तव में प्रयोग करने योग्य नहीं है।

+0

बहुत बुरा है कि यह केवल डेबियन/उबंटू के लिए है, मैक के बारे में कैसे? – shem

+0

मैक ओएस एक्स और अन्य पर बिल्डिंग संभव होनी चाहिए, पैच का स्वागत है :) हमें अन्य जीएनयू/लिनक्स डिस्ट्रोज़ सहित किसी भी अन्य प्लेटफॉर्म की तुलना में डेबियन/उबंटू पर एंड्रॉइड देशी निर्माण को चलाने के लिए यह बहुत आसान लगता है। –

+0

इसे मैक पर संकलित करने में विफल, शायद इसलिए कि lib init आपको पहले करना चाहिए। – shem

1

मैं पहले की तरह ही इस मुद्दे को मिले हैं, और मैं कारण पता लगाने के लिए कई बार कोशिश की:

तुम्हें यकीन x264 और ffmpeg संकलित करने के लिए उसी तरह का उपयोग कर रहे बनाना चाहिए। जैसे: एंड्रॉइड एनडीके का उपयोग करना। एक ही जीसीसी संकलक का उपयोग करना।

तो आप इस कमांड के साथ ffmpeg संकलित नहीं कर सकते: "- cross-prefix = $ PREBUILT/darwin-x86_64/bin/arm-linux-androideabi-", लेकिन इसके बिना x264 संकलित करें।

./configure --prefix=$PREFIX \ 
--enable-static \ 
--enable-pic \ 
--disable-asm \ 
--disable-cli \ 
--host=arm-linux \ 
--cross-prefix=$PREBUILT/darwin-x86_64/bin/arm-linux-androideabi- \ 
--sysroot=$PLATFORM 

make 
sudo make install 
sudo ldconfig 
संबंधित मुद्दे