Загрузка данных
**Да, собрать mpv под Android возможно**, но есть важный нюанс: сам по себе репозиторий `mpv-player/mpv` — это лишь консольный видеодвижок (libmpv). Для Android существует отдельный официальный репозиторий, который объединяет этот движок и графический интерфейс (обертку) для Android.
Вот подробности о сборке и о том, стоит ли это использовать для БПЛА.
### Репозиторий для Android
Проект называется **mpv-android**.
* **GitHub:** `mpv-android/mpv-android`
Этот репозиторий содержит скрипты для автоматической кросс-компиляции ядра mpv, FFmpeg и других зависимостей под архитектуры ARM/ARM64, а также саму Android-обертку на Java/Kotlin с использованием `SurfaceView` для вывода видео.
### Как собирается (кратко)
Сборка происходит не через Android Studio напрямую, а через специализированные скрипты (обычно `./buildscripts/build-media` и затем сборка APK через Gradle). Вам потребуется Android NDK и SDK. Процесс занимает продолжительное время, так как приходится компилировать статические библиотеки FFmpeg и mpv из исходников.
### Подходит ли mpv-android для видеопотока H.265 с БПЛА (wfb-ng)?
Если ваша цель — получить минимальную задержку на Android-устройстве (телефоне/планшете), то **mpv — это рабочий, но не самый оптимальный вариант**.
Вот почему:
1. **Аппаратное декодирование (MediaCodec):** На Android mpv использует `--hwdec=mediacodec`. Это работает и дает низкую нагрузку на процессор, но реализация MediaCodec в Android имеет свой внутренний буфер. Из-за этого задержка декодирования на Android всегда будет чуть выше (на 1-3 кадра), чем при прямом выводе через DRM/KMS на Linux-одноплатниках (Raspberry Pi).
2. **Сетевой буфер Android:** Операционная система Android довольно агрессивно управляет сетью и батареей. Прием сырых UDP-пакетов в фоне может throttled'иться (замедляться) системой.
3. **Интерфейс:** В mpv-android нет удобного механизма автоматического переподключения к RTP-потоку при потере пакетов (что часто бывает с дронами). Вам придется настраивать `mpv.conf` для работы с потоком.
### Как настроить mpv-android под wfb-ng (если вы всё же решите собрать)
Чтобы mpv на Android играл RTP-поток с минимальной задержкой, вам нужно будет прописать конфиг (`mpv.conf`), который попадет внутрь APK или будет читаться из памяти устройства:
```ini
# Отключаем буферизацию
profile=low-latency
no-cache
no-demuxer-thread
untimed=yes
# Аппаратное декодирование H.265
hwdec=mediacodec
vd-lavc-dr=yes
# Отключаем звук (его нет в wfb-ng)
ao=null
# Не останавливаться при ошибках парсинга потока
stream-lavf-o=fflags=nobuffer
```
### Лучшие альтернативы для Android
Если ваша задача — именно вывод видео с БПЛА на Android с минимальным лагом, лучше обратить внимание на проекты, которые написаны специально для этого:
1. **FpvVrApp** (`Consti10/FpvVrApp`)
* **Плюсы:** Написан специально для FPV. Использует низкоуровневый Android ExoPlayer/MediaCodec с минимальными буферами. Умеет автоматически реконнектиться к `rtp://...`. Поддерживает стерео (VR) режим.
* **Сборка:** Собирается через Android Studio стандартно, гораздо проще, чем mpv-android.
2. **OpenHD Android** (`OpenHD/OpenHD-Android`)
* **Плюсы:** Полноценная наземная станция. Принимает видео, накладывает OSD (телеметрию) поверх видео.
* **Сборка:** Довольно тяжелый проект, но готовые APK обычно есть в Releases.
3. **Свой плеер на ExoPlayer**
* Многие разработчики дронов просто берут библиотеку **Google ExoPlayer** (которая поддерживает RTP/UDP и H.265 MediaCodec) и пишут свою Activity на Kotlin/Java размером в 50 строк кода. Это часто проще, чем пытаться подружить консольный mpv с Android UI и жизненным циклом Activity.
**Резюме:** Собрать `mpv-android` можно, и он сможет проиграть `rtp://0.0.0.0:5600` с H.265, но для дрона это "из пушки по воробьям". Если вам нужен просто плеер — возьмите готовый FpvVrApp. Если вы делаете свое приложение — используйте ExoPlayer.