방송의 전체 과정

소개

이 문서에서는 YouTube Live Streaming API와 YouTube Content ID API를 사용하여 만들고 관리하는 YouTube의 실시간 방송의 전체 과정을 설명합니다.

리소스 및 리소스 유형

시작하기 가이드에 설명된 대로 리소스는 고유 식별자를 갖는 개별 데이터 항목입니다. YouTube에서 실시간 이벤트를 만들고 관리하려면 YouTube Data API 또는 YouTube Content ID API의 일부로 정의된 여러 유형의 리소스를 사용합니다. YouTube Live Streaming API 헤더에 나열된 리소스는 다른 API에 기술적으로 정의되어 있지만 실시간 방송에만 사용되므로 별도로 나열됩니다.

YouTube Live Streaming API 리소스

YouTube Data API 리소스

YouTube Content ID API 리소스

실시간 방송 만들기 및 관리

다음 단계에서는 YouTube에서 실시간 이벤트를 만들고 관리하는 방법을 설명합니다. 단계는 다음과 같이 구분됩니다.

  1. 방송 설정
  2. 콘텐츠 소유권 주장
  3. 테스트
  4. 방송
  5. 방송 마무리
  6. 참조 만들기

1단계: 방송 설정

1.1단계: 방송 만들기

liveBroadcasts.insert 메서드를 호출하여 방송을 YouTube의 실시간 이벤트 일정에 추가합니다. 삽입하는 liveBroadcast 리소스는 아래 나열된 속성의 값을 정의해야 합니다.

방송을 설정할 때 다음 가이드라인을 고려하세요.

  • 방송에 테스트 단계를 적용하려면 다른 뷰어도 브로드캐스트를 볼 수 없는 상태에서 동영상 방송을 볼 수 있는 경우 contentDetails.monitorStream.enableMonitorStream 속성을 true로 설정하고 contentDetails.enableAutoStart 속성을 false로 설정해야 합니다. 두 속성의 기본값입니다.

  • 녹화된 브로드캐스트에서 참조를 만들려면 방송의 contentDetails.recordFromStart 속성을 true로 설정해야 합니다. 방송이 끝나자마자 녹화된 동영상을 재생할 수 있도록 하려면 contentDetails.enableDvr 속성도 true로 설정해야 합니다. (두 속성 모두 기본값은 true입니다.)

  • 방송 상태가 여전히 created 또는 ready라면 contentDetails 속성을 모두 업데이트할 수 있습니다.

  • 방송 상태가 created, ready 또는 testing이면 방송의 시작 시작 시간과 종료 예정 시간을 업데이트할 수 있습니다.

  • 방송의 video 리소스에 속하는 방송의 제목, 설명, 개인 정보 보호 상태 및 기타 메타데이터 필드는 언제든지 업데이트할 수 있습니다.

    참고: 특정 YouTube 사용자만 동영상을 볼 수 있도록 하려면 필요에 따라 status.privacyStatus 속성 값을 unlisted 또는 private로 설정하세요.

API 응답 처리

liveBroadcasts.insert 메서드를 호출하면 API 응답에 내가 만든 liveBroadcast 리소스가 포함됩니다. 코드는 이 리소스에서 id를 추출하고 저장해야 합니다. 이후 API 요청에서 브로드캐스트를 식별하려면 이 값이 필요합니다. 동일한 ID를 사용하여 liveBroadcast 리소스에 상응하는 video 리소스를 식별할 수도 있습니다.

1.2단계: 스트림 만들기

liveStream 리소스를 사용하면 YouTube에 동영상을 전송할 수 있으며 전송 중인 콘텐츠를 설명합니다. 각 브로드캐스트는 정확히 하나의 스트림과 연결되어야 합니다.

liveStreams.insert 메서드를 호출하여 이벤트의 동영상 스트림을 만듭니다. 스트림을 만들 때 아래 나열된 속성 값을 설정해야 합니다.

스트림 제목을 제외하고 스트림을 만든 후에는 이 값을 업데이트할 수 없습니다. 변경해야 하는 경우 이 단계를 반복하여 다른 스트림을 만들어야 합니다. 이 프로세스는 이 문서의 뒷부분에 나오는 3.5단계에서 자세히 설명합니다.

