라이브 SSAI에 대한 플레이어 향상 구현

이 항목에서는 향상된 사용자 경험을 위해 Live SSAI용 플레이어 개선 사항을 활용하는 서버 측 광고로 실시간 스트림을 만드는 방법에 대해 알아봅니다.

서문

브라이트코브의 Live SSAI 플레이어 개선 기능을 통해 광고 수, 광고 카운트다운 타이머, 클릭스루 광고 및 컴패니언 광고를 통해 실시간 스트림의 광고 중단 시간을 개선할 수 있습니다.

광고 정보는 표시 할 광고를 식별하기 위해 광고의 응답을 검색하는 광고 구성을 사용하여 지정됩니다. 또한, BAST 파일에는 동반자 광고 및 비콘 URL에 대한 정보도 포함되어 있습니다.

작업 흐름

SSAI 및 플레이어 향상 기능을 사용하여 라이브 스트림을 만들려면 다음 단계를 따르십시오.

  1. 계정 관리자에게 라이브 스트림, 서버 측 광고 삽입 (SSAI를) 및 Live SSAI 플레이어 개선 사항에 대해 계정을 활성화하도록 요청하십시오.
  2. 광고 구성 만들기
  3. 선택 사항: 슬레이트 에셋을 만들어 사용하지 않는 광고 시간을 메우기
  4. 라이브 작업 만들기
  5. 재생 토큰 만들기
  6. 플레이어 구성
  7. 스트리밍 시작
  8. 큐 포인트를 사용하여 광고 트리거 (라이브 이벤트 전이나 중에 할 수 있음)
  9. 정리

광고 구성 만들기

광고 구성은 실시간 스트림이 있는 서버측 광고를 포함하는 데 필요한 정보를 정의합니다. 여기에는 광고 공급자 URL, 예상 광고 응답 유형 및 비콘 전송 여부가 포함됩니다.

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

방법 POST
URL https://api.bcovlive.io/v1/ssai/applications
머리글 X-API-KEY: your API KEY
콘텐츠 유형: 응용 프로그램/json

모든 요청은 계정이 설정될 때 제공되는 API 키를 사용하여 인증됩니다. 키가X-API-KEY헤더에 전달됩니다.

요청 본문

요청 본문 필드에 대한 자세한 내용은 Live API 참조문서를 참조하십시오.

Live SSAI의 플레이어 향상 기능을 사용하면 강조 표시된 필드를application_ad_configuration오브젝트 내에서 설정할 수 있습니다.

샘플 요청 본문:

{
  "application_ad_configuration": {
	"ad_configuration_description": "your ad config description",
    "ad_configuration_expected_response_type": "Vast",
	"ad_configuration_headers_for_impressions": false,
	"ad_configuration_strategy": "SingleAdResponse",
	"ad_configuration_transforms": [],
	"ad_configuration_url_format": "your ad server",
    "ad_configuration_client_sdk_enabled": true,
    "client_options": {
      "show_ad_break_remaining_time": true / false,
      "show_ad_remaining_time": true / false,
      "show_number_of_remaining_ads": true / false,
      "client_only_tracking": true / false
    }
  },
  "application_description": "your application description"
}

다음은 Live SSAI를 통한 플레이어 향상과 관련된 광고 구성 필드입니다.

필드 유형 필수 설명
ad_configuration_expected_response_type 스트링 이 기능을 사용하려면 광고 구성의 값이 다음과 같아야 합니다. Vast
ad_configuration_client_sdk_enabled 부울 이 기능을 활성화하려면 이 필드의 값이 다음과 같아야 합니다. true
client_options 물체 Player Enhancements 관련 필드의 개체
client_options.
show_ad_break_remaining_time
부울 남은 광고 시간 표시 시간
값: true / false
client_options.
show_ad_remaining_time
부울 남은 광고 표시 시간
값: true / false
client_options.
show_number_of_remaining_ads
부울 광고 브레이크에 남아 있는 광고 수를 표시합니다.
값: true / false
client_options.
client_only_tracking
부울 서버측 추적 이벤트 (노출수/사분위수) 비활성화
값: true / false
기본값: false


대응

샘플 응답:

{
  "application": {
    "application_description": "Test ad configuration",
    "application_ad_configuration": {
    "ad_configuration_description": "Ad config description",
    "ad_configuration_expected_response_type": "Vast",
    "ad_configuration_strategy": "SingleAdResponse",
    "ad_configuration_transforms": [],
    "ad_configuration_url_format": "https://solutions.brightcove.com/bcls/ads/simple-vast.xml",
    "ad_configuration_headers_for_impressions": false,
    "ad_configuration_client_sdk_enabled": true,
    "client_options": {
      "show_ad_break_remaining_time": true,
      "show_ad_remaining_time": true,
      "show_number_of_remaining_ads": true,
      "client_only_tracking": true
    }
    },
    "application_id": "1234567890abcdefghijkl",
    "application_type": "ads",
    "account_id": "001122334455aabbccddee"
  },
  "action": "inserted"
}

