이 페이지는 이동했습니다. 3초 후에 새 위치 로 이동합니다. 북마크를 업데이트하세요!

브라이트코브 라이브 API: 서버 측 광고 삽입 (SSAI)

이 항목에서는 라이브 스트림 작업에 대해 서버 측 광고 삽입 (SSAI를) 설정하는 방법을 보여 줍니다.

개요

SSAI라이브 스트리밍 이벤트 중에 지정된 시간에 광고를 표시 할 수 있습니다. 주요 기능은 다음과 같습니다.

  • 인코더에서 전송된 큐 포인트를 사용하여 광고를 삽입하거나Live API
  • '슬레이트' 자산을 수집하여 사용하지 않는 광고 시간을 메우세요
  • 서버 측의 실시간 스트림에 연결된 광고로 광고 차단기를 피하십시오.

서버 측 광고로 라이브 스트림을 만들려면 다음 단계를 따르세요.

  1. Live API에 대한 일반 정보 검토
  2. 라이브 광고 구성 만들기 . 당신은 또한 이것을 할 수 있습니다비디오 클라우드 스튜디오 . Live API를 사용한 광고 구성 관리에 대한 자세한 내용은 아래 섹션을 참조하세요.
  3. 슬레이트 자산 만들기 . UI를 선호하는 경우 다음을 수행 할 수 있습니다. Studio에서 슬레이트 관리 .
  4. 선택사항: 큐 포인트 및 광고 비콘 삽입 .
  5. 이제 준비가되었습니다. Live API를 사용하여 라이브 스트림 만들기 . Studio를 선호하는 경우 다음을 수행 할 수 있습니다. 라이브 모듈에서 서버 측 광고 구현

맞춤 헤더, 광고 구성 변수, DFP 및 광고 매크로 사용에 대한 자세한 내용은이 문서의 나머지 부분을 참조하세요.

일반 정보

다음 정보는 SSAI 요청이있는 모든 Live API에 적용됩니다.

기본 URL

SSAI를 사용하는 Live API의 기본 URL은 다음과 같습니다.

    https://api.bcovlive.io/v1/ssai

인증

요청 인증에는 API 키가있는 헤더가 필요합니다.

    X-API-KEY: your API KEY
    

계정과 관련된 API 키를 받으려면 계정 관리자에게 문의하세요.

광고 구성 만들기

새 광고 구성을 만들려면 다음과 같이POST요청을 보냅니다.

방법 POST
URL https://api.bcovlive.io/v1/ssai/applications
머리글 X-API-KEY: your API KEY

샘플 요청 본문

    {
      "application_ad_configuration": {
        "ad_configuration_description": "Human readable description of the configuration",
        "ad_configuration_expected_response_type": "Dfp, Vast or SmartXML",
        "ad_configuration_headers": {
        "X-Custom-Header-Rand": "{{random.int32}}",
        "X-VIDEOPLAZA-FORWARDED-FOR": "{{client.ipaddress}}"
        },
        "ad_configuration_headers_for_impressions": false,
        "ad_configuration_strategy": "SingleAdResponse or MultipleAdResponse",
        "ad_configuration_transforms": [
          {
          "xpath": "/",
          "xslt": "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:Det=\"http://Det.com\"><xsl:output omit-xml-declaration=\"yes\"/><xsl:template match=\"node()|@*\"><xsl:copy><xsl:apply-templates select=\"node()|@*\"/></xsl:copy></xsl:template></xsl:stylesheet>"
          }
        ],
        "ad_configuration_url_format": "https://ad-provider-host.com/path/to/ad-handler?ip={{client.ipaddress}}&num={{random.int32}}&ses={{session.session_id}}"
      },
      "application_description": "Human readable description of the ad application",
      "account_id": "User's Account ID [Optional]"
    }