다음 속성에 대한 값을 설정할 수도 있습니다.

  • snippet.description - 스트림 제목과 마찬가지로 스트림을 만든 후 스트림 설명을 업데이트할 수 있습니다. 제목과 설명은 YouTube 사용자에게 표시되지 않습니다.
  • contentDetails.isReusable - 스트림을 재사용할 수 있는지 여부를 나타냅니다. 즉, 여러 브로드캐스트에 바인딩될 수 있습니다. 이 속성의 값은 liveBroadcast 리소스와 liveStream 리소스 간에 채널이 일대다 관계인지 일대일 관계인지를 효과적으로 결정합니다.

    • 속성의 기본값인 true를 사용하면 채널의 모든 방송에 동일한 liveStream 리소스를 사용할 수 있습니다. 즉, 모든 브로드캐스트에 이 단계 (1.2)를 반복할 필요가 없습니다. 대신 후속 방송에 스트림 ID를 재사용할 수 있습니다.
    • 속성 값을 false로 설정하면 각 방송에 대해 새 스트림을 만들어야 합니다.

API 요청을 스트림을 실행하면 API 응답에 내가 만든 liveStream 리소스가 포함됩니다. 코드는 이 리소스에서 id를 추출하고 저장해야 합니다. 향후 API 요청에서 스트림을 식별하려면 이 값이 필요합니다.

1.3단계: 방송을 스트림에 연결

liveBroadcastliveStream 리소스를 만들었으면 이제 liveBroadcasts.bind 메서드를 사용하여 두 리소스를 연결해야 합니다. 이 작업은 YouTube에 전송할 동영상 비트를 해당 동영상의 이벤트 브로드캐스트와 연결합니다.

liveBroadcasts.bind 메서드를 호출할 때 id 매개변수를 1.1단계에서 얻은 방송 ID로 설정하고 streamId 매개변수를 1.2단계에서 얻은 스트림 ID로 설정합니다.

2단계: 콘텐츠 소유권 주장

방송 중에 광고를 표시하려면 이벤트가 시작되기 전에 방송 동영상의 소유권을 주장해야 합니다. 다음 단계에서는 이 프로세스를 설명합니다. 이 단계에서 설명하는 모든 API 호출은 YouTube Content ID API에 정의되어 있습니다.

2.1단계: 저작물 만들기

asset 리소스는 지적 재산을 나타냅니다. 이 경우 방송이 저작물입니다. assets.insert 메서드를 호출하여 애셋을 만듭니다.

API 응답에는 내가 만든 asset 리소스가 포함됩니다. 코드를 통해 해당 리소스에서 id를 추출하고 저장해야 하며 이 값은 향후 API 요청에서 애셋을 식별하기 위해 필요합니다.

2.2단계: 저작물의 소유권 정의

저작물의 소유권 데이터는 저작물의 소유자와 저작물을 소유한 지역을 식별합니다. YouTube는 이 데이터를 사용하여 소유자가 소유권 주장이 제기된 동영상에 대한 정책을 설정할 수 있는 위치를 결정합니다.

예를 들어 미국에서 이벤트를 방송할 권리가 있고 다른 방송사가 캐나다에 대한 동일한 권리를 소유하는 경우 각각 방송 동영상과 방송 동영상과 일치하는 사용자 업로드 동영상에 서로 다른 정책을 정의할 수 있습니다. 동영상 일치 관련 정책은 미국에서 일치하는 사용자 업로드 동영상에 적용되지만 다른 소유자의 정책은 캐나다에서 일치하는 동영상에 적용됩니다.

저작물의 소유권 지역을 정의하려면 ownership.update 메서드를 호출합니다. 이 요청에서 assetId 매개변수를 2.1단계에서 저장한 id로 설정합니다.

2.3단계: 저작물의 동영상 일치 관련 정책 설정

저작물의 동영상 일치 관련 정책은 사용자가 저작물과 연결된 참조와 일치하는 동영상을 업로드할 때 YouTube에서 취해야 할 조치를 설명합니다. 이 경우 동영상 일치 관련 정책은 YouTube가 실시간 방송과 일치하는 업로드된 동영상을 처리하는 방법을 나타냅니다.

참고: 방송 동영상에서 참조를 만들고 해당 참조를 사용하여 방송과 일치하는 사용자 업로드 동영상을 식별하려면 동영상 일치 관련 정책을 설정해야 합니다. 그 외의 경우에는 이 단계를 건너뛸 수 있습니다.

동영상 일치 관련 정책을 설정하려면 먼저 적용할 정책을 식별해야 합니다. policies.list 메서드를 호출하여 기존 정책 목록을 검색하거나 policies.insert 메서드를 호출하여 새 정책을 정의할 수 있습니다. 두 경우 모두 적용하려는 정책의 id를 캡처해야 합니다.

