Практическое руководство: ведение журнала отснятых материалов в реальном времени

Введение

Ведение журнала в реальном времени позволяет устройствам записывать комментарии, состояние ресурсов и другие данные во время записи медиафайлов на съемочной площадке, еще до их регистрации в Frame.io, для любых ресурсов C2C, создаваемых любым устройством в том же проекте.

Представьте режиссера, который смотрит видеопоток в Video Village и может нажать кнопку, когда актер хорошо играет, или «умную» хлопушку, которая может отмечать точку хлопка на всех ресурсах.

Что потребуется?

Если вы еще не читали руководство Реализация C2C: настройка, просмотрите его перед тем, как продолжить! Вам понадобится access_token, который вы получили в процессе аутентификации и авторизации оборудования или приложения C2C.

Требования к таймкоду

Чтобы сопоставить события ведения журнала в реальном времени с ресурсами, записываемый ресурс и устройство, используемое для регистрации, должны быть синхронизированы по времени с помощью jam-sync или gen-lock. Записывающее устройство и устройство, на котором ведется журнал, будут отвечать за отправку таймкода в наш сервер, где мы выполним синхронизацию таймкода, чтобы сопоставить событие регистрации с правильным кадром.

Настройка входных конфигураций

Ведение журнала в реальном времени работает на основе новой концепции в модели данных: входы. Вход представляет собой физическую кнопку на вашем устройстве, которую можно настроить для отправки данных в Frame.io. Первое, что нужно решить — это количество кнопок, которым вы разрешите выполнять подобные операции, затем назначить индекс, начиная с 0, каждой кнопке. Этот индекс будет использоваться для определения того, какая кнопка нажата при отправке события на наши серверы. Входы напрямую относятся к каналам, поэтому каждое сообщение о нажатии кнопки должно быть направлено на конкретную конечную точку канала. Подробнее о каналах см. в [руководстве по управлению каналами].

Настройка того, что делает каждая кнопка, обрабатывается пользователем через пользовательский интерфейс Frame.io, что делает интеграции максимально простыми. От вас не потребуется никаких специальных элементов интерфейса, кроме возможности назначить кнопку как «действие Frame.io», если ваши кнопки/триггеры/и т. д. настраиваются.

Мы будем работать с вами для определения следующей конфигурации для каждого входа вашего устройства:

  • Индекс. Целое число с индексацией от 0, которое будет использоваться для определения входа.
  • Отображаемое имя. Имя входа, которое будет показываться пользователю на экране конфигурации Frame.io.
  • Поддерживаемые действия. В настоящее время единственный тип действия — «однократное нажатие», но в будущем мы можем добавить дополнительные типы действий, такие как «длительное нажатие» или «двойное нажатие», чтобы позволить каждому входу поддерживать несколько действий, каждое из которых будет иметь разное значение.
  • Цвет кнопки. Если у вашей кнопки есть определенный цвет, мы можем отобразить его, чтобы помочь пользователям ориентироваться при настройке параметров входа устройства.
  • Тип события по умолчанию. Тип события, которое данный вход создает по умолчанию:

– Комментарий. Этот вход создает комментарий.

– Состояние. Вход обновляет состояние ресурса.

  • Текст комментария по умолчанию. Текст по умолчанию, который следует использовать в комментариях, создаваемых данным входом.
  • Состояние по умолчанию. Состояние по умолчанию для обновления ресурсов при использовании данного входа для состояния. Может быть:
  • in_progress - needs_review - approved

Предоставляя эту информацию заранее, мы снижаем нагрузку на ваше устройство до минимума.

Отправка события ведения журнала в реальном времени

События ведения журнала в реальном времени можно отправлять с помощью следующего вызова

${
>curl -X POST https://api.frame.io/v2/devices/channels/{channel_id}/inputs/{input_index}/trigger \
> --header 'Authorization: Bearer [access_token]' \
> --header 'Content-Type: application/json' \
> --header 'x-client-version: 2.0.0' \
> --data-binary @- <<'__JSON__'
> {
> "action_type": "single_press",
> "offset": 0,
> "start": {
> "smpte_timecode": "01:00:00:00",
> "rate": {
> "playback": [24_000, 1001],
> "ntsc": "non_drop"
> }
> },
> "duration": {
> "smpte_timecode": "00:00:00:01",
> "rate": {
> "playback": [24_000, 1001],
> "ntsc": "non_drop"
> }
> }
> }
>__JSON__
>} | python -m json.tool

При выполнении отобразится 204 с пустой полезной нагрузкой. Параметры URL

  • channel_id: UUID канала, в котором зарегистрирован данный вход. Данный ИД получен при вызове channel create или из identity endpoint.
  • input_index: индекс входа, совершающего вызов.

Тело JSON

  • action_type: тип действия для выполнения. В настоящее время поддерживается только действие single_press.
  • offset: смещение от начала ресурса для регистрации события.
  • start: время начала, представленное SMPTE timecode + частотой кадров момента запуска входа.
  • smpte_timecode: временной код, представленный как строка SMPTE. - rate: частота кадров потока временного кода. - playback: скорость воспроизведения частоты кадров, представленная как пара [numerator, denominator] в массиве. При необходимости это поле также принимает дроби в строковом формате: &quot;numerator/denominator&quot;. Частоты кадров NTSC, например 23.98, следует отправлять как их полностью квалифицированное рациональное значение: [24000, 1001]. - ntsc: стандарт NTSC временного кода. Может быть “non_drop&quot; или null. Если null, playback должно представлять целое число, например [24, 1]. Если &quot;non_drop&quot;, playback должно представлять допустимую частоту кадров NTSC, например [24000, 1001].
  • duration: продолжительность события, представленная SMPTE timecode + частотой кадров в момент запуска входа. Соответствует тому же определению объекта, что и start. Для событий single_press требуется точно 1 кадр (&quot;01:00:00:00&quot;).

Требования к надежности

Триггеры добавления в реальном времени должны применять те же рекомендации по надежности, что и операции добавления, и учитывать состояние приостановки устройства.

Далее

Если вы еще этого не сделали, рекомендуем связаться с нашей командой, а затем перейти к следующему руководству. Надеемся на скорую обратную связь!