Невозможно портировать библиотеку FFmpeg C в андроид

What I exactly want to-do: Access the ffmpeg.c file to modify the int main(int argc, char **argv) function to JNI and passing the command of ffmpeg as string.

Я попытался передать библиотеку ffmpeg C в android (процессор ARM). Я последовал за разными способами.

1-ая попытка: использовать официальную документацию по установке ffmpeg. Шаги следующим образом

a) git clone git: //source.ffmpeg.org/ffmpeg.git ffmpeg

b) Прочтите файл INSTALL.

c) Загрузите библиотеку x264 и создайте с помощью build_x264.sh , которые успешно создаются.

    NDK=/home/nav/Work/android/ndk
    PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt
    PLATFORM=$NDK/platforms/android-8/arch-arm
    PREFIX=/home/nav/28ffmpeg/android-ffmpeg                
    ./configure --prefix=$PREFIX --enable-static --enable-pic --disable-asm --disable-cli --host=arm-linux --cross-prefix=$PREBUILT/linux-x86/bin/arm-linux-androideabi- --sysroot=$PLATFORM
  make
  sudo make install
  sudo ldconfig

d) Then I download ffmpeg library from (http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2) build it by using build_android.sh

#!/bin/bash

NDK=/home/nav/Work/android/ndk
PLATFORM=$NDK/platforms/android-8/arch-arm
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86
PREFIX=/home/nav/28ffmpeg/android-ffmpeg

function build_one
                {
                ./configure --target-os=linux --prefix=$PREFIX \
                --enable-cross-compile \
                --enable-runtime-cpudetect \
                --disable-asm \
                --arch=arm \
                --cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
                --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
                --disable-stripping \
                --nm=$PREBUILT/bin/arm-linux-androideabi-nm \
                --sysroot=$PLATFORM \
                --enable-nonfree \
                --enable-version3 \
                --disable-everything \
                --enable-gpl \
                --disable-doc \
                --enable-avresample \
                --enable-demuxer=rtsp \
                --enable-muxer=rtsp \
                --disable-ffplay \
                --disable-ffserver \
                --enable-ffmpeg \
                --disable-ffprobe \
                --enable-libx264 \
                --enable-encoder=libx264 \
                --enable-decoder=h264 \
                --enable-protocol=rtp \
                --enable-hwaccels \
                --enable-zlib \
                --disable-devices \
                --disable-avdevice \
--extra-cflags="-I/home/android-ffmpeg/include -fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a" \
                --extra-ldflags="-L/home/android-ffmpeg/lib"
                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 -L$PREFIX/lib  -soname libffmpeg.so -shared -nostdlib  -z,noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavfilter/libavfilter.a libavresample/libavresample.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog -lx264 --warn-once --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a
                }

                build_one

e) Первоначально он работает отлично. Но после этого приходит ошибка :

libavformat/libavformat.a(log2_tab.o):(.rodata+0x0): multiple definition of `ff_log2_tab'
libavcodec/libavcodec.a(log2_tab.o):(.rodata+0x0): first defined here
libavutil/libavutil.a(log2_tab.o):(.rodata+0x0): multiple definition of `ff_log2_tab'
libavcodec/libavcodec.a(log2_tab.o):(.rodata+0x0): first defined here
build_android.sh: 48: build_one: not found

Result: libffmpeg.so not found.

2nd Try: Then I follow steps in http://dl.dropbox.com/u/22605641/ffmpeg_android/main.html-> Builds

a) Я загрузил Pre-Build libffmpeg.so по ссылке выше.

b) Добавьте libffmpeg.so в libs/armeabi/.

c) Сделайте Android.mk

include $(CLEAR_VARS)
LOCAL_MODULE := ffmpeg
LOCAL_SRC_FILES := libffmpeg.so
include $(PREBUILT_SHARED_LIBRARY)

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := main
LOCAL_STATIC_LIBRARIES += ffmpeg
LOCAL_SRC_FILES := ffmpeg-test.c
include $(BUILD_SHARED_LIBRARY)

d) Затем я создаю все ndk и all.Copy ffmpeg.c из библиотеки в ffmpeg-test.c , изменив ее int main для функции JNI и включить все необходимые файлы include.

Error:

