Интеграция AI-генерации видео (Runway/Sora) в мобильное приложение под ключ
Представьте: пользователь нажимает «Сгенерировать видео», а через минуту получает готовый клип прямо в приложении. Но реальность такова, что модели вроде Runway Gen-3, Sora, Kling требуют мощных GPU (A100/H100) и времени от 30 секунд до нескольких минут. Задача мобильного разработчика — организовать асинхронный флоу так, чтобы пользователь не ушёл в ожидании. Мы интегрируем эти API в ваше iOS/Android-приложение, обеспечивая надёжную генерацию, кеширование и уведомления.
Как интегрировать Runway API в мобильное приложение?
Runway предоставляет REST API с polling для проверки статуса. На iOS мы реализовали сервис с async/await и прогресс-баром, который симулирует выполнение на основе типичного времени генерации. На Android используем WorkManager с CoroutineWorker — задача выполняется в фоне даже при сворачивании приложения. Вот пример iOS-сервиса:
class VideoGenerationService {
func generate(prompt: String, sourceImage: UIImage?) async throws -> URL {
let taskId = try await runwayClient.createTask(
prompt: prompt,
imageURL: sourceImage.map { try await uploadImage($0) },
duration: 5,
ratio: "1280:768"
)
UserDefaults.standard.set(taskId, forKey: "pendingVideoTaskId")
return try await pollWithBackoff(taskId: taskId)
}
private func pollWithBackoff(taskId: String) async throws -> URL {
let intervals: [TimeInterval] = [3, 5, 8, 10, 10, 15, 15, 20, 20, 30]
for interval in intervals + Array(repeating: 30.0, count: 10) {
try await Task.sleep(nanoseconds: UInt64(interval * 1e9))
let task = try await runwayClient.getTask(id: taskId)
switch task.status {
case .succeeded:
UserDefaults.standard.removeObject(forKey: "pendingVideoTaskId")
return task.output.first!
case .failed:
throw VideoGenError.generationFailed(task.failure ?? "Unknown")
default: continue
}
}
throw VideoGenError.timeout
}
}
На Android: WorkManager с CoroutineWorker — правильный выбор для долгих фоновых задач. Polling в doWork(), Result.retry() при PROCESSING, Result.success(outputData) при SUCCEEDED.
Что делать, если генерация занимает больше минуты?
Push-уведомление — обязательная опция. Backend отслеживает статус задачи и отправляет FCM/APNs при завершении. Deep link (Universal Links / App Links) ведёт на экран результата с автовоспроизведением. Если пользователь свернул приложение, прогресс сохраняется через pendingTaskId в UserDefaults.
Оценка реального прогресса без данных от API
Большинство API не возвращают процент выполнения — только статус PENDING/PROCESSING/SUCCEEDED. Мы используем симулированный прогресс-бар: таймер на 55 секунд (95%), затем ожидание реального ответа. Это лучше, чем пустой спиннер.
Таблица AI-видео API
| Провайдер | API | Длина клипа | Типичное время | Входные данные |
|---|---|---|---|---|
| Runway Gen-3 Alpha | REST + polling | 5–10 сек | 30–90 сек | Text, Image-to-Video |
| Kling AI | REST API | 5–10 сек | 60–180 сек | Text, Image-to-Video |
| Hailuo (MiniMax) | REST API | 6 сек | 45–120 сек | Text, Image-to-Video |
| Luma Dream Machine | REST API | 5 сек | 30–60 сек | Text, Image, Keyframes |
| Replicate (различные) | REST + WebSocket | 2–10 сек | 30–120 сек | Зависит от модели |
Для выбора API ориентируйтесь на время генерации и длину клипа. Runway API — наиболее зрелый с SDK для TypeScript/Python. Sora от OpenAI пока доступна только через партнёрскую программу. Соблюдение App Store Review Guidelines (раздел 4.2) обязательно для публикации.
Сравнение подходов к асинхронной генерации
| Аспект | Polling | WebSocket |
|---|---|---|
| Простота интеграции | Высокая | Средняя |
| Точность прогресса | Низкая (только статус) | Высокая (сообщения о каждом шаге) |
| Нагрузка на сервер | Средняя (частые запросы) | Минимальная (событийно) |
| Восстановление при разрыве | Автоматически (повторный запрос) | Требуется реконнект |
Выбор между polling и WebSocket зависит от частоты обновлений и критичности прогресса. Для простых сценариев достаточно polling, для сложных — WebSocket.
Типичные ошибки при интеграции AI-видео
- Не учитывать таймауты: если генерация длится дольше ожидаемого, пользователь видит вечный спиннер.
- Не сохранять
taskIdперед выходом из приложения: потеря прогресса. - Игнорировать квоты API: превышение лимита приводит к ошибкам.
- Не оптимизировать кеш: повторное скачивание видео при каждом входе.
Решаем эти проблемы на этапе проектирования.
Что входит в нашу работу?
- Анализ: выбор оптимального API под ваши задачи (длина клипа, бюджет, качество).
- Интеграция: реализация асинхронного флоу с polling, прогресс-баром и кешированием результата.
- Фоновая обработка: WorkManager/BGTaskScheduler для длительных задач.
- Push-уведомления: FCM/APNs с deep linking.
- Документация: руководство по использованию и поддержка.
- Гарантия: 3 месяца бесплатной поддержки после сдачи.
Процесс работы
- Аналитика — изучаем ваше приложение, выбираем API, оцениваем нагрузку.
- Проектирование — архитектура флоу, схема кеширования, безопасность.
- Реализация — написание кода, интеграция SDK, тестирование.
- Тестирование — проверка на реальных устройствах, симуляция ошибок.
- Деплой — публикация в App Store / Google Play, настройка мониторинга.
Сроки и стоимость
Базовая интеграция (один API, плеер, кеш) — от 5 до 7 дней. Полный флоу с фоновыми задачами, push, Image-to-Video и галереей — 3–4 недели. Точная стоимость рассчитывается индивидуально после ознакомления с проектом.
Наш опыт интеграции AI-функций — более 5 лет и 15+ успешных проектов. Мы гарантируем качество и соблюдение App Store Review Guidelines (раздел 4.2).
Готовы начать? Свяжитесь с нами для предварительной оценки. Получите консультацию по выбору API и архитектуре уже сегодня.







