Repository navigation
RU RU 1 Startup
На Forge, NeoForge и Fabric загрузчик запускает WATERMeDIA за вас: пропустите этот раздел.
ПРИМЕР:
import org.watermedia.WaterMedia;
WaterMedia.start("My application", temporaryDirectory, workingDirectory, true);
boolean ready = WaterMedia.loaded(); // true ONCE EVERY MODULE FINISHED; CHECK THE CAPABILITY YOU NEED TOO
String module = WaterMedia.loading(); // MODULE CURRENTLY LOADING
int step = WaterMedia.step(); // CURRENT LOADING STEP
int steps = WaterMedia.steps(); // TOTAL LOADING STEPSОна загружает в таком порядке:
- Конфигурацию (
watermedia.toml) - Binaries (только если его JAR присутствует)
NetworkAPICodecsAPIPlayerAPI
steps() равен 5 с Binaries и 4 без него. loading(), step() и steps() можно читать из любого потока для экрана
загрузки.
-
startвыполняется один раз на процесс: остановки нет, повторныйstartбросает исключение, а неудавшийся запуск нельзя повторить. - При null временной директорией становится
<java.io.tmpdir>/watermedia, а рабочей директорией текущая. Последний аргумент говорит, клиент ли это; на выделенных серверах Binaries, кодеки и плеер не запускаются. - Если необязательная часть (файловый сервер, FFmpeg) падает, она остаётся выключенной, а загрузка продолжается:
проверяйте то, что вам нужно, например
CodecsAPI.ffmpegLoaded(). - Любая другая ошибка (конфигурация, установленный Binaries) заставляет
startброситьIllegalStateExceptionс этой ошибкой в качестве причины, аloaded()остаётся false. - Никогда не вызывайте
startиз потока или колбэка WATERMeDIA: он откажется работать.
Каждый API знает, загрузился ли его модуль:
-
PlayerAPI.mrlбросаетIllegalStateException, пока не запустится плеер, а на выделенных серверах всегда. -
NetworkAPI.uploadбросает исключение, пока не запустится сеть или если ему передали что-то, кроме существующего файла; недоступный или неправильно настроенный сервер виден в возвращённом статусе. -
PlatformAPIне требует запуска:register,fetchиsearchработают всегда. Платформы, которые используют Binaries (YouTube, yt-dlp), падают сPlatformException, пока он не загрузится, а на выделенных серверах всегда; без JAR Binariesfetchвозвращает null для их ссылок. - Декодирование изображений на чистой Java через
CodecsAPI,ServerMediaPlayer,MathUtilиMathEasesне требуют запуска.
Плеер владеет движками, которые создают ваши поставщики. Передавайте поставщики, а не уже созданные движки: если источника нет, ничего нативного не останется висеть. Контексты OpenGL, Vulkan и OpenAL принадлежат вам: освобождайте каждый плеер до их уничтожения и создавайте новые движки, когда перезагружаете устройство или контекст. Нативные библиотеки никогда не выгружаются и не меняют версию, пока работает JVM.
WATERMeDIA не запускается в Minecraft, если игру запустил TLauncher, а в сообщении об ошибке указано, по каким признакам его определили. Остатки старой установки лишь записывают предупреждение в лог, а встраивающие приложения эту проверку пропускают.
Forge, NeoForge и Fabric загружают WATERMeDIA на клиентах и выделенных серверах этих версий и отклоняют остальные:
| Minecraft | Forge | NeoForge | Fabric Loader |
|---|---|---|---|
| 1.18.2 | 40.3.10 или новее (40.x) | ⛔ | 0.14 или новее (0.x) |
| 1.19.2 | 43.5.0 или новее (43.x) | ⛔ | 0.14 или новее (0.x) |
| 1.20.1 | 47.4.2 или новее (47.x) | ⛔ | 0.14 или новее (0.x) |
| 1.21.1 | 52.1.1 или новее (52.x) | 21.1.0 или новее (21.1.x) | 0.14 или новее (0.x) |
| 1.21.11 | 61.0.5 или новее (61.x) | 21.11.0 или новее (21.11.x) | 0.14 или новее (0.x) |
| 26.1.2 | 64.x | 26.1.2.x | 0.14 или новее (0.x) |
| 26.2 | 65.x | 26.2.0.x | 0.14 или новее (0.x) |
| 26.3 | 66.x | 26.3.0.x | 0.14 или новее (0.x) |
- В Minecraft принимается Java от 17 до 25.
- WATERMeDIA и Binaries принимают друг друга от 3.0.0 до 3.1.0 (не включая); старые сборки 3.0.0 BETA отклоняются.
- Fabric не умеет требовать зависимость только на клиентах, поэтому там bootstrap сам требует Binaries на клиентах.
Публичный API составляют пакеты org.watermedia, api.codecs, api.network, api.platform, api.player и
api.util, без их подпакетов. Всё остальное внутреннее.
Доступ к внутренним пакетам ничем не закрыт, но, пожалуйста, используйте публичные точки входа, такие как
PlayerAPI.player и PlatformAPI.fetch, и не трогайте то, что за ними. Если вы участвуете в разработке,
gradle javadocInventory покажет публичные методы без документации.
Warning
CodecsAPI экспериментальный: decode, reader, sniff, encoder и связанные с ними ридеры, энкодеры и фильтры
могут измениться в любом обновлении без соблюдения схемы версий. Пока не используйте их в своих модах; плееры уже
используют их за вас. Проверки статуса (ffmpegLoaded(), ffmpegError(), vulkanDecode()) использовать безопасно.
Логгеры проекта называются watermedia и watermedia_binaries; для диагностики выставьте этим именам уровень DEBUG.
- Логи показывают ссылки полностью, чтобы помогать при отладке, но скрывают секреты: пароли в ссылках, JWT-токены,
Authorization,Cookie, сессию Minecraft и любую паруkey=value, похожую на секрет. Отправка логов из приложения проходит через тот же фильтр. - Повторяющаяся проблема (короткий буфер, отклонённая раскладка, падающий колбэк, отклонённая загрузка) попадает в лог только в первый раз в каждом движке, плеере, сервере или кэше. Медленные итерации подсчитываются и выводятся один раз в конце.
- FFmpeg по-прежнему пишет свои логи в поток ошибок, в обход логгеров проекта и их фильтра секретов.
-
-Dwatermedia.glchecks=trueвключает проверки ошибок OpenGL при загрузке кадров.
src/test/java/org/watermedia/ApiGuideExample.java содержит компилируемые примеры для каждого движка и для синхронного
воспроизведения (часы и ведомый плеер); пример с изображениями выполняется в ApiGuideExampleTest. Если вы участвуете в
разработке, с -Prequire_natives=true тесты падают, а не пропускаются, когда нативных библиотек FFmpeg нет.