Примеры Gstreamer в Android Studio

Я пытался заставить Gstreamer работать в студии Android, следуя их руководствам, см., например, здесь:

https://gstreamer.freedesktop.org/documentation/tutorials/android/link-against-gstreamer.html

Но в последней студии Android нет jni/Android.mk. Где мне поместить код в конце этой веб-страницы?

Должен ли он идти в CMakeLists.txt? Или там должно быть что-то другое?

Или мне просто сделать файл Android.mk, и если да, то где (т.к. там нет папки jni, только папка cpp)? И как мне сообщить Android-студии, где найти мой файл Android.mk?

Спасибо!


person Josiki    schedule 11.07.2017    source источник
comment
Если мой ответ помог, пожалуйста, примите его. Спасибо   -  person Eduardo Fernando    schedule 01.02.2018


Ответы (2)


Я заставил все уроки с сайта Gstreamer работать, но это было очень сложно. Чтобы помочь другим людям, я задокументировал это. Вот учебник для linux (ubuntu), но он может работать и в Windows, если у вас есть какие-либо вопросы по этому поводу, просто спросите :)... Я также пришлю ссылку на проект из gitlab, готовый к запуску в Android Студия:
(учебник 5) https://gitlab.com/eduardoprado/gstreamer-tutorial5.git
(учебник 2) https://gitlab.com/eduardoprado/gstreamer-tutorial2.git

Использование библиотеки в Android Studio

Лучший способ понять и интегрировать GStreamer в проект — пройти обучение на этом сайте: Извините, вам нужно найти ссылку самостоятельно, у меня нет репутации, чтобы публиковать прямую ссылку
Однако эти руководства устарели и были созданы для работы в Eclipse, для работы с Android Studio необходимо:

<сильный>1. Импортируйте учебные пособия с помощью параметра «Импорт» в Android Studio;
2. Настройте Android Studio на использование NDK;
3. Установите переменную в файле «Android.mk»;
4. Настройте Gradle для компиляции только некоторой архитектуры;
5. Скопируйте Gstreamer class на правильный путь.
6. Отключите "Instant Run" из Android Studio. (редактирование сделано 27.10.2017)
7. Исправлен "аргумент золота компоновщика" (редактирование сделано 28.11.2017, только для пользователей WINDOWS)

Каждая из этих инструкций будет объяснена в следующих разделах:

<сильный>1. Импортируйте руководства с помощью функции импорта Android Studio.

В Android Studio есть возможность импортировать проект из других IDE. Чтобы импортировать проект Gstreamer, сделанный в Eclipse, выполните следующие действия:
1. Загрузите все руководства из git: ;
2. В Android Studio выберите Файл -> Новый проект импорта;
3. В новом браузере для экрана файлов, перейдите в «gst-docs», выберите нужный проект (в моем случае учебник 5) «android-tutorial-5» и нажмите «ОК».

Выбор проекта

2. Настройте Android Studio на использование NDK

Теперь, когда проект импортирован, необходимо сообщить Android Studio, что проект использует инфраструктуру NDK. Таким образом, Gradle сможет импортировать и обрабатывать все зависимости. Для этого нам нужно связать файл Android.mk (уже в папке учебника):
1. Щелкните правой кнопкой мыши «приложение» на левой вкладке навигации
2. Нажмите «Связать проект C++ с Gradle».
3. В новом окне:

  • Измените "Система сборки" с "CMake" на "ndk-build"
  • Нажмите "..." и перейдите в папку с файлом Android.mk "/AndroidStudioProjects/android-studio-5/app/src/jni/Android.mk"
  • Нажмите "ОК"

Теперь внешние файлы сборки появятся на левой вкладке проекта. Также будут появляться некоторые ошибки, это нормально и будет исправлено в следующих разделах.

<сильный>3. Установите переменную в файле «Android.mk»

Ошибка последнего раздела возникает из-за того, что «Android.mk» не находит путь, по которому был извлечен GStreamer. Итак, давайте установим для переменной GSTREAMER_ROOT_ANDROID путь, по которому был извлечен GStreamer. Для этого:
1. Перейдите на вкладку слева и разверните "Внешние файлы сборки";
2. Дважды щелкните файл Android.mk, чтобы открыть файл;
3. В строке 10 в разделе "include $ (BUILD_SHARED_LIBRARY)", введите:
- "GSTREAMER_ROOT_ANDROID := путь"
- БЕЗ кавычек
- путь - это путь (очевидно), где GStreamer был извлечен.
После этого Gradle выполнит синхронизацию и выдаст ошибку "***Целевой арочный ABI не поддерживается: mips. Stop".

Настройка GSTREAMER_ROOT_ANDROID

<сильный>4. Установите Gradle для компиляции только некоторой архитектуры

Ошибка последнего раздела возникает из-за того, что Grade пытается выполнить сборку для разных архитектур, но не находит файл для сборки в MIPS. Чтобы решить эту проблему, мы укажем архитектуры для сборки, исключая MIPS:
1. На левой вкладке браузера разверните Gradle Scripts;
2. Дважды щелкните «build.gradle (Module: app)»
3. В строке под "moduleName" введите:
(для запуска туториала 5)
- abiFilters 'x86','armeabi', 'armeabi-v7a', 'arm64-v8a'
(для запуска туториал 2)
- abiFilters 'x86', 'armeabi-v7a', 'arm64-v8a'
(редактировать 21.11.2017: Недавно у меня были проблемы с arm64-v8a... устройства с 64 битами победили не показывает прямую трансляцию, я тоже решил «удалить arm64-v8a»)
(редактировать 29.03.2018: я понял, что может потребоваться удалить больше архитектуры в зависимости от вашей версии Gstreamer и NDK, если это не работает, попробуйте различные комбинации удаления)