정책을 확인한 후 assetMatchPolicy.update 메서드를 호출합니다. 이 요청에서 assetId 매개변수를 2.1단계에서 저장한 id로 설정합니다.

2.4단계: 동영상 소유권 주장

이 단계에서는 2.1단계에서 만든 저작물에 브로드캐스팅할 동영상을 연결하는 소유권 주장을 만듭니다. 소유권 주장은 방송 동영상에만 적용되는 정책을 설정합니다. (브로드캐스트 동영상과 일치하는 사용자 업로드 동영상에는 이전 단계에서 설정한 동영상 일치 관련 정책이 적용됩니다.)

클레임을 만들려면 claims.insert 메서드를 호출합니다. 삽입하는 claim 리소스에서 다음 속성 값을 설정해야 합니다.

  • assetId: 2.1단계에서 얻은 값입니다.
  • videoId: 1.1단계에서 얻은 방송 ID입니다.
  • policy - policy 리소스입니다. 해당 리소스의 id 속성을 기존 정책의 ID로 설정하여 기존 정책을 적용할 수 있습니다. 이전 단계에서는 기존 정책의 ID를 검색하는 방법을 설명했습니다.
  • contentType – 이 값을 audiovisual로 설정합니다.

API 응답 처리

클레임을 삽입하면 API 응답에 내가 만든 claim 리소스가 포함됩니다. 코드는 이 리소스에서 id를 추출하고 저장해야 합니다. 나중에 이 값을 사용하여 처리된 동영상에서 참조를 만듭니다.

2.5단계: 방송의 광고 설정 업데이트

시청자가 방송을 보기 시작할 때 프리롤 광고를 실행하거나 방송 중단에 광고를 게재하려면 동영상에 광고 옵션을 설정해야 합니다.

  • 방송에 프리롤 광고를 사용 설정하면 모든 시청자가 방송 중간부터 보기 시작해도 방송을 보기 시작할 때 광고가 표시됩니다.
  • 방송에 미드롤 광고를 사용 설정하면 방송 중에 광고 큐 포인트를 삽입할 수 있습니다.

광고를 사용 설정하려면 videoAdvertisingOptions.update 메서드를 호출합니다. 요청에서 videoId 매개변수를 1.1단계에서 가져온 브로드캐스트 id로 설정합니다. videoAdvertisingOption 리소스의 adFormats[] 속성을 사용하여 사용 설정할 광고 형식 (preroll, midroll, postroll)을 식별합니다.

3단계: 테스트

이 단계에서는 시청 환경을 테스트할 수 있도록 방송용 모니터 스트림을 표시하는 플레이어를 삽입합니다. 모니터 스트림은 방송 동영상을 YouTube 시청자에게 표시되는 대로 미리 볼 수 있는 비공개 스트림입니다.

모니터링 스트림이 사용 설정된 경우에만 동영상 방송을 테스트할 수 있습니다. 기본적으로 방송의 모니터 스트림은 사용 설정되어 있습니다. 방송을 만들거나 업데이트할 때 contentDetails.monitorStream.enableMonitorStream 속성을 false로 설정하여 방송의 모니터 스트림을 사용 중지할 수 있습니다.

3.1단계: 모니터 스트림 플레이어 삽입

liveBroadcasts.list 메서드를 사용하여 브로드캐스트를 검색하고 contentDetails.streamDetails.monitorStreamEmbedHtml 속성 값을 추출합니다. 이 값에는 모니터 스트림을 표시하는 YouTube 플레이어를 삽입해야 하는 HTML이 포함됩니다.

3.2단계: 동영상 재생

동영상을 동영상 스트림에 전송하기 시작합니다.

3.3단계: 동영상 스트림 활성화 확인

liveStreams.list 메서드를 호출하여 브로드캐스트와 연결된 liveStream 리소스를 검색합니다. status.streamStatus 속성의 값이 active인지 확인합니다. 이는 YouTube 서버가 인코더에서 데이터를 올바르게 수신하고 있음을 나타냅니다.

3.4단계: 방송 상태를 테스트로 전환

liveBroadcasts.transition 메서드를 호출하여 브로드캐스트 상태를 업데이트합니다. id 매개변수 값을 1.1단계에서 얻은 방송 ID로 설정하고 broadcastStatus 매개변수 값을 testing로 설정합니다.