광고 구성을 성공적으로 만든 후 생성된application_id (광고 구성 ID) 를 복사합니다. 나중에 SSAI의 재생 URL을 찾으려면 이 방법이 필요합니다.

광고 구성을 나열, 업데이트 및 삭제하려면 광고 구성관리문서를 참조하세요.

라이브 작업 만들기

라이브 작업을 생성하려면 다음과 같이POST요청을 보내십시오.

방법 POST
URL https://api.bcovlive.io/v1/jobs
헤더 X-API-KEY: your API KEY
콘텐츠 유형: 응용 프로그램/json

요청 본문

요청 본문 필드에 대한 자세한 내용은 Live API 참조문서를 참조하십시오.

SSAI가 활성화된 실시간 작업의 경우 HTTP 요청ad_insertion: true본문에서 설정합니다.

샘플 요청(Video Cloud 비디오)

라이브 스트림에 사용할 Video Cloud 비디오를 만들고 라이브 스트림에서 VOD 클립을 만들려면 요청 본문에videocloud객체를 포함시키십시오. 자세한 내용은라이브 API를 참조하십시오. VOD 클립문서 만들기

아래 강조 표시된 필드는 서버측 광고 삽입(SSAI)에 필요합니다.

{
  "live_stream": true,
  "ad_insertion": true,
  "region": "us-west-2",
  "reconnect_time": 1800,
  "outputs": [{
      "label": "hls720p",
      "live_stream": true,
      "width": 1280,
      "height": 720,
      "video_codec": "h264",
      "h264_profile": "high",
      "video_bitrate": 2100,
      "segment_seconds": 4,
      "keyframe_interval": 60
    },
    {
      "label": "hls540p",
      "live_stream": true,
      "width": 960,
      "height": 540,
      "video_codec": "h264",
      "h264_profile": "main",
      "video_bitrate": 1500,
      "segment_seconds": 4,
      "keyframe_interval": 60
    },
    {
      "label": "hls360p",
      "live_stream": true,
      "width": 640,
      "height": 360,
      "video_codec": "h264",
      "h264_profile": "main",
      "video_bitrate": 800,
      "segment_seconds": 4,
      "keyframe_interval": 60
    }
  ],
  "videocloud": {
    "video": {
      "name": "Live SSAI VideoCloud Asset",
      "description": "",
      "long_description": "",
      "tags": [],
      "reference_id": "live_ssai_vc_asset",
      "link": {
      "url": "",
      "text": ""
    },
    "schedule": {
      "starts_at": null,
      "ends_at": null
    },
    "custom_fields": {}
    }
  }
}

샘플 요청(원격 비디오)

라이브 스트림에 원격 비디오를 사용하려면 요청 본문이 이와 유사해야 합니다.

아래 강조 표시된 필드는 서버측 광고 삽입(SSAI)에 필요합니다.

{
  "live_stream":true,
  "ad_insertion":true,
  "region":"us-west-2",
  "reconnect_time":1800,
  "outputs":[
    {
      "label": "hls720p",
      "live_stream": true,
      "width": 1280,
      "height": 720,
      "video_codec": "h264",
      "h264_profile": "high",
      "video_bitrate": 2100,
      "segment_seconds": 4,
      "keyframe_interval": 60
    },
    {
      "label": "hls540p",
      "live_stream": true,
      "width": 960,
      "height": 540,
      "video_codec": "h264",
      "h264_profile": "main",
      "video_bitrate": 1500,
      "segment_seconds": 4,
      "keyframe_interval": 60
    },
    {
      "label": "hls360p",
      "live_stream": true,
      "width": 640,
      "height": 360,
      "video_codec": "h264",
      "h264_profile": "main",
      "video_bitrate": 800,
      "segment_seconds": 4,
      "keyframe_interval": 60
    }
  ]
}

기타 유용한 자료:

대응