샘플 응답

    {
      "application": {
        "account_id": "User Account ID",
        "application_description": "Human readable description of the ad application",
        "application_ad_configuration": {
          "ad_configuration_description": "Human readable description of the configuration",
          "ad_configuration_expected_response_type": "Dfp | Vast | SmartXML",
          "ad_configuration_headers": {
            "X-Custom-Header-Rand": "{{random.int32}}",
            "X-VIDEOPLAZA-FORWARDED-FOR": "{{client.ipaddress}}"
          },
          "ad_configuration_headers_for_impressions": false,
          "ad_configuration_strategy": "SingleAdResponse | MultipleAdResponse",
          "ad_configuration_transforms": [
            {
              "xpath": "/",
              "xslt": "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:Det=\"http://Det.com\"><xsl:output omit-xml-declaration=\"yes\"/><xsl:template match=\"node()|@*\"><xsl:copy><xsl:apply-templates select=\"node()|@*\"/></xsl:copy></xsl:template></xsl:stylesheet>"
            }
          ],
          "ad_configuration_url_format": "https://ad-provider-host.com/path/to/ad-handler?ip={{client.ipaddress}}&num={{random.int32}}&ses={{session.session_id}}"
        },
        "application_id": "Application ID"
      },
      "inserted": true
    }

광고 구성 업데이트

광고 구성을 업데이트하는 것은 구성을 만드는 것과 매우 유사합니다. 을 만들다PUT다음과 같이 요청 :

방법 PUT
URL https://api.bcovlive.io/v1/ssai/applications/application/Application_ID
머리글 X-API-KEY: your API KEY

샘플 요청 본문

    {
      "application_ad_configuration": {
        "ad_configuration_description": "Some Updated Description Value",
        "ad_configuration_expected_response_type": "Dfp or Vast or SmartXML,
        "ad_configuration_headers": {
          "X-Custom-Header-Rand": "{{random.int32}}",
          "X-VIDEOPLAZA-FORWARDED-FOR": "{{client.ipaddress}}"
        },
        "ad_configuration_headers_for_impressions": false,
        "ad_configuration_strategy": "SingleAdResponse or MultipleAdResponse",
        "ad_configuration_transforms": [
          {
          "xpath": "/",
          "xslt": "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:Det=\"http://Det.com\"><xsl:output omit-xml-declaration=\"yes\"/><xsl:template match=\"node()|@*\"><xsl:copy><xsl:apply-templates select=\"node()|@*\"/></xsl:copy></xsl:template></xsl:stylesheet>"
          }
        ],
        "ad_configuration_url_format": "https://updated-ad-provider-host.com/path/to/ad-handler?ip={{client.ipaddress}}&num={{random.int32}}&ses={{session.session_id}}"
      },
      "application_description": "Human readable description of the ad application",
      "account_id": "User's Account ID [Optional]"
    }

샘플 응답

    {
      "account_id": "User Account ID",
      "application_description": "Human readable description of the ad application",
      "application_ad_configuration": {
        "ad_configuration_description": "Some Updated Description Value",
        "ad_configuration_expected_response_type": "Dfp | Vast | SmartXML",
        "ad_configuration_headers": {
        "X-Custom-Header-Rand": "{{random.int32}}",
        "X-VIDEOPLAZA-FORWARDED-FOR": "{{client.ipaddress}}"
        },
        "ad_configuration_headers_for_impressions": false,
        "ad_configuration_strategy": "SingleAdResponse | MultipleAdResponse",
        "ad_configuration_transforms": [
          {
          "xpath": "/",
          "xslt": "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:Det=\"http://Det.com\"><xsl:output omit-xml-declaration=\"yes\"/><xsl:template match=\"node()|@*\"><xsl:copy><xsl:apply-templates select=\"node()|@*\"/></xsl:copy></xsl:template></xsl:stylesheet>"
          }
        ],
        "ad_configuration_url_format": "https://updated-ad-provider-host.com/path/to/ad-handler?ip={{client.ipaddress}}&num={{random.int32}}&ses={{session.session_id}}"
      },
      "application_id": "Application ID"
    }

모든 광고 구성 가져 오기

계정에 대한 모든 광고 구성을 검색하려면GET 다음과 같이 요청 :

방법 GET
URL https://api.bcovlive.io/v1/ssai/applications/account/Account_ID
머리글 X-API-KEY: your API KEY

