方法:リアルタイムでの映像のロギング

はじめに

デバイスでリアルタイムロギングを使用すると、セットでのメディア録画中、そのメディアが Frame.io に登録される前に、同じプロジェクト内の任意のデバイスによって生成されている C2C アセットについて、コメントやアセットステータスなどのデータを記録できます。

監督がモニター席でフィードを見ており、俳優が優れた演技をしたときにボタンを押すことができる状況、あるいはすべてのアセットについてクラップポイントをマークできるスマートスレートがある状況を想像してみてください。

必要なもの

C2C の実装:セットアップガイドをまだ読んでいない場合は、目を通してから先へ進んでください。

ハードウェアデバイスまたは C2C アプリケーションの認証および承認ガイドで受け取った access_token が必要です。

タイムコード要件

リアルタイムのロギングイベントをアセットに合わせるため、キャプチャされるアセットとロギングに使用されるデバイスの両方がジャムシンクまたはゲンロックされていることを想定しています。録画デバイスとロギングデバイスの両方が、タイムコードをバックエンドに送信すると、バックエンドがタイムコード同期処理を実行して、ロギングイベントを正しいフレームに合わせます。

入力構成のセットアップ

リアルタイムロギングは、データモデルの新概念である入力に基づいて動作します。入力は、Frame.io にデータを送信するように設定できるデバイス上の物理ボタンを表します。最初に決定する必要があるのは、このような操作を実行できるボタンの数です。そのうえで、各ボタンに 0 から始まるインデックスを割り当てます。このインデックスは、イベントがサーバーに送信された際にどのボタンが押されたかを識別するために使用されます。入力はチャネルに直接属しているので、ボタン押下メッセージはそれぞれ特定のチャネルエンドポイントをターゲットにする必要があります。チャネルの詳細については、チャネル管理ガイドを参照してください。

各ボタンの動作は Frame.io の UI を介してユーザーが設定するので、統合は可能な限りシンプルになります。ボタンやトリガーなどが設定可能であれば、ボタンを「Frame.io アクション」に割り当てられること以外、特別な UI 機能は不要です。

当社では、お客様と協力して、デバイスの各入力について次の設定を決定します。

  • インデックス:入力の識別に使用される 0 から始まる整数。
  • 表示名:Frame.io の設定画面でユーザーに表示される入力の名前。
  • サポートされているアクション:現在のアクションタイプは「1 回押し」のみですが、将来的には、「長押し」や「2 回押し」などのアクションタイプを追加して、各入力で異なる意味を持つ複数のアクションをサポートできるようにする可能性があります。
  • ボタンのカラー:ボタンに関連付けられたカラーがある場合は、ユーザーが把握しやすくなるよう、デバイスの入力設定の指定でそのカラーを表示できます。
  • デフォルトイベントタイプ:この入力がデフォルトで生成するイベントのタイプです。
    • コメント:この入力がコメントを生成
    • ステータス: この入力がアセットステータスを更新
  • デフォルトコメントテキスト:この入力によって生成されるコメントで使用されるデフォルトテキスト。
  • デフォルトステータス:この入力がステータスに使用されている場合にアセットの更新に適用されるデフォルトステータス。次のいずれかです。
    • 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。この ID はチャネル作成呼び出しまたは identity エンドポイントから返されます。
  • input_index:呼び出しを行う入力のインデックス。

JSON 本文

  • action_type:実行するアクションのタイプ。現在サポートされているアクションは single_press のみです。

  • offset:イベントをログに記録するアセットの、開始からのオフセット。

  • start:開始時間。SMPTE タイムコード + 入力がトリガーされたときのフレームレートで表されます。

    • smpte_timecode:SMPTE 文字列として表されるタイムコード。
    • rate:タイムコードストリームのフレームレート。
      • playback:フレームレートの再生速度。[numerator, denominator] ペアとして配列で表されます。オプションで、文字列形式の分数 "numerator/denominator" も入力できます。23.98 のような NTSC フレームレートは、次のような完全な有理数値として送信する必要があります:[24000, 1001]
      • ntsc:タイムコードの NTSC 規格。“non_drop" または null が可能です。null の場合、playback[24, 1] などの整数を表す必要があります。"non_drop" の場合、playback[24000, 1001] などの有効な NTSC フレームレートを表す必要があります。
  • duration:イベントの継続時間。SMPTE タイムコード + 入力がトリガーされたときのフレームレートで表されます。start と同じオブジェクト定義に準拠します。single_press の場合、イベントは正確に 1 フレーム("01:00:00:00")であることが必要です。

信頼性要件

リアルタイムアップロードトリガーには、アップロードと同じ信頼性ガイドラインを適用し、デバイスの一時停止ステータスを考慮する必要があります。

次のステップ

まだの場合は、当社チームにお問い合わせください。そのうえで、次のガイドに進んでください。ご連絡をお待ちしております。