샘플 응답(Video Cloud 동영상)
{
 "id": "227356abcdefghijklmno12345",
 "outputs": [
  {
   "id": "0-2273561a201ec18",
   "playback_url": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/profile_0/chunklist.m3u8",
   "playback_url_dvr": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/profile_0/chunklist_dvr.m3u8",
   "playback_url_vod": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/profile_0/chunklist_vod.m3u8",
   "playback_added_cdns": [],
   "label": "hls720p"
  },
  {
   "id": "1-2273561a201e8c18",
   "playback_url": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/profile_1/chunklist.m3u8",
   "playback_url_dvr": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/profile_1/chunklist_dvr.m3u8",
   "playback_url_vod": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/profile_1/chunklist_vod.m3u8",
   "playback_added_cdns": [],
   "label": "hls540p"
  },
  {
   "id": "2-2273561a201ec18",
   "playback_url": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/profile_2/chunklist.m3u8",
   "playback_url_dvr": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/profile_2/chunklist_dvr.m3u8",
   "playback_url_vod": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/profile_2/chunklist_vod.m3u8",
   "playback_added_cdns": [],
   "label": "hls360p"
  },
  {
   "id": "3-2273561a201ec18",
   "playlist_type": "defaultS3",
   "type": "playlist",
   "filename": "playlist.m3u8",
   "dvr_filename": "playlist_dvr.m3u8",
   "playback_url": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/playlist.m3u8",
   "playback_url_dvr": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/playlist_dvr.m3u8",
   "ssai_playback_urls": {
    "b907ac7935e2": {
     "playback_url": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/b907ac7935e2/playlist_ssaiM.m3u8",
     "playback_url_dvr": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/b907ac7935e2/playlist_dvr_ssaiM.m3u8",
     "playback_added_cdns": [],
     "description": "Test ad configuration for SLS",
     "type": "ads"
    },
    "dc9aa8ee3520f2": {
     "playback_url": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/dc9aa8ee3520f2/playlist_ssaiM.m3u8",
     "playback_url_dvr": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/dc9aa8ee3520f2/playlist_dvr_ssaiM.m3u8",
     "playback_added_cdns": [],
     "description": "Test live ad config for SLS",
     "type": "ads"
    }
   },
   "playback_added_cdns": []
  }
 ],
 "stream_url": "rtmp://ec2-54-184-149-60.us-west-2.compute.amazonaws.com:1935/2273561a201ec18",
 "stream_name": "alive",
 "static": false,
 "job_videocloud_asset_id": "6227380655001",
 "encryption": {},
 "playback_url": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/playlist.m3u8",
 "playback_url_dvr": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/playlist_dvr.m3u8",
 "ssai_playback_urls": {
  "b907ac7935e2": {
   "playback_url": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/b907ac7935e2/playlist_ssaiM.m3u8",
   "playback_url_dvr": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/b907ac7935e2/playlist_dvr_ssaiM.m3u8",
   "playback_added_cdns": [],
   "description": "Test ad configuration for SLS",
   "type": "ads"
  },
  "dc9aa8ee3520f2": {
   "playback_url": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/dc9aa8ee3520f2/playlist_ssaiM.m3u8",
   "playback_url_dvr": "https://bcovlive-a.akamaihd.net/2273561a201ec18/us-west-2/NA/dc9aa8ee3520f2/playlist_dvr_ssaiM.m3u8",
   "playback_added_cdns": [],
   "description": "Test live ad config for SLS",
   "type": "ads"
  }
 },
 "playback_added_cdns": []
}

샘플 응답(원격 비디오)
{
 "id": "bbccddeeffgghhiijjkk0011223344",
 "outputs": [
  {
   "id": "0-bbccddeeffgghhiijjkk0011223344",
   "playback_url": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/profile_0/chunklist.m3u8",
   "playback_url_dvr": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/profile_0/chunklist_dvr.m3u8",
   "playback_url_vod": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/profile_0/chunklist_vod.m3u8",
   "playback_added_cdns": [],
   "label": "hls720p"
  },
  {
   "id": "1-bbccddeeffgghhiijjkk0011223344",
   "playback_url": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/profile_1/chunklist.m3u8",
   "playback_url_dvr": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/profile_1/chunklist_dvr.m3u8",
   "playback_url_vod": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/profile_1/chunklist_vod.m3u8",
   "playback_added_cdns": [],
   "label": "hls540p"
  },
  {
   "id": "2-bbccddeeffgghhiijjkk0011223344",
   "playback_url": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/profile_2/chunklist.m3u8",
   "playback_url_dvr": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/profile_2/chunklist_dvr.m3u8",
   "playback_url_vod": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/profile_2/chunklist_vod.m3u8",
   "playback_added_cdns": [],
   "label": "hls360p"
  },
  {
   "id": "3-bbccddeeffgghhiijjkk0011223344",
   "playlist_type": "defaultS3",
   "type": "playlist",
   "filename": "playlist.m3u8",
   "dvr_filename": "playlist_dvr.m3u8",
   "playback_url": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/playlist.m3u8",
   "playback_url_dvr": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/playlist_dvr.m3u8",
   "ssai_playback_urls": {
    "91bc2d5ff4a4441db34c2457c751c3ca": {
     "playback_url": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/91bc2d5ff4a4441db34c2457c751c3ca/playlist_ssaiM.m3u8",
     "playback_url_dvr": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/91bc2d5ff4a4441db34c2457c751c3ca/playlist_dvr_ssaiM.m3u8",
     "playback_added_cdns": [],
     "description": "Test ad configuration",
     "type": "ads"
    },
    "e7f6e9a3022a45e1b0b322ba57399150": {
     "playback_url": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/e7f6e9a3022a45e1b0b322ba57399150/playlist_ssaiM.m3u8",
     "playback_url_dvr": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/e7f6e9a3022a45e1b0b322ba57399150/playlist_dvr_ssaiM.m3u8",
     "playback_added_cdns": [],
     "description": "House Ads - 0077db20eb444b5daa7487438c90a271",
     "type": "ads"
    }
   }
  }
 ],
 "stream_url": "rtmp://ep4-usw2.bcovlive.io:1935/bbccddeeffgghhiijjkk0011223344",
 "stream_name": "alive",
 "static": false,
 "encryption": {},
 "playback_url": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/playlist.m3u8",
 "playback_url_dvr": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/playlist_dvr.m3u8",
 "ssai_playback_urls": {
  "91bc2d5ff4a4441db34c2457c751c3ca": {
   "playback_url": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/91bc2d5ff4a4441db34c2457c751c3ca/playlist_ssaiM.m3u8",
   "playback_url_dvr": "https://bcovlive-a.akamaihd.net/bbccddeeffgghhiijjkk0011223344/us-west-2/NA/91bc2d5ff4a4441db34c2457c751c3ca/playlist_dvr_ssaiM.m3u8",
   "playback_added_cdns": [],
   "description": "Test ad configuration",
   "type": "ads"
  }
 }
}