샘플 응답

    [
      {
        "application_id": "Application_ID_1",
        "application_description": "DFP Single Midroll",
        "application_ad_configuration": {
        "ad_configuration_description": "DFP Test Config Single Midroll",
        "ad_configuration_strategy": "MultipleAdResponse",
        "ad_configuration_transforms": [],
        "ad_configuration_url_format": "https://ad-provider-host.com/path/to/ad-handler",
        "ad_configuration_expected_response_type": "Dfp"
        },
        "account_id": "Account_ID"
      },
      {
        "application_id": "Application_ID_2",
        "application_description": "Test DFP Single Midroll"
        "application_ad_configuration": {
        "ad_configuration_description": "DFP Test Config Single Midroll",
        "ad_configuration_strategy": "MultipleAdResponse",
        "ad_configuration_transforms": [
        {
          "xslt": "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:Det=\"http://Det.com\"><xsl:output omit-xml-declaration=\"yes\"/><xsl:template match=\"node()|@*\"><xsl:copy><xsl:apply-templates select=\"node()|@*\"/></xsl:copy></xsl:template></xsl:stylesheet>",
          "xpath": "/"
        }
        ],
        "ad_configuration_url_format": "https://ad-provider-host.com/path/to/ad-handler?ip={{client.ipaddress}}&num={{random.int32}}&ses={{session.session_id}}",
        "ad_configuration_expected_response_type": "Dfp"
        },
        "account_id": "Account_ID"
      }
    ]

광고 구성 가져 오기

특정 광고 구성을 검색 할 수도 있습니다. application_id 보내서GET다음과 같이 요청 :

방법 GET
URL https://api.bcovlive.io/v1/ssai/applications/application/Application_ID
머리글 X-API-KEY: your API KEY

샘플 응답

    {
      "application_id": "Application_ID",
      "application_description": "Test DFP Single Midroll",
      "application_ad_configuration": {
        "ad_configuration_description": "DFP Test Config Single Midroll",
        "ad_configuration_strategy": "MultipleAdResponse",
        "ad_configuration_transforms": [
          {
          "xslt": "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:Det=\"http://Det.com\"><xsl:output omit-xml-declaration=\"yes\"/><xsl:template match=\"node()|@*\"><xsl:copy><xsl:apply-templates select=\"node()|@*\"/></xsl:copy></xsl:template></xsl:stylesheet>",
          "xpath": "/"
          }
        ],
        "ad_configuration_url_format": "https://ad-provider-host.com/path/to/ad-handler?ip={{client.ipaddress}}&num={{random.int32}}&ses={{session.session_id}}",
        "ad_configuration_expected_response_type": "Dfp"
      },
      "account_id": "Account_ID"
    }

광고 구성 삭제

광고 구성을 삭제하려면 다음과 같이DELETE요청을 보냅니다.

방법 DELETE
URL https://api.bcovlive.io/v1/ssai/applications/application/APPLICATION_ID
머리글 X-API-KEY: your API KEY

샘플 응답

    {
    "application_id": "Application_ID",
    "deleted": true
    }

슬레이트 관리

슬레이트는 사용하지 않는 광고 시간을 채우는 데 사용되는 자체 자산입니다. 슬레이트를 사용하여 "곧 돌아 오십시오"라는 메시지 또는 원하는 콘텐츠를 제공 할 수 있습니다.

다음은 슬레이트 애셋을 추가하고 관리하기위한 API 요청에 대한 세부 정보입니다.

슬레이트 자산 추가

새 슬레이트 미디어 소스 자산을 수집하려면POST의뢰:

방법 POST
URL https://api.bcovlive.io/v1/ssai/slates
머리글 X-API-KEY: your API KEY

샘플 요청 본문

    {
      "source_url": "https://somesourceasset.com/slate-to-ingest.mp4",
      "account_id": "Account_ID [Optional]",
      "source_description": "User identifiable description for the slate  [Optional]"
    }
    
    

샘플 응답

    {
      "media_source_asset_id": "New_UUID",
      "account_id": "Account_ID",
      "media_source_asset_default": false,
      "media_source_asset_type": "slate",
      "media_source_asset_url": "https://somesourceasset.com/slate-to-ingest.mp4",
      "media_source_asset_status": "transcoding"
      "media_source_asset_description": "User identifiable description for the slate"
    }

