Orbital Video
В 2013–2014 годах, работая во Flexbricks, я активно участвовал в стартапе AngularMedia. Позже он стал OrbitalVideo, затем Metepa, а сегодня продукт известен как Panora 360.
Это была работа с нуля: мы создавали сам продукт, рабочие процессы и инструменты, а не расширяли уже существующую платформу.
Один из самых необычных в техническом плане проектов в моей карьере. Идея заключалась в том, чтобы сделать видео интерактивным: зритель мог переключать ракурсы, вращаться вокруг сцены и сам выбирать, как смотреть происходящее, вместо пассивного просмотра с одной камеры.
Короткая демонстрация проекта Panora.
Что представлял собой продукт
Платформа построена вокруг интерактивного многокамерного видео. Камеры расставляют вокруг сцены, их потоки объединяют в один интерактивный материал, а затем публикуют результат в интернете или мобильных приложениях.
Основные возможности:
- съёмка сцены с 3–32 камер
- автоматическая калибровка и совмещение изображений
- синхронизация видеодорожек для естественного взаимодействия
- публикация для веб-, мобильных и других клиентских плееров
- управление вращением, масштабом и перемещением в реальном времени
Продукт поддерживает и недорогие веб-камеры, и профессиональные студийные камеры, удаление фона, облачное хранение и доставку, простое встраивание в существующие сайты и приложения.
Система должна была дать ощущение непосредственного присутствия в видео: вместо синтетического 3D-мира использовались реальные записи камер, а пользователь в любой момент выбирал нужный ракурс.
Как это работало на практике
Главная сложность состояла в том, чтобы множество независимых видеопотоков воспринимались как единый объект.
Камеры вокруг объекта записывали материал с одинаковыми настройками. Затем записи обрабатывались в специальный контейнер и воспроизводились с возможностью быстро переключать точки обзора. Стоило синхронизации разойтись или доступу к произвольному месту замедлиться — эффект сразу разрушался. При быстром движении были заметны даже небольшие расхождения во времени.
Поэтому нужно было одновременно решить несколько сложных задач:
- настройку и калибровку камер
- синхронную запись
- эффективное хранение множества потоков
- быструю перемотку и переключение камер
- воспроизведение на разных клиентских платформах
Моя роль
Я был ведущим и единственным разработчиком настольных приложений в стартапе.
Отвечал за инструменты, которые обеспечивали весь процесс производства. Все свои приложения я создал с нуля. Среди них — три приложения для Windows на C# и .NET Framework 4.5, сданные в срок:
- плеер специального формата интерактивного видео
- приложение управления записью с 32 камер
- редактор и транскодер для обрезки и переработки записей
Также я создал отдельный плеер для macOS. Для этого пришлось выучить Objective-C и написать нативное настольное приложение.
Другие участники команды занимались приложениями iOS и Android, веб-плеером, оборудованием и серверной частью.
Использованные технологии
C# (.NET Framework 4.5), Objective-C, WPF, VLC, FFMPEG
Плеер для Windows
Первым крупным приложением стал плеер для Windows, который открывал специальный видеофайл с множеством потоков. Пользователь переключался между камерами и словно перемещался вокруг сцены, пока видео продолжало воспроизводиться.
Приложение использовало перечисленные выше технологии и связанную с ними цепочку обработки медиа.
Сложность заключалась не только в декодировании: нужно было спроектировать формат и способ доступа так, чтобы интерактивная навигация оставалась плавной.
При 16 отдельных потоках 4K размер файлов быстро становился огромным: минута видео могла занимать 3–4 ГБ. Мы многократно перерабатывали структуру файла и размещение данных. Требовалась быстрая перемотка, но и объём хранения должен был оставаться разумным.
Мы долго настраивали обработку видео, особенно расположение ключевых кадров в FFMPEG. Баланс был непростым:
- слишком много ключевых кадров — огромные файлы
- слишком мало — неудобная перемотка и переключение ракурсов
- неудачная структура контейнера — медленный произвольный доступ
Потребовалось несколько этапов оптимизации, но именно это превращало техническую демонстрацию в удобный продукт.
Позже я сделал версию для macOS. Неожиданно перемотка тех же файлов там работала до 10 раз быстрее, чем в Windows, и на практике плеер для macOS оказался даже приятнее.
Приложение управления записью
Второе приложение управляло записью.
Оно одновременно показывало до 32 камер. Операторы могли настроить параметры каждой камеры, проверить конфигурацию, а затем запускать и контролировать запись всей установки.
В приложении активно использовалась многопоточность.
Самой сложной задачей была синхронная съёмка. В теории все камеры должны начать запись одновременно. На практике мы наблюдали расхождения до 100 мс, из-за которых при активном движении изображение заметно прыгало вперёд и назад.
Такая ошибка разрушала интерактивный эффект. После многочисленных экспериментов мы добились более строгого единообразия настроек и запуска камер. При одинаковой конфигурации и одновременном старте в контролируемых условиях синхронизация стала приемлемой для рабочего процесса.
Это был наглядный пример зависимости качества программы от поведения оборудования и дисциплины эксплуатации.
Редактор и транскодер
Затем я создал третье приложение для открытия и редактирования многопоточных файлов.
Оно позволяло:
- открыть файл со всеми потоками
- воспроизвести его
- вырезать неудачные фрагменты
- перекодировать результат в другие разрешения
Редактор был построен на том же настольном стеке, что и остальные инструменты проекта.
Снаружи он выглядел проще приложения записи, но внутри оставалась та же сложность: множество связанных видеопотоков должны сохранять целостность при воспроизведении, обрезке и перекодировании.
Чем запомнился проект
Все три настольных приложения были завершены и сданы вовремя. Команда была дружелюбной.
Проект сочетал смелую продуктовую идею и низкоуровневые инженерные задачи: интерфейсы, воспроизведение медиа, многопоточность, проектирование формата файлов, компромиссы кодирования, синхронизацию и ограничения реального оборудования.
К сожалению, стартап продали, и он ещё несколько раз сменил владельцев. Но это был отличный опыт и один из проектов, которые я до сих пор вспоминаю с большим интересом.