liveBroadcasts.transition 메서드를 호출한 후 전환이 완료되는 데 몇 초 또는 최대 1 분이 걸릴 수 있습니다. 그 동안 API를 폴링하여 방송 상태를 확인해야 합니다. 전환이 완료될 때까지 방송 상태는 testStarting이 됩니다. 전환이 완료되면 상태가 testing가 됩니다.

3.5단계: 테스트 완료g

테스트가 순조롭게 진행되었다면 4단계로 이동할 수 있습니다. 그러나 경우에 따라 추가적인 테스트가 필요할 수 있습니다. 예를 들어 테스트 결과 동영상 스트림이 올바르게 구성되지 않은 것으로 확인되면 이 문제를 해결해야 방송을 진행할 수 있습니다.

동영상 스트림이 올바르게 구성되지 않은 경우 기존 스트림의 연결을 해제 (및 삭제)하고 새 스트림을 만들어야 합니다. 예를 들어 스트림이 잘못된 동영상 형식을 지정하는 경우 올바르게 구성되지 않을 수 있습니다.

  1. 동영상 스트림을 바인딩 해제하려면 1.3단계의 liveBroadcasts.bind 메서드를 호출합니다. API 요청에서 id 매개변수를 1.1단계에서 얻은 id로 설정합니다. 요청에 streamId 매개변수를 포함하지 마세요.

  2. 동영상 스트림을 삭제하려면 liveStreams.delete 메서드를 호출합니다. 요청에서 id 매개변수를 1.2단계에서 얻은 id로 설정합니다.

  3. 1.2단계를 반복하여 올바르게 구성된 새 liveStream 리소스를 만듭니다. 그런 다음 1.3단계를 반복하여 새 스트림을 브로드캐스트에 결합하고 3.1~3.3단계를 반복하여 새 스트림을 테스트합니다.

3.6단계: autoStartautoStop 속성 사용 설정

테스트 단계를 성공적으로 완료하면 실제 브로드캐스트가 시작되기 전에 브로드캐스트의 contentDetails.enableAutoStartcontentDetails.enableAutoStop 속성을 true로 설정할 수 있습니다. 이러한 속성은 테스트에서 실제로 브로드캐스트를 시작하게 되므로 테스트 단계 전에 true로 설정할 수 없습니다.

4단계: 방송

이 단계에서 잠재고객이 방송 동영상을 시청할 수 있게 됩니다.

4.1단계: 동영상 시작

동영상을 동영상 스트림에 전송하기 시작합니다.

4.2단계: 동영상 스트림이 활성화되어 있는지 확인하기

liveStreams.list 메서드를 호출하여 브로드캐스트와 연결된 liveStream 리소스를 검색합니다. status.streamStatus 속성의 값이 active인지 확인합니다. 이는 YouTube 서버가 인코더에서 데이터를 올바르게 수신하고 있음을 나타냅니다.

4.3단계: 방송 상태를 라이브로 전환

중요: 이 단계에서 동영상이 시청자에게 표시됩니다.

liveBroadcasts.transition 메서드를 호출하여 브로드캐스트 상태를 업데이트합니다. id 매개변수 값을 1.1단계에서 얻은 방송 ID로 설정하고 broadcastStatus 매개변수 값을 live로 설정합니다.

liveBroadcast 리소스의 contentDetails.enableAutoStart 속성을 true로 설정하면 liveBroadcasts.transition 메서드를 호출하지 않아도 됩니다.

이 API를 호출한 후(또는 contentDetails.enableAutoStart 속성을 true로 설정한 경우) 스트리밍을 시작한 후 전환이 완료될 때까지 일반적으로 5~10초 정도 기다려야 합니다. 전환하는 데 최대 1분이 걸릴 수 있습니다. 그 동안 API를 폴링하여 브로드캐스트 상태를 확인해야 합니다. 전환이 완료될 때까지 방송 상태는 liveStarting이 됩니다. 전환이 완료되면 상태가 live가 되며 이 시점부터 시청자가 모니터 스트림에서 방송을 시청할 수 있습니다.

이 명령에 해당하는 다음의 효과를 참고하시기 바랍니다.

  • 방송에 모니터 스트림을 사용 설정한 경우(3.1단계 참고) 삽입된 플레이어에서 모니터 스트림을 볼 수 있습니다.
  • 방송의 contentDetails.streamDetails.broadcastStreamDelayMs 속성 값을 설정한 경우 다른 시청자에게 표시되는 방송 스트림이 지정한 시간만큼 지연됩니다.