슬레이트 자산 삭제

슬레이트 미디어 소스 자산을 삭제하려면DELETE의뢰:

방법 DELETE
URL https://api.bcovlive.io/v1/ssai/slates/slate/Slate_MSA_ID
머리글 X-API-KEY: your API KEY

샘플 응답

    {
      "media_source_asset_id": "MSA_UUID",
      "media_source_asset_type": "slate",
      "media_source_asset_url": "http://someS3urlpath/media.mp4",
      "media_source_asset_default": false,
      "media_source_asset_status": "ready",
      "account_id": "ACCOUNT_ID"
    }

슬레이트 자산 가져 오기

계정에 대한 모든 슬레이트 미디어 소스 자산의 배열을 검색 할 수 있습니다. GET의뢰:

방법 GET
URL https://api.bcovlive.io/v1/ssai/slates/account/Account_ID
머리글 X-API-KEY: your API KEY

샘플 응답

    [
      {
      "media_source_asset_id": "MSA_UUID_1",
      "media_source_asset_type": "slate",
      "media_source_asset_default": false,
      "media_source_asset_url": "http://someS3urlpath.com/media.mp4",
      "account_id": "ACCOUNT_ID",
      "media_source_asset_status": "ready"
      },
      {
      "media_source_asset_id": "MSA_UUID_2",
      "media_source_asset_type": "slate",
      "media_source_asset_default": true,
      "media_source_asset_url": "http://someS3urlpath.com/media.mp4",
      "account_id": "ACCOUNT_ID",
      "media_source_asset_status": "ready"
      }
    ]

DFP에 대한 참고 사항

DFP에서 광고를받는 경우 문제를 방지하기 위해 다음 사항에 유의해야합니다.

광고 태그

Live 용 광고 태그를 만들 때 적절한 가이드 라인을 따르고/live . DFP 문서 참조수동으로 마스터 비디오 태그 만들기자세한 내용은.

동시성

많은 양의 동시성이 예상되는 경우 DFP 계정 팀에 문의하는 것이 좋습니다.

단일 / 다중 광고 응답

그만큼singleadresponse multiadresponse 매개 변수는 현재 사용되지 않습니다. SSAI .

라이브SSAI단일 광고 서버 호출 만하고 응답이 광고 당 5 개의 리디렉션으로 제한되는 필수 광고 래퍼를 따르는 것을 제외하고 휴식 시간 동안 모든 광고를 포함 할 것으로 예상합니다. 다음 광고 응답 형식이 허용되며 다음과 같이 파싱됩니다.

  • VAST-단일 응답 또는 단일 응답의 광고 모음
  • DFP 광고 규칙-프리 롤, 미드 롤, 포스트 롤 정의 광고를 포함하여 응답에서 사용 가능한 모든 광고를 집계합니다.
  • 스마트 XML-프리 롤, 미드 롤, 포스트 롤 정의 광고를 포함하여 응답에서 사용 가능한 모든 광고를 집계합니다.

광고 요청을위한 맞춤 헤더

그만큼SSAI플랫폼은 백엔드 플랫폼에서 사용하는 광고 호출 및 모든 비콘과 함께 맞춤 헤더를 전달할 수 있습니다. VideoPlaza와 같은 일부 광고 서버에는 맞춤 헤더가 필요합니다.

맞춤 헤더는 다음에서 키-값 쌍 집합으로 지정됩니다. ad_configuration_headers의 일부인 개체application_ad_configuration (참조광고 구성 만들기부분).

참고

  • 표준 헤더는 기본적으로 다음과 같이 처리됩니다.
    • X-Forwarded-For
    • X-Device-User-Agent
  • 헤더 값은광고 구성 변수
  • 헤더 값은 정적 문자열 일 수도 있습니다.

광고 매크로를 사용하여 광고 타겟팅

때를광고 구성 만들기 , 광고 태그는 일반적으로 다음과 같습니다.

      https://ad-provider-host.com/path/to/ad-handler?ip={{client.ipaddress}}&
      num={{random.int32}}&ses={{session.session_id}}&IDFA={{deviceid}}&
      sitesection={{sitesection}}&breakid={{breakid}}&breaktheme={{breaktheme}}

