스트리밍은 대부분의 브라우저와
Developer 앱에서 사용할 수 있습니다.
-
HLS Interstitials의 새로운 기능
HLS Interstitials를 이용하면 광고, 다른 삽입 광고 및 HLS 스트림 간의 비디오 콘텐츠 내에 원활한 전환을 만들 수 있습니다. HLS 사용 시 SNAP-IN/OUT을 통해 광고 인벤토리를 최적화하고 삽입 광고 프레젠테이션을 미세 조정하는 방법 등에 대해 알아보세요.
리소스
관련 비디오
WWDC22
WWDC21
-
다운로드
안녕하세요, 저는 Prashant입니다 WWDC에 오신 것을 환영합니다 2021년에는 HLS 전면 광고를 도입했습니다 이는 HLS 스트림에서 간단하게 광고 및 기타 전면 광고를 예약할 수 있게 해주죠 올해에는 광고 인벤토리를 더욱 최적화하고 프레젠테이션을 미세 조정할 수 있는 기능이 추가되었습니다 그럼 HLS 전면 광고의 새로운 기능을 알아보시죠 이 세션에서는 HLS 전면 광고의 작동 방식에 대한 간략한 개요부터 시작하겠습니다 그리고 새로 추가된 광고 큐 옵션에 대해 논의할 것입니다 그런 다음 특히 SNAP 속성을 사용하는 라이브 시나리오에서 광고 경험을 미세 조정할 수 있는 방법을 살펴보겠습니다 그리고 HLS 사양에 추가한 몇 가지 새로운 쿼리 매개변수를 살펴본 후 마지막으로 이러한 새로운 기능을 통합하는 AVFoundation API의 변경 사항에 대해 논의합니다 새로운 기능을 살펴보기 전에 HLS 전면 광고에 대해 다시한번 살펴 보겠습니다 HLS 전면 광고를 사용하면 광고가 프로그램 타임라인에 스케줄될 수 있는 별도의 자산으로 처리됩니다 더 이상 불연속 태그로 스티칭할 필요가 없습니다 다변형 재생목록을 통해 직접 참조가 가능합니다 이렇게 하면 기본 콘텐츠에서 다변형 재생 목록만 가리키면 되므로 광고 예약이 정말 간단해집니다
주요 콘텐츠 타임라인을 보여주는 일반적인 미디어 재생 목록입니다 재생하는 동안 두 개의 광고를 예약하고 싶다고 가정해 보죠 첫 번째 광고가 재생되고 약 5초 후에 표시되기를 원한다면 DATE-RANGE 태그를 사용하여 광고의 시작 시간을 지정하기만 하면 됩니다
두 번째 광고가 15초에 표시되기를 원한다면 재생목록에 다른 DATE-RANGE 태그를 추가합니다 정말 간단하죠
기본 콘텐츠에 일부 광고가 이미 연결되어 있을 수도 있습니다 광고에서 연결되는 기간과 동일한 재생 오프셋을 지정하여 이러한 광고를 대체할 수도 있습니다
이 외에도 HLS 전면 광고를 사용하면 광고에 대한 탐색 제한을 지정할 수 있으며 무엇보다도 라이브 시나리오에서 조기 반환을 예약할 수도 있습니다 자세한 내용은 WWDC 2021의 "HLS에서의 미드롤 및 프리롤의 동적 삽입"을 참조하세요 콘텐츠의 타임라인에 따라 광고를 예약할 수 있는 기능 외에 올해에는 광고를 시작 또는 끝에 강제로 배치할 수 있는 속성이 추가되었습니다 이를 위해 CUE 속성을 사용하여 지정할 수 있는 다음과 같은 새로운 큐 옵션을 추가했습니다 이 속성은 다음 값 중 하나 또는 조합으로 사용할 수 있습니다 PRE 값은 기본 콘텐츠가 표시되기 전에 광고를 표시합니다 이는 프로그램을 조정하기 전에 프리미엄 광고 스팟을 예약하려는 라이브 시나리오에서 특히 유용합니다 POST 값은 기본 콘텐츠가 표시된 후에 광고가 표시되어야 함을 나타냅니다 이는 예를 들어 라이브 이벤트가 끝날 때 엔딩 크레딧을 예약하려는 이벤트 스트림에 유용할 수 있습니다 그리고 값이 ONCE이면 광고가 한 번만 표시됩니다 사용자가 광고 이전으로 돌아가면 더 이상 광고가 재생되는 것을 볼 수 없죠 일반적으로 재생 시작 시 한 번만 표시되는 평가 화면에 사용할 때 아주 유용한 방법이죠
이것은 광고가 프리롤 및 포스트롤로 예약된 재생목록의 예를 보여줍니다 프리롤은 한 번만 재생되도록 예약되어 있습니다 또한 재생 후 약 10초에 한 번 재생되도록 광고가 예정되어 있습니다
라이브 시나리오에서 광고를 예약하는 데는 여러 어려움이 따르죠 예를 들어, 패키저는 하나의 시계로 재생 목록의 프로그램 날짜 시간 태그를 설정하는 반면 인코더는 다른 시계에 의해 구동될 수 있습니다 이 두 시계가 반드시 동기화될 필요는 없습니다 예를 들어, 이 예에서 세그먼트 0과 세그먼트 100과 연관된 날짜 시간 태그의 차이는 약 800초입니다
그러나 누적 미디어 지속 시간은 개별 세그먼트 지속 시간이 8초 미만이므로 그보다 약간 짧습니다
패키저 시계가 인코더 시계보다 약간 빠른 경우 광고가 시작되는 실제 미디어 시간이 슬레이트 내부 어딘가에 있을 수 있습니다 리고 여기에 표시된 광고 재생 시간과 동일한 오프셋으로 주 콘텐츠에 다시 합류할 것으로 예상된다면 실제로는 슬레이트 다음에 나오는 주요 콘텐츠 중 일부를 놓치게 될 것입니다
이제 OUT 값과 함께 SNAP 속성을 사용하여 원하는 광고 시작 시간에 가장 가까운 세그먼트 경계에 있는 기본 콘텐츠에서 삭제할 수 있습니다 마찬가지로 SNAP 속성을 IN 값과 함께 사용하여 광고 반환 시간에 가장 가까운 기본 콘텐츠에 다시 끼워넣을 수 있습니다 사전 패키징된 VOD 콘텐츠를 다룰 때는 이러한 클럭 드리프트의 개념이 존재해서는 안 되므로 라이브 시나리오에서만 SNAP 속성을 사용하는 것이 좋습니다.
여기 광고가 스냅아웃과 스냅인으로 모두 예약된 라이브 재생목록이 표시중입니다 올해에는 광고 인벤토리와 세션 관리를 최적화하는 데 도움이 되는 몇 가지 쿼리 매개변수도 추가되었습니다 이제 광고 모음의 중간에 있는 라이브 스트림으로 조정할 때 남은 시간에 가장 가치 있는 인벤토리를 표시할 수 있도록 해당 광고 모음이 얼마나 진행되었는지 알고 싶을 것입니다
이를 위해 HLS_start_offset 쿼리 매개변수를 추가했습니다 HLS_start_offset 쿼리 매개변수는 전면 광고의 자산 목록 URL 요청과 함께 제공됩니다 라이브 콘텐츠의 경우 라이브 스트림에 합류할 때 재생이 시작되는 자산 목록의 오프셋을 지정합니다 그리고 주문형 비디오 콘텐츠의 경우 전면 광고로 대체된 구역을 찾을 때 자산 목록으로 오프셋됩니다
이 샘플에는 재생 목록 상단에서 5초 후에 시작하도록 예약된 15초 광고가 있는 라이브 재생 목록이 있습니다 여기에 표시된 강조 표시된 세그먼트는 전면 광고로 대체됩니다 이제 라이브 조인 중에 클라이언트는 일반적으로 라이브 에지 뒤에 약 3개의 대상 기간이 있습니다 그 시점에서 예약된 15초 광고 포드는 10초 동안 재생되었을 것입니다 따라서 이것은 HLS_Start_offset 쿼리 매개변수의 일부로 제공됩니다 이제 클라이언트에게 남은 광고 시간은 5초뿐이므로 서버는 자산 목록을 구성하여 목록의 마지막 5초에 가장 가치 있는 광고를 배치할 수 있습니다
서버에서 동일한 광고를 반복해서 제공하지 않도록 여러 광고 요청시 동일한 재생 세션을 추적하는 방법이 필요할 수 있습니다 따라서 광고 요청을 기본 재생 세션과 연결하기 위해 HLS_primary_id 쿼리 매개변수를 추가했습니다 클라이언트가 특정 재생 세션의 모든 http 요청에 대해 재생 세션 ID 요청 헤더를 설정하면 HLS_primary_id 쿼리 매개변수의 일부로 이 세션 ID를 X-Asset-URI 및 X-Asset-List 요청에 제공할 수 있습니다 세션 ID 요청 헤더를 설정하지 않은 클라이언트는 모든 기본 재생 세션에 대해 고유한 값을 생성하고 이를 기본 및 전면 애셋 요청 모두에 대한 HLS_primary_id 쿼리 매개변수로 사용해야 합니다 AVFoundation이 클라이언트 측에서 광고를 예약할 수 있는 AVPlayerInterstitialController 및 AVPlayerInterstitialEvent 개체를 제공한다는 것을 기억하실 겁니다 이제 AVPlayerInterstitialEvent 객체에도 큐 및 SNAP 옵션에 대한 지원을 추가했습니다 Cue 속성을 통해 광고를 프리롤로 예약할지 스트롤로 예약할지 여부에 따라 큐 옵션을 지정할 수 있습니다 날짜 범위 태그의 Cue 속성을 통해 신호를 받는 한 번 재생 옵션은 willPlayOnce 속성을 통해 Boolean으로 설정됩니다 스냅아웃에 대한 옵션은 alignsStartWithPrimarySegmentBoundary 속성을 통해 신호를 받고 스냅인에 대한 신호는 alignsResumptionWithPrimarySegmentBoundary 속성을 설정합니다
AVPlayerInterstitialEvent가 계속해서 성장함에 따라 속성 설정을 객체 생성과 분리하는 것이 더 나을 수 있다고 판단해서 이제 AVPlayerInterstitialEvent 객체를 변경할 수 있게 만들었습니다 이제 기본 항목과 이벤트 시작 시간으로 개체를 생성할 수 있습니다 그런 다음 관련 속성을 설정하여 다양한 구성 옵션을 지정할 수 있습니다 컨트롤러에서 이벤트가 설정되면 자체내에서 이벤트 개체의 복사본을 만들기 때문에 이벤트 개체에 대한 모든 후속 변경 사항은 컨트롤러에 반영되지 않습니다 변경 사항을 적용하려면 컨트롤러에서 이벤트를 다시 설정해야 합니다 정리하면, 이제 X-CUE 속성을 사용하여 광고를 프리롤 또는 또는 포스트롤로 예약할 수 있습니다 X-CUE를 한 번으로 설정하여 광고가 한 번만 재생되도록 할 수도 있습니다 라이브 시나리오에서 클락 드리프트를 관리하려면 X-SNAP 속성을 사용합니다 라이브 조인 중 자산 목록을 구성하려면 HLS_start_offset 쿼리 매개변수를 사용하 HLS_primary_id 쿼리 매개변수를 사용하여 전면 광고 요청을 기본 재생 세션과 연결합니다 HLS 전면 광고를 사용하여 광고를 예약하면 AVFoundation이 Shareplay에 있는 동안 광고를 자동으로 관리한다는 사실을 알고 계셨나요? 자세한 내용은 "SharePlay의 디스플레이 광고 및 "SharePlay의 디스플레이 광고 및 기타 전면광고" 강연을 확인하세요 세션을 마치겠습니다 감사합니다
-
-
7:58 - Client schedules an ad pod at 10s into primary asset
// Client schedules an ad pod at 10s into primary asset let player = AVPlayer( url: movieURL ) // no ads in primary asset let controller = AVPlayerInterstitialEventController( primaryPlayer: player ) let adPodTemplates = [AVPlayerItem( url: ad1URL ), AVPlayerItem( url: ad2URL )] let event = AVPlayerInterstitialEvent( primaryItem: player.currentItem, time: CMTime( seconds: 10, preferredTimescale: 1 ), ) event.templateItems = adPodTemplates event.identifier = "Ad1" event.restrictions = [] event.resumptionOffset = .zero event.playoutLimit = .invalid event.cue = .none controller.events = [event] player.currentItem.translatesPlayerInterstitialEvents = true let vc = AVPlayerViewController() vc.player = player player.play()
-
-
찾고 계신 콘텐츠가 있나요? 위에 주제를 입력하고 원하는 내용을 바로 검색해 보세요.
쿼리를 제출하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도해 주세요.