4.4단계: 방송에 광고 시점 삽입

liveBroadcasts.cuepoint 메서드를 호출하여 큐 시점을 삽입합니다. 큐 포인트가 광고 시점을 트리거할 수 있습니다. 요청 본문에 제공된 cuepoint 리소스에서 durationSecs 속성을 표시할 광고 시점의 원하는 길이 (초)로 설정합니다. 기본값은 30입니다.

현재 YouTube에서는 광고 큐 시점이 삽입될 때 방송을 보고 있던 시청자를 대상으로 동영상 플레이어에서 광고를 재생하려고 합니다. 광고 재생 여부는 광고 게재 가능 여부, 시청자의 광고 시청 기록 등 다양한 요인에 따라 달라집니다. 광고 시점을 수신한 시청자는 광고 시점이 끝날 때 방송으로 돌아가지만 광고를 보지 않은 시청자는 광고 시간 동안 계속 방송 스트림을 봅니다.

시작하기 가이드는 실시간 방송의 광고 시점 동안의 시청 환경에 대해 자세히 설명합니다.

5단계: 방송 종료

5.1단계: 스트리밍 중지하기

YouTube 방송 시스템의 테스트가 종료됩니다.

5.2단계: 방송 상태를 전환하여 완료

방송을 중지할 준비가 되면 API의 liveBroadcasts.transition 메서드를 호출하여 방송 상태를 업데이트합니다. id 매개변수 값을 1.1단계에서 얻은 방송 ID로 설정하고 broadcastStatus 매개변수 값을 complete로 설정합니다.

방송의 contentDetails.recordFromStartcontentDetails.enableDvr 속성을 true로 설정한 경우 실시간 이벤트가 끝나면 잠재고객은 즉시 실시간 이벤트 재생을 시청할 수 있습니다.

6단계: 참조 만들기

실시간 녹화가 완료되면 녹화된 동영상에서 참조를 만들 수 있습니다. 이 작업은 방송과 일치하는 사용자 업로드 동영상을 찾아 2.3단계에서 설정한 동영상 일치 관련 정책에 따라 처리하도록 YouTube에 지시합니다.

중요: 참조를 만들려면 방송의 contentDetails.recordFromStart 속성을 true로 설정해야 합니다.

6.1단계: 동영상 상태 관련 YouTube Data API 폴링

YouTube에서 방송 또는 업로드된 동영상 처리를 완료해야 동영상에서 참조를 만들 수 있습니다. 동영상 처리가 완료되었는지 확인하려면 YouTube Data API의 videos.list 메서드를 폴링하고 part 매개변수를 status로, id 매개변수를 1.1단계에서 저장한 브로드캐스트 ID로 설정합니다.

폴링 요청에 대한 API 응답에는 video 리소스가 포함됩니다. 해당 리소스의 status.uploadStatus 속성 값이 processed이면 6.2단계로 진행합니다.

6.2단계: 처리된 동영상에서 참조 만들기

참조를 만들려면 Content ID API의 references.insert 메서드를 호출하고 claimId 매개변수를 2.4단계에서 저장한 소유권 주장 ID로 설정합니다.

실시간 Content ID 전송

일부 YouTube 파트너는 방송이 testing 상태로 전환되기 전에 참조를 만들 수 있지만 이 기능은 일부 파트너에게만 제공됩니다. 이 흐름에서 방송이 진행되는 동안 YouTube는 실시간 이벤트의 방송 스트림에서 참조를 생성하고 지속적으로 업데이트합니다. 또한 방송이 진행 중일 때 사용자가 업로드한 동영상 중 일치하는 동영상이 있는지 찾습니다. 브로드캐스트가 시작되기 전에 참조를 만들면 자동으로 녹화가 사용 설정되며, 참조를 만든 후에는 녹화를 사용 중지할 수 없습니다.

실시간 Content ID 전송에 방송을 사용 설정하려면 2.4단계에서 동영상 소유권 주장을 완료한 후 6.2단계에서 설명한 작업을 시도해 보세요. 방송이 시작되기 전에 파트너 계정에서 실시간 방송의 참조를 만들 수 있도록 승인되지 않은 경우 API에서 fingerprintingNotAllowed 오류를 반환합니다. 이 경우 참조를 만들기 전에 위의 6.1 및 6.2 단계에 설명된 대로 브로드캐스트가 완료될 때까지 기다려야 합니다.