FFmpeg на Android

У меня FFmpeg скомпилирован (libffmpeg.so) на Android. Теперь я должен создать либо приложение, например RockPlayer, либо использовать существующую платформу Android для Android, чтобы вызывать FFmpeg.

  1. У вас есть шаги / процедуры / код / ​​пример по интеграции FFmpeg на Android / StageFright?

  2. Не могли бы вы посоветовать мне, как я могу использовать эту библиотеку для воспроизведения мультимедиа?

  3. У меня есть требование, когда у меня уже есть streamи аудио и видео транспорта, которые мне нужно передать в FFmpeg и получить его декодированием / визуализацией. Как я могу сделать это на Android, так как API IOMX основан на OMX и не может подключать FFmpeg здесь?

  4. Также я не смог найти документацию по API-интерфейсам FFmpeg, которые необходимо использовать для воспроизведения.

    Вот шаги, которые я прошел, чтобы ffmpeg работал на Android:

    1. Создайте статические библиотеки ffmpeg для Android. Это было достигнуто за счет создания андроидного порта olvaffe ffmpeg ( libffmpeg ) с использованием системы Android Build . Просто поместите источники под / внешние и уберите. Вам нужно будет извлечь bionic (libc) и zlib (libz) из сборки Android, так как библиотеки ffmpeg зависят от них.
    2. Создайте динамическую библиотеку, обменивающую функциональность ffmpeg с помощью Android NDK . Там много документации о том, как работать с NDK. В основном вам нужно написать код C / C ++, чтобы экспортировать необходимые функции из ffmpeg в библиотеку, с которой java может взаимодействовать через JNI. NDK позволяет вам легко ссылаться на статические библиотеки, сгенерированные на шаге 1, просто добавьте строку, подобную этой, в Android.mk: LOCAL_STATIC_LIBRARIES := libavcodec libavformat libavutil libc libz

    3. Используйте динамическую библиотеку ffmpeg-wrapping из ваших java-источников. Там есть достаточно документации по JNI, все должно быть хорошо.

    Что касается использования ffmpeg для воспроизведения, есть много примеров (хороший пример ffmpeg – это пример), вот основной учебник. Лучшая документация может быть найдена в заголовках.

    Удачи 🙂

    По разным причинам Мультимедиа была и никогда не бывает легкой с точки зрения достижения поставленной задачи без ущерба для эффективности. ffmpeg – это попытка улучшить его изо дня в день. Он поддерживает различные форматы кодеков и контейнеров.

    Теперь, чтобы ответить на вопрос о том, как использовать эту библиотеку , я бы сказал, что ее здесь не так просто написать. Но я могу вести вас следующим образом .

    1) Внутри каталога ffmpeg исходного кода вы имеете output_example.c или api_example.c . Здесь вы можете увидеть код, где выполняется кодирование / декодирование. Вы получите представление о том, какой API внутри ffmpeg вы должны позвонить. Это будет ваш первый шаг.

    2) Dolphin player – это проект с открытым исходным кодом для Android. В настоящее время он имеет ошибки, но разработчики постоянно работают. В этом проекте у вас есть вся настройка, которую вы можете использовать, чтобы продолжить свое расследование. Вот ссылка на проект с сайта code.google.com или запустите команду « git clone https://code.google.com/p/dolphin-player/ » в терминале. Вы можете увидеть два проекта с именем P и P86. Вы можете использовать любой из них.

    Дополнительный совет, который я хотел бы предложить, заключается в том, что когда вы создаете код ffmpeg, внутри build.sh вам нужно включить мультиплексоры / демультиплексоры / кодировщики / декодеры форматов, которые вы хотите использовать. Кроме того, соответствующий код не будет включен в библиотеки. Мне потребовалось много времени, чтобы понять это. Так подумал об обмене с тобой.

    Немного оснований: Когда мы говорим видеофайл, например: avi, это комбинация аудио и видео

    Видеофайл = Видео + Аудио


    Видео = Codec + Muxer + Demuxer

    codec = кодировщик + декодер

    => Видео = кодировщик + декодер + Muxer + Demuxer (Mpeg4 + Mpeg4 + avi + avi – Пример для avi-контейнера)


    Аудио = Codec + Muxer + Demuxer

    codec = кодировщик + декодер

    => Аудио = кодировщик + декодер + Muxer + Demuxer (mp2 + mp2 + avi + avi – пример для avi container)


    Codec (имя выводится из комбинации en * co * der / * dec * oder) – это всего лишь часть формата, которая определяет алгоритмы, используемые для кодирования / декодирования кадра. AVI не является кодеком, это контейнер, который использует видеокодек Mpeg4 и аудиокодек mp2.

    Muxer / demuxer используется для объединения / разделения кадров из файла, используемого при кодировании / декодировании.

    Поэтому, если вы хотите использовать формат avi, вам необходимо включить компоненты видео + аудиокомпоненты.

    Например, для avi вам необходимо включить следующее. mpeg4 Encoder, mpeg4-декодер, mp2-кодировщик, mp2-декодер, avi-мультиплексор, avi demuxer.

    phewwwwwww …

    Программно build.sh должен содержать следующий код:

     --enable-muxer=avi --enable-demuxer=avi (Generic for both audio/video. generally Specific to a container) --enable-encoder=mpeg4 --enable-decoder=mpeg4(For video support) --enable-encoder=mp2 --enable-decoder=mp2 (For Audio support) 

    Надеюсь, что я больше не смучу тебя после всего этого …

    Спасибо, любая помощь нужна, пожалуйста, дайте мне знать.

    Самая легкая в использовании, простая в использовании реализация, которую я нашел, производится командой theguardianproject: https://github.com/guardianproject/android-ffmpeg

    Я сделал небольшой проект для настройки и сборки X264 и FFMPEG с помощью Android NDK. Главное, чего не хватает, – это достойный интерфейс JNI, чтобы сделать его доступным через Java, но это легкая часть (относительно). Когда я подхожу к тому, чтобы сделать JNI-интерфейс подходящим для моих собственных целей, я его подтолкнул.

    Преимущество системы сборки olvaffe заключается в том, что для создания библиотек не требуется файлов Android.mk, они просто используют обычные make-файлы и инструментальную цепочку. Это значительно снижает вероятность того, что вы перестанете работать, когда вы выберете новое изменение с FFMPEG или X264.

    https://github.com/halfninja/android-ffmpeg-x264

    Чтобы сделать мое приложение FFMPEG, я использовал этот проект ( https://github.com/hiteshsondhi88/ffmpeg-android-java ), поэтому мне не нужно ничего компилировать. Я думаю, что это простой способ использовать FFMPEG в наших приложениях для Android.

    Дополнительная информация о http://hiteshsondhi88.github.io/ffmpeg-android-java/

    Вдохновленный многими другими программами FFmpeg для Android (главным образом, guadianproject ), я нашел решение (с поддержкой Lame).

    (lame и FFmpeg: https://github.com/intervigilium/liblame и http://bambuser.com/opensource )

    для вызова FFmpeg:

     new Thread(new Runnable() { @Override public void run() { Looper.prepare(); FfmpegController ffmpeg = null; try { ffmpeg = new FfmpegController(context); } catch (IOException ioe) { Log.e(DEBUG_TAG, "Error loading ffmpeg. " + ioe.getMessage()); } ShellDummy shell = new ShellDummy(); String mp3BitRate = "192"; try { ffmpeg.extractAudio(in, out, audio, mp3BitRate, shell); } catch (IOException e) { Log.e(DEBUG_TAG, "IOException running ffmpeg" + e.getMessage()); } catch (InterruptedException e) { Log.e(DEBUG_TAG, "InterruptedException running ffmpeg" + e.getMessage()); } Looper.loop(); } }).start(); 

    и обрабатывать вывод консоли:

     private class ShellDummy implements ShellCallback { @Override public void shellOut(String shellLine) { if (someCondition) { doSomething(shellLine); } Utils.logger("d", shellLine, DEBUG_TAG); } @Override public void processComplete(int exitValue) { if (exitValue == 0) { // Audio job OK, do your stuff: // ie // write id3 tags, // calls the media scanner, // etc. } } @Override public void processNotStartedCheck(boolean started) { if (!started) { // Audio job error, as above. } } } 

    Странно, что этот проект не упоминался: AndroidFFmpeg из Appunite

    Он имеет довольно подробные пошаговые инструкции для копирования / вставки в командной строке, для ленивых людей, таких как я))

    У меня была одна и та же проблема, я нашел большинство ответов здесь. Я закончил писать обертку на FFMPEG для доступа с Android с помощью одной строки кода.

    https://github.com/madhavanmalolan/ffmpegandroidlibrary

    Из системных настроек> о телефоне> юридическая информация> системные лицензии на веб-просмотр, кажется, ffmpeg включен как часть ОС Android (8.0.0, Nexus 5X). Было бы здорово, что мы можем получить доступ к этому, а не быть другим самостоятельно.

    лицензионная страница в Android

    Interesting Posts

    Сообщение для входа в Facebook: «URL Blocked: эта переадресация не удалась, потому что URI перенаправления не включен в настройки клиента OAuth».

    Сжать большой CSV-фильтр? (500MB)

    Является ли std :: abs (0u) плохо сформированным?

    Модульные тесты против функциональных тестов

    Как я могу автоматически загружать свой ноутбук с жесткого диска без необходимости нажимать F10 каждый раз?

    Случайная перетасовка массива

    Как сделать Notepad ++ открытым каждый файл в новом окне?

    Сколько термопасты должно применяться к ЦП?

    Как получить значение Spinner?

    Почему сброс CSS не использует ‘*’ для покрытия всех элементов?

    Безопасно хранить критические пароли в переменных окружения сервера?

    Как подсчитать количество различных значений в диапазоне?

    Что такое ключевое слово open в Swift?

    Python pandas groupby метод применить метод дублирует первую группу

    Угловой 2 Прокрутите вверх, чтобы изменить маршрут

    Давайте будем гением компьютера.