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 мс, из-за которых при активном движении изображение заметно прыгало вперёд и назад.

Такая ошибка разрушала интерактивный эффект. После многочисленных экспериментов мы добились более строгого единообразия настроек и запуска камер. При одинаковой конфигурации и одновременном старте в контролируемых условиях синхронизация стала приемлемой для рабочего процесса.

Это был наглядный пример зависимости качества программы от поведения оборудования и дисциплины эксплуатации.

Редактор и транскодер

Затем я создал третье приложение для открытия и редактирования многопоточных файлов.

Оно позволяло:

  • открыть файл со всеми потоками
  • воспроизвести его
  • вырезать неудачные фрагменты
  • перекодировать результат в другие разрешения

Редактор был построен на том же настольном стеке, что и остальные инструменты проекта.

Снаружи он выглядел проще приложения записи, но внутри оставалась та же сложность: множество связанных видеопотоков должны сохранять целостность при воспроизведении, обрезке и перекодировании.

Чем запомнился проект

Все три настольных приложения были завершены и сданы вовремя. Команда была дружелюбной.

Проект сочетал смелую продуктовую идею и низкоуровневые инженерные задачи: интерфейсы, воспроизведение медиа, многопоточность, проектирование формата файлов, компромиссы кодирования, синхронизацию и ограничения реального оборудования.

К сожалению, стартап продали, и он ещё несколько раз сменил владельцев. Но это был отличный опыт и один из проектов, которые я до сих пор вспоминаю с большим интересом.