이중 중괄호 안의 항목은 광고 매크로라고도하는 변수이며, Brightcove Live는 광고 요청을 보낼 때 값이있는 경우 값으로 대체합니다.

광고 매크로 값은 다음과 같은 방법으로 제공 할 수 있습니다.

헤더 정보 사용

헤더 정보는광고 구성 변수위 섹션은 모든 요청에 사용할 수 있습니다. 광고 구성에서 적절한 키 이름으로 원하는 변수를 지정하기 만하면됩니다.

URL 추가

다음과 같이 추가 세션 값을 실시간 스트림의 URL에 추가 할 수 있습니다.

      http://playback.bcovlive.io/e058d9f2737e18/us-west-2/NA/
      playlist.m3u8?deviceid=123456&sitesection=services"

동적으로 URL 추가

Javascript 및 Brightcove Player API를 사용하여 URL을 동적으로 추가 할 수 있습니다.

      <!DOCTYPE html>
      <body>
        <video
        id="myPlayerID"
        data-video-id="5975635167001"
        data-account="3737230870001"
        data-player="tIG7lVKBm"
        data-embed="default"
        data-application-id
        class="video-js"
        controls
        width="640"
        height="360"></video>
        <script src="//players.brightcove.net/3737230870001/tIG7lVKBm_default/index.min.js"></script>

        <script type="text/javascript">
        var player = videojs("myPlayerID");

        player.one("loadstart", function(){
          var sourceUrl = player.currentSource();
          console.log(sourceUrl);
          var liveUrlWithParams = sourceUrl.src + "?player_width={width}&player_height={height}&deviceid={deviceid}";

          player.src([{
            "type": "application/vnd.apple.mpegurl",
            "src": liveUrlWithParams
          }]);
        });
      </script>

      </body>

이 예의 키 이름은 위에 표시된 광고 태그의 변수 이름에 해당합니다.

광고 구성 변수

비콘이라고도하는 광고 구성 변수를 요청에 사용하여 광고 구성을 관리 할 수 있습니다. 자세한 내용은라이브 API : SSAI를 사용한 큐 포인트 및 광고 비콘문서.

수동 큐 포인트 사용

특정 광고 시간의 값은 수동 큐 포인트 삽입 요청으로 전송할 수 있습니다. 자세한 내용은라이브 API : 큐 포인트 및 광고 비콘문서.

알려진 문제

  • SSAI는 라이브 스트리밍 비디오에 오디오 트랙이 있어야합니다.
  • 반환 된 VAST의 광고 ID가 동일한 경우 광고 URL이 동적 변수를 사용하여 고유 한 URL을 만들더라도 서버는 광고 콘텐츠를 요청하지 않습니다. 이것은아니광고에 DFP를 사용하는 경우 적용됩니다.
  • DFP를 사용하면 동일한 광고 ID를 사용할 수 있지만 여전히 다른 광고 소재 ID가 있어야합니다. 즉, MediaFile을 간단히 교체 할 수 없습니다.
  • 광고 시간의 길이가 광고 URL의 MAX 길이 (min_ad_duration = 0 & max_ad_duration = 30000)보다 짧으면 광고가 광고 시간보다 더 오래 반환되면 광고가 재생되지 않습니다.

  • VPAID 또는 클릭 가능한 광고는Brightcove Live SSAI .

  • 광고 시간의 남은 시간이 스트림의 세그먼트 초보다 짧고 슬레이트가 표시되면 슬레이트가 세그먼트 기간 동안 표시되고 실제 광고 시간은 예상보다 길어집니다.

  • 위의 경우 세션을 라이브 에지로 다시 가져오려고 시도하기 위해 다음 광고 시간 중 하나가 지연 시간만큼 축소될 수 있습니다.

  • 광고가 시스템에 처음 표시되는 경우 트랜스코딩되어 제공 준비가 될 때까지 재생되지 않습니다.
  • Live SSAI 용 VMAP는 현재 지원되지 않습니다.