<�Сильный> Консоль:

  /home/nav/Work/android/ndk/ndk-build all 
Prebuilt       : libffmpeg.so <= jni/
Install        : libffmpeg.so => libs/armeabi/libffmpeg.so
Compile thumb  : main <= ffmpeg-test.c
jni/ffmpeg-test.c: In function 'print_report':
jni/ffmpeg-test.c:1139:94: warning: incompatible implicit declaration of built-in function 'log2' [enabled by default]
SharedLibrary  : libmain.so
/home/nav/Work/android/ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/main/ffmpeg-test.o: in function check_keyboard_interaction:jni/ffmpeg-test.c:2496: error: undefined reference to 'qp_hist'

и многие другие неопределенные ссылки.

3
nl ja de
Я думаю, что это самое трудное: чтобы получить работу FFMPEG, я объединил несколько руководств и использовал Android NDK v6, потому что каждая более высокая версия NDK дает мне разные ошибки. Я могу дать вам один повод, и я надеюсь, что это сэкономит вам некоторое время: когда вы попытаетесь запустить метод main инструмента FFMPEG, например из командной строки, сделать его в другом процессе, вызывать, когда он заканчивает работу или любая ошибка происходит, когда собственный код выполнит exit (0) и убьет весь ваш процесс, в том числе ваш Android-приложение. GL!
добавлено автор Evos, источник
@Evos вы успешно выполнили ffmpeg на windows for android? См. Ссылку, и если вы знаете что-нибудь сообщение там я дам вам upvote .. android ndk r8e "> stackoverflow.com/ вопросы/17141348/& hellip;
добавлено автор TheFlash, источник
undefined reference проблема решена путем добавления LOCAL_ALLOW_UNDEFINED_SYMBOLS: = true этой строки в Android.mk .... Но теперь появляется ошибка: Может ли не загружать библиотеку «libffmpeg.so», необходимую для «libmain.so» .Means libmain.so Не удается найти библиотеку libffmpeg.so, предварительно созданную ..... Но оба они формируются в libs/armeabi/ ......
добавлено автор Navjot Bedi, источник
Я не могу получить доступ к функции внутри .so-файла, поскольку я получаю ошибку undefined reference .... plz help
добавлено автор Navjot Bedi, источник

3 ответы

https://github.com/guardianproject/android-ffmpeg

посмотрите на этот проект по git для подсказки о внесении изменений в 'ffmpeg.c.main ()' Я считаю, что сборка для этого проекта будет отлично работать при выпуске NDK, упомянутого в readme.

Заметка:

вы должны потратить некоторое время на все файлы doc в дистрибутиве NDK, чтобы вы поняли, как работает make.

Условие выхода функции main() обычно должно быть слегка изменено для android JNI.

1
добавлено
не удалось найти ссылку. @pratik - если u находится на окнах, работает с NDK и ffmpeg.main (), IMO рассматривает виртуальную машину. В конечном счете, я думаю, что u может получить лучший результат, чем использовать cygwin и все проблемы, которые тянутся к NDK-сборкам ffmpeg.
добавлено автор Robert Rowntree, источник
r u на окнах? В первый раз я построил опекуна, он работал в соответствии с readme. Im on linux.
добавлено автор Robert Rowntree, источник
@Robert Rowntree, можете ли вы рассказать мне о шагах? Я также обновил связанный с этим вопрос, посмотрев ссылку ... android ndk r8e "> stackoverflow.com/questions/17141348/&hellip ;
добавлено автор TheFlash, источник
@Robert Rowntree, я дал вам +1 ... надеюсь, что gurdianProject будет работать для меня .... пожалуйста, предоставьте мне несколько шагов, чтобы я мог построить библиотеку, а также опубликовать свой ответ по моей ссылке выше, чтобы я мог дать вам upvote. :)
добавлено автор TheFlash, источник
@Robert Rowntree ohh sry, я удалил его ... я нашел это github.com/guardianproject/android- ffmpeg работает?
добавлено автор TheFlash, источник
@ Robert Rowntree, я хочу решить это так или иначе .. если я найду решение, я обязательно отправлю его на SO ... многие разработчики r столкнутся с такой же проблемой ... это жуткое дерьмо .... разочарование ... даже не один учебник найден ....!
добавлено автор TheFlash, источник
Я попытался выполнить компиляцию над проектом, но я получил некоторые ошибки и не смог сформировать файл .so. И я отредактировал функцию main() функции ffmpeg.c, но приход ошибки - libffmpeg.so не найден libmain.so
добавлено автор Navjot Bedi, источник
когда я включаю предварительно созданную совместно используемую библиотеку libffmpeg.so в мой проект, она успешно включается во время компиляции, но не может загружать библиотеку libmylib.so , которая используется для libmain.so Справка Plzz ....
добавлено автор Navjot Bedi, источник
@RobertRowntree. Шаги упомянуты в моем вопросе выше. Нужна помощь
добавлено автор Navjot Bedi, источник

