실시간 영상 로깅 방법

소개

실시간 로깅을 통해 동일한 프로젝트의 모든 디바이스에서 생성되는 C2C 에셋에 대해, 미디어가 세트에서 기록되는 동안 그리고 Frame.io에 등록되기 전에 디바이스에서 코멘트, 에셋 상태, 기타 데이터를 등록할 수 있습니다.

비디오 빌리지에서 피드를 보며 배우가 훌륭한 연기를 펼칠 때마다 버튼을 누르는 감독이나, 모든 에셋에 슬레이트 타격 지점을 표시할 수 있는 스마트 슬레이트를 상상해 보세요.

무엇이 필요할까요?

C2C 구현: 설정 가이드를 읽지 않으셨다면, 다음으로 넘어가기 전에 빠르게 살펴보세요! 하드웨어 디바이스 또는 C2C 애플리케이션 인증 및 권한 부여 가이드 중에 받은 access_token이 필요합니다.

타임코드 요구 사항

실시간 로깅 이벤트를 에셋과 정렬하기 위해, 캡처되는 에셋과 로깅에 사용되는 디바이스가 모두 잼 싱크(jam-sync) 또는 젠록(gen-lock)되어 있어야 합니다. 그런 다음 녹화 디바이스와 로깅 디바이스 모두 타임코드를 백엔드로 전송해야 하며, 저희는 이곳에서 타임코드 동기화 작업을 수행하여 로깅 이벤트를 올바른 프레임과 정렬합니다.

입력 구성 설정

실시간 로깅은 데이터 모델의 새로운 개념인 입력을 기반으로 작동합니다. 입력은 Frame.io로 데이터를 전송하도록 구성할 수 있는 디바이스의 물리적 버튼을 나타냅니다. 먼저 이러한 종류의 작업을 허용할 버튼의 개수를 결정한 다음, 각 버튼에 0부터 시작하는 인덱스를 할당해야 합니다. 이 인덱스는 이벤트가 저희 서버로 전송될 때 어떤 버튼을 눌렀는지 식별하는 데 사용됩니다. 입력은 채널에 직접 속하므로, 각 버튼 누름 메시지는 특정 채널 엔드포인트를 타깃으로 해야 합니다. 채널에 대한 자세한 내용은 [채널 관리 가이드]를 참조하세요.

각 버튼의 기능 구성은 사용자가 Frame.io의 UI를 통해 처리하므로 통합을 최대한 단순하게 유지할 수 있습니다. 버튼/트리거 등을 구성할 수 있는 경우, 버튼을 “Frame.io action”으로 할당할 수 있는 것 외에 귀하의 측에서 특별한 UI 기능을 제공할 필요는 없습니다.

저희는 귀하와 협력하여 디바이스의 각 입력에 대해 다음 구성을 결정할 것입니다.

  • Index: 입력을 식별하는 데 사용되는 0부터 시작하는 정수입니다.
  • Display name: Frame.io의 구성 화면에서 사용자에게 표시될 입력의 이름입니다.
  • Supported actions: 현재 지원되는 유일한 작업 유형은 “single press”이지만, 향후 “long press” 또는 “double press”와 같은 추가 작업 유형을 허용하여 각 입력이 서로 다른 의미를 지닌 여러 작업을 지원하도록 할 수 있습니다.
  • Button color: 버튼에 연결된 색상이 있는 경우, 사용자가 디바이스의 입력 설정을 구성할 때 방향을 잡는 데 도움이 되도록 이를 표시할 수 있습니다.
  • Default event type: 이 입력이 기본적으로 생성하는 이벤트 유형입니다.
  • Comment: 이 입력은 코멘트를 생성합니다

  • Status: 이 입력은 에셋 상태를 업데이트합니다

  • Default comment text: 이 입력으로 생성된 코멘트에 사용해야 하는 기본 텍스트입니다
  • Default status: 이 입력이 상태에 사용될 때 에셋을 업데이트할 기본 상태입니다. 다음과 같을 수 있습니다.
  • 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

성공 시 빈 payload와 함께 204를 받게 됩니다. URL 매개변수

  • channel_id: 이 입력이 등록된 채널의 UUID입니다. 이 ID는 채널 생성 호출 또는 identity 엔드포인트에서 수신됩니다.
  • input_index: 호출을 수행하는 입력의 인덱스입니다

JSON 본문

  • action_type: 수행할 작업의 유형입니다. 현재 지원되는 유일한 작업은 single_press입니다.
  • offset: 이벤트를 로깅할 에셋의 시작 지점으로부터의 오프셋입니다.
  • start: 입력이 트리거된 시점의 SMPTE 타임코드 + 프레임 속도로 표시되는 시작 시간입니다.
  • smpte_timecode: SMPTE 문자열로 표현되는 타임코드입니다. - rate: 타임코드 스트림의 프레임 속도입니다. - playback: 배열 내에서 [분자, 분모] 쌍으로 표현되는 프레임 속도의 재생 속도입니다. 선택 사항으로, 이 필드는 문자열 형식의 분수(&quot;numerator/denominator&quot;)도 허용합니다. 23.98과 같은 NTSC 프레임 속도는 완전한 유리수 값인 [24000, 1001]로 전송해야 합니다. - ntsc 타임코드의 NTSC 표준입니다. “non_drop&quot; 또는 null일 수 있습니다. null인 경우 playback[24, 1]과 같은 정수 값을 나타내야 합니다. &quot;non_drop&quot;인 경우 playback[24000, 1001]과 같은 유효한 NTSC 프레임 속도를 나타내야 합니다.
  • duration: 입력이 트리거된 시점의 SMPTE 타임코드 + 프레임 속도로 표현되는 이벤트의 지속 시간입니다. start와 동일한 오브젝트 정의를 따릅니다. single_press 이벤트의 경우 정확히 1프레임(&quot;01:00:00:00&quot;)이어야 합니다.

안정성 요구 사항

실시간 업로드 트리거는 업로드와 동일한 안정성 지침을 적용해야 하며 디바이스 일시 중지 상태를 존중해야 합니다.

다음 단계

아직 연락하지 않으셨다면 저희 팀에 문의하신 후 다음 가이드를 계속 진행하시기 바랍니다. 여러분의 연락을 기다리겠습니다!