API 응답에서 다음 단계를 위해 다음 필드 값을 기록해 둡니다.

  • id - 귀하의 실시간 직업 ID
  • stream_url , stream_name - 라이브 스트림 인코더용 입력
  • job_videocloud_asset_id - 비디오 클라우드 비디오 ID

재생 토큰 만들기

플레이어와 함께 재생 토큰이 필요합니다.

재생 토큰을 생성하려면 다음과 같이POST요청을 보내십시오.

방법 POST
URL https://api.bcovlive.io/v1/jobs/your live job id/playback-token
헤더 X-API-KEY: your API KEY
콘텐츠 유형: 응용 프로그램/json

요청 본문

샘플 요청 본문:

{
   "dvr":true / false,
   "application_id":"your ad config id"
}

대응

샘플 응답:

{
 "playback_token": "live.JhQabcdefghijkl000000000abcdefghi"
}

응답 본문에는 생성 된 재생 토큰이 포함됩니다. 플레이어로 Playback API 호출을 할 때 이것을 사용하십시오.

플레이어 구성

Playback API에서 실시간 스트림을 재생하는 과정은 일반 Video Cloud 비디오를 재생하는 방식과 약간 다릅니다. 동영상 ID (참조 ID) 를 제공하는 것 외에도 사용하려는 광고 구성을 식별하는 재생 토큰을 포함해야 합니다. DVR 재생 여부를 지정해야 합니다.

웹 플레이어

브라이트코브 플레이어 구성에 대한 자세한 내용은 브라이트코브 플레이어를 통한 Live SSAI의 플레이어 향상사용문서를 참조하십시오.

네이티브 안드로이드 플레이어

Android용 네이티브 플레이어 구성에 대한 자세한 내용은 네이티브 SDK를 통한 Live SSAI용 플레이어 향상사용문서를 참조하십시오.

네이티브 iOS 플레이어

iOS용 네이티브 플레이어 구성에 대한 자세한 내용은 네이티브 SDK를 통한 Live SSAI용 플레이어 향상사용문서를 참조하십시오.

스트리밍 시작

라이브 스트리밍 이벤트를 만드는 많은 도구가 있습니다. 다음은 CDN에서 제공하는 라이브 스트림을 생성하는 데 사용할 수 있는 몇 가지 인코더입니다.

정리

실시간 스트림이 완료되면 다음과 같이 스트림의 아티팩트를 정리할 수 있습니다.

  1. 스트리밍 인코더 중지
  2. 라이브 작업을 취소합니다.

    라이브 작업을 취소하려면 다음과 같이PUT요청을 보내십시오.

    방법 PUT
    URL https://api.bcovlive.io/v1/jobs/your live job id/cancel
    헤더 X-API-KEY: your API KEY
    콘텐츠 유형: 응용 프로그램/json

    자세한 내용은 Live API 참조문서를 참조하십시오.

  3. 광고 구성 삭제

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

    방법 PUT
    URL https://api.bcovlive.io/v1/ssai/applications/application/your ad config id
    헤더 X-API-KEY: your API KEY
    콘텐츠 유형: 응용 프로그램/json

    자세한 내용은 Live API 참조문서를 참조하십시오.