введите здесь описание изображения

<сильный>5. Скопируйте класс Gstreamer по правильному пути.

Последняя необходимая конфигурация касается импорта пакетов в класс Main.

Ошибка импорта класса

Показанная выше ошибка возникает из-за того, что нет класса GStreamer для получения функции «.init». Чтобы решить эту проблему, нам нужно скопировать класс GStreamer из файла, в который он был извлечен, и вставить по указанному пути:

  1. С помощью файлового менеджера вашей системы перейдите к файлу, в который вы распаковали GStreamer.
  2. В извлеченном файле перейдите к расположению класса GStreamer. Он находится по адресу /arm/share/gst-android/ndk-build/GStreamer.java. Копировать GStreamer.java
  3. Вернитесь в Android Studio и создайте путь импорта, к которому класс Main пытается получить доступ, начиная с /app/java на левой вкладке браузера. Итак, к изображению выше мы должны создать путь org.freedesktop.gstreamer и вставить в него файл GStreamer.java:
  4. Щелкните правой кнопкой мыши папку java
  5. Новый-> Пакет
  6. Введите org.freedesktop.gstreamer
  7. Щелкните правой кнопкой мыши org.freedesktop.gstreamer и вставьте 5. Ошибка импорта теперь устранена, но в новом классе есть ошибки. Чтобы их решить, достаточно стереть из скопированного класса «@» и все, что находится между «@».

<сильный>6. Отключите «Instant Run» из Android Studio. (редактирование сделано 27.10.2017)
Эта функция из Android Studio может вызвать проблемы при попытке запустить проект, поэтому рекомендуется отключить ее.
Отключение «Мгновенного запуска»:

1. В Android Studio перейдите в "Файл" -> "Настройки..." (Ctrl+Alt+S)
2. "Сборка, выполнение, развертывание" -> "Мгновенный запуск"
3. Снимите флажок "Включить мгновенный запуск для горячей замены кода/изменений ресурсов при развертывании (по умолчанию включено)"
4. Нажмите "Применить"

<сильный>7. Исправить «аргумент золота компоновщика» (только для пользователей WINDOWS)

При попытке Windows вы получите сообщение об ошибке:
Error:error: invalid linker name in argument '-fuse-ld=gold'
Чтобы исправить это:
1. Перейдите на страницу Android NDK Linker (GStreamer) - недопустимое имя компоновщика -fuse-ld=gold
2. Следуйте советам Антуана Замбелли инструкции ответа.

person Eduardo Fernando    schedule 14.09.2017
comment
Это отличный справочник по созданию руководств по gstreamer с помощью Android Studio! Хотелось бы, чтобы это было частью официальных документов. Для Android Studio в Windows мне пришлось применить [это исправление][1] для недопустимого имени компоновщика в аргументе '-fuse-ld=gold'. Мне также пришлось удалить цель armeabi из-за ошибки переполнения при перемещении компоновщика. [1]: stackoverflow.com/questions/44650470/ - person Glenn; 31.10.2017
comment
Спасибо за положительный отзыв, всегда приятно знать, что пошаговая инструкция работает и другие люди добились успеха. Я отредактировал учебник, добавив информацию о том, что учебник создан для Linux (возможно, ошибка, которую вы получили, была из-за того, что вы сделали это в Windows), и информацию об удалении armeabi из фильтров в случае попытки использования учебников 2 и 3. Если другие люди будет та же проблема, что и в Windows, я добавлю еще один шаг, включая ссылку, которую вы использовали для решения вашей проблемы. - person Eduardo Fernando; 01.11.2017
comment
@EduardoFernando почти уверен, что это проблема Windows в целом - см. Проблемы с подключением Windows в GStreamer, но решение, которое они предлагают на этой странице, мне не подошло (отсюда и мой ответ на связанный вопрос). - person Antoine Zambelli; 28.11.2017
comment
@AntoineZambelli Спасибо за отзыв. Недавно мой друг пытался использовать его в Windows, и у него была такая же проблема, поэтому я добавлю +1 шаг к руководству специально для пользователей Windows. - person Eduardo Fernando; 28.11.2017
comment
Вы знаете, как бы я сделал это с cmake? Остальная часть моего проекта использует cmake, и я бы предпочел не переходить на ndk-build. - person Crearo Rotar; 11.06.2018
comment
@CrearoRotar Короткий ответ: я не знаю. Если я правильно понял из stackoverflow.com/questions/39589427/ , когда вы выбираете ndk-build, вы используете файл Android.mk для связывания и сборки проекта. Поэтому я думаю, вам следует поискать, как перевести Android.mk в файл CMake. Но я также не знаю, будут ли после перевода все шаги из учебника продолжать работать. - person Eduardo Fernando; 12.06.2018
comment
Да, я пытался найти то же самое! Я не знал, как преобразовать Android.mk в cmakelist, поэтому решил, что мне будет проще перенести все на Android.mk, потому что мне там удобнее. - person Crearo Rotar; 12.06.2018

После нескольких дней борьбы я обнаружил, что учебная документация gstreamer была обновлена ​​для использования системы сборки gradle. Вы можете увидеть полный рабочий пример в https://cgit.freedesktop.org/gstreamer/gst-docs/, см. фиксацию от 14 июня 2018 г., «Учебники по Android: добавление системы сборки gradle»

person avlacatus    schedule 19.06.2018