Kotlin + C++: реальный кейс — видеопроцессинг на сервере через JNI
Как мы построили сервер видеотранскодинга на Kotlin REST API + C++ FFmpeg через JNI. Прокачка JNI_OnLoad, передача фреймов через DirectByteBuffer, обработка ошибок и бенчмарки.
Заметки о веб-разработке, архитектуре, оптимизации и инструментах. Пишу о том с чем сталкиваюсь в реальных проектах.
статей
категорий
минут на чтение
Как мы реорганизовали CMake-структуру проекта на 15+ модулей, избавились от хаотичных include_directories и перешли на современный CMake с target-based зависимостями.
Читать статьюКак мы построили сервер видеотранскодинга на Kotlin REST API + C++ FFmpeg через JNI. Прокачка JNI_OnLoad, передача фреймов через DirectByteBuffer, обработка ошибок и бенчмарки.
Разбираем многопоточность в C++ на реальных примерах из продакшена: мьютексы, lock_guard, unique_lock, std::atomic, deadlock-ы и как их избежать. Сравнение с корутинами Kotlin.
Как мы внедрили eBPF для профилирования высоконагруженных C++ и Kotlin сервисов в продакшене без остановки и перекомпиляции. Реальные скрипты bpftrace, поиск утечек памяти и трейсинг JVM-системных вызовов.
Как мы ускорили обработку логов на 40x с помощью mmap. Практическое руководство с бенчмарками, подводными камнями и сравнением с std::ifstream.
Честный разбор фич C++17 и C++20: что мы взяли в проект, что пропустили и почему. Before/after примеры и компромиссы миграции.
Разбираю unique_ptr, shared_ptr и weak_ptr на реальных примерах из продакшена. Какие баги мы ловили из-за неправильного использования и как перестать путаться с ownership.
Реальный опыт использования корутин C++20 и Kotlin Coroutines в одном проекте. Разбираю механику работы, отличия в обработке ошибок и когда стоит брать сложность C++ корутин.
Три подхода к передаче сложных данных через JNI: примитивное выравнивание, JSON-сериализация и ByteBuffer. Бенчмарки, код и рекомендации из продакшена.
Подробный разбор сборочной цепочки C++ библиотеки для Kotlin/JNI. Структура проекта, кросс-компиляция под Android, линковка сторонних библиотек и типичные ошибки сборки.