Чтобы исправить несколько определений, добавьте:

$PREBUILT/bin/arm-linux-androideabi-ar -dv libavcodec.a log2_tab.o
$PREBUILT/bin/arm-linux-androideabi-ar -dv libavutil.a log2_tab.o

Но вы также можете добавить этот вариант конфигурации:

--disable-symver

Таким образом мне удалось скомпилировать HEAD-версию ffmpeg с ndk v8, но с использованием лицензии LGPL, которая содержит намного меньше функций.

0
добавлено
вы успешно выполнили ffmpeg на windows for android? см. ссылку, и если вы знаете что-нибудь сообщение там я дам вам upvote .. android ndk r8e "> stackoverflow.com/questions/ 17141348/& hellip;
добавлено автор TheFlash, источник

Чтобы исправить проблему множественного дефиниции, вам нужно удалить дубликат * .o, чтобы столкновения не выполнялись. Я смог добиться того же, используя следующую команду.

rm /libavcodec/log2_tab.o

rm /ffmpeg-3.0.1/libavcodec/reverse.o

0
добавлено
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

Android Developers
Android Developers
4 476 участник(ов)

Общаемся на темы, посвященным Android-разработке, SDK, Kotlin, Realm и т.д.

Android Architecture
Android Architecture
2 186 участник(ов)

Русскоязычный чат по архитектуре в андроид приложениях. Подробнее: http://telegra.ph/Android-Architecture-12-24

rus-speaking/android
rus-speaking/android
1 705 участник(ов)

Основной чат по Android разработке (вопрос-ответ). ПРАВИЛА: bit.ly/andr-rules. NEWS: bit.ly/AnrdResId ЧАТЫ: Основной: bit.ly/andr-main IDE, сборка, Git, сервисы: bit.ly/andr-tools Оффтоп: bit.ly/andr-offtop Конференции, события: bit.ly/andr-events Вакансии, найм: bit.ly/andr-job Архитектура: bit.ly/andr-patterns Rx: bit.ly/andr-rx Тестирование: bit.ly/andr-test Kotlin: bit.ly/andr-kotlin Хаmarin: bit.ly/andr-xamarin За мат, спам, агрессию, предложения о работе, оффтоп в этом канале - бан на сутки и более ☢☢☢

Android Dev Подкаст
Android Dev Подкаст
1 325 участник(ов)

Комната для обсуждения Android Dev подкаста apptractor.ru/AndroidDev/ Общее обсуждение Android: https://t.me/android_ru Остальные чаты про Android: http://t.me/devChats Наши новости https://t.me/androiddevpodcast_news

Android Guards
Android Guards
602 участник(ов)

Обсуждение любых вопросов касающихся безопасности Android. - Защита системы и приложений - Уязвимости и эксплойты - Вредоносное ПО - Копание в кишках системы и приложений (RE)

Android JOB
Android JOB
466 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению Android (full-time, part-time, remote и разовые подработки)

AndroidDev :: Разработка. It's Android time now!
AndroidDev :: Разработка. It's Android time now!
458 участник(ов)

It's Android time now! Чат разработчиков Android. Вакансии, резюме и информацию о митапах размещать можно. Публикацию скрытой и явной рекламы ваших каналов и сайтов после получения разрешения от @olegushakov

Aandroid Talks!
Aandroid Talks!
212 участник(ов)

Чат об общих вопросах по ОС Android. Чат для разработки под андроид - pro.android: https://t.me/joinchat/AAAAAEKIFKnmRT9cMebb9w

Android Rus
Android Rus
68 участник(ов)