스트리밍은 대부분의 브라우저와
Developer 앱에서 사용할 수 있습니다.
-
HLS Content Steering으로 안정적인 스트림 제공
HLS Content Steering은 로드 및 이중화를 기준으로 클라이언트를 다른 서버로 동적으로 안내합니다. 이 프레임워크에 대한 최신 업데이트를 안내하고, Pathway Cloning을 통해 동적으로 생성된 CDN을 기존 HLS 클라이언트에 도입하는 방법을 살펴보겠습니다. 또한 버킷 기반 Steering Server 규칙 등을 통해 글로벌 트래픽 조정을 실현할 수 있는 방법을 소개합니다.
리소스
관련 비디오
WWDC21
-
다운로드
♪ ♪
안녕하세요 WWDC에 오신 것을 환영합니다 저는 Apple AVFoundation 팀의 Zheng Naiwei입니다 이 세션에서는 HLS Content Steering에 추가된 새로운 기능인 스트리밍 전송 안정성을 개선하는 방법에 대해 이야기할 것입니다
오늘은 세 가지 주제를 다룰 것입니다 Content Steering에 대해 들어본 적이 없더라도 걱정하지 마세요 이는 스트리밍 서비스 품질을 향상시키기 위해 스트리밍 트래픽을 동적으로 조정할 수 있는 HLS 기술입니다 이해하기 쉽도록 간략한 리뷰를 드린 후
스트리밍 서비스의 안정성을 더욱 향상시키기 위해 제한 없는 동적 조정 기능을 제공할 수 있는 새로운 경로 복제 기능을 소개하겠습니다
마지막으로 구체적인 예를 들어 차근차근 안내해 드리겠습니다 자 그럼 시작해볼까요?
Content Steering이 없었던 시절로 돌아가보죠 오류 폴백의 경우 변형 선택이 HLS 사양에서 표준화되지 않았습니다 그리고 다른 클라이언트 구현 시 다음 폴백을 선택할 때 다르게 작동할 수 있습니다 그러나 이를 수행하는 일반적인 방법은 다변종 재생 목록의 변형 순서를 따르는 것입니다 스트리밍 공급자가 대체 CDN 세트를 지정하려는 경우 모든 CDN의 모든 변종을 나열하고 다변형 재생 목록에 적절하게 정렬해야 합니다 이렇게 하면 클라이언트 플레이어가 첫 번째 변형에서 오류가 발생한 경우 재생 목록의 다음 변형으로 이동할 수 있으며 실패한 변형은 선택에서 패널티를 받습니다 이 경우 클라이언트 플레이어는 CDN1의 6Mbps 변형에 문제가 있어 다중 변형 재생 목록의 순서에 따라 CDN1의 다음 3Mbps 변형으로 이동했음을 알 수 있습니다 불행히도 CDN1의 3Mbps 변형도 실패하면 클라이언트 플레이어에는 CDN1의 변형이 남지 않고 CDN2의 6Mbps 변형으로 이동합니다 대체할 변형이 없을 때까지 계속해서 이 작업을 수행할 수 있습니다 재생 목록 제작 서버가 대체 변형의 순서를 제어할 수 있지만 이러한 제어는 클라이언트가 다중 변형 재생 목록을 요청하는 시점에서만 발생하며 재생 목록이 전달되면 대체 순서를 변경할 방법이 없습니다 여기서 Content Steering이 등장합니다 Content Steering을 통해 스트리밍 공급자는 이제 변형을 다른 CDN 호스트가 있는 Pathways로 그룹화할 수 있습니다
오류 폴백 동작은 이제 Content Steering에 표준화되었습니다 경로는 선호도에 따라 정렬됩니다 이 예에서는 CDN2 및 CDN3 다음으로 상단의 CDN1 경로가 가장 선호됩니다 스트리밍 공급자는 또한 각 클라이언트 플레이어에 대한 Steering Manifest를 생성하는 Streering Server를 호스팅합니다 Steering Manifest는 Pathway 우선순위 규칙을 정의하므로 플레이어는 변형 스트림을 선택하고 대체할 때 규칙을 따를 수 있습니다 예를 들어 스트리밍 공급자가 CDN1에서 CND2로 일부 트래픽을 오프로드하려고 한다고 가정해 보죠 새로운 Pathway 우선 순위 규칙으로 Steering Manifest를 생성하고 CDN1에서 재생하는 클라이언트 플레이어가 Steering Manifest 업데이트를 요청할 때 Steering Server는 규칙 변경 사항이 포함된 준비된 Steering Manifest를 클라이언트에 보낼 수 있습니다 클라이언트는 새로운 경로 우선 순위 규칙을 구문 분석하고 확인한 다음 재생 세션에 적용합니다 이 경우 규칙 변경은 Pathway CDN1과 CDN2 간에 기본 설정 순서를 전환하여 클라이언트 플레이어가 즉시 CDN2에서 전환하고 재생하도록 합니다 그런 다음 장애가 발생한 경우 클라이언트는 먼저 현재 경로 내에서 대체 변형을 소진하고 현재 경로 우선 순위에 따라 가장 선호하는 경로로 대체합니다 CDN2의 모든 변형에 오류가 발생한 경우 클라이언트 플레이어는 다음으로 선호되는 경로인 CDN1의 변형 중에서 선택할 수 있습니다 Content Steering을 글로벌 규모에 적용하면 더 큰 지역적 로드 밸런싱 문제를 해결할 수 있습니다 스트리밍 서비스 제공업체가 두 개의 주요 CDN 제공업체와 함께 전 세계에서 운영되고 있다고 가정해 보겠습니다 이러한 CDN을 전 세계적으로 클라이언트 플레이어에게 Steering Server는 두 개의 서로 다른 Streering Manifest를 준비했습니다 하나는 CDN1을 선호하고 다른 하나는 CDN2를 선호하죠 그런 다음 북미와 남미는 CDN1을 사용하고 나머지 세계는 CDN2를 사용하도록 클라이언트 플레이어의 지역을 기반으로 이러한 Sterring Manifest를 배포합니다 세계 지도의 상단에는 CDN1과 CDN2 간의 트래픽 분포를 나타내는 가로 막대가 표시됩니다 현재 두 CDN은 전 세계 트래픽의 절반을 처리하고 있습니다 그러나 시간이 지남에 따라 스트리밍 서비스 공급자는 글로벌 일광 변화로 인해 CDN2에 대한 트래픽이 크게 증가하는 것을 관찰했습니다 동시에 CDN1을 향한 트래픽은 감소하고 있습니다
그래서 스트리밍 공급자는 CDN1을 사용하도록 유럽 지역을 조정하기로 결정했습니다 CDN1을 선호하는 Steering Manifest를 준비하여 이를 유럽 지역의 클라이언트에게 보냅니다 제 해당 지역의 클라이언트 플레이어가 트래픽을 CDN1로 조정하고 CDN2에서 오프로드합니다 그 결과 글로벌 트래픽이 더 균형을 이루게 되었습니다 이제 Content Steering이 지원되는 HLS multivariant 재생 목록을 살펴보겠습니다 먼저 이 다변형 재생 목록이 Content Steering을 사용함을 나타내는 EXT-X-CONTENT-STEERING 태그가 표시됩니다 다음으로 SERVER-URI 속성은 클라이언트가 Steering Manifest 업데이트를 요청해야 하는 위치를 지정합니다
그리고 다음의 PATHWAY-ID 속성은 시작 시 재생을 위해 선택할 초기 경로를 지정합니다 그런 다음 각 변형 스트림에 PATHWAY-ID 속성이 지정되어 이를 Pathways로 그룹화한 것을 볼 수 있습니다 각 경로에는 URI와 미디어 그룹의 이름만 다를 뿐 동일한 변형 스트림의 집합이 있어야 합니다 이 예에서는 두 개의 경로 즉 CDN1과 CDN2가 있습니다 둘 다 6Mbps 고해상도 비디오와 3Mbps 저해상도 비디오의 두 가지 변형 스트림을 포함합니다 유일한 차이점은 URI 호스트 이름뿐입니다 또한 URI 호스트 이름이 서로 다른 각 Pathway에 상응하는 두 개의 고유한 오디오 그룹이 있습니다 다음은 JSON 문서인 Steering Manifest의 예입니다 PATHWAY-PRIORITY 필드는 우선 순위의 경로 ID 목록입니다 따라서 이 경우 수신 클라이언트 플레이어는 CDN2보다 CDN1을 선호합니다. 이것은 유럽 클라이언트가 CDN1을 선호하도록 하기 위해 Steering Server가 제공하는 Steering Manifest입니다 Steering Manifest에서 PATHWAY- PRIORITY 필드를 변경함으로써 Steering Server는 모든 클라이언트에 대한 조정 정책을 제어할 수 있습니다 여기까지가 Content Steering에 대한 간략한 개요입니다 더 자세한 설명을 원하시면 제가 준비한 WWDC21 강연인 'HLS Content Steering으로 글로벌 스트리밍 가용성 향상'을 참조하세요 더 확장 가능하고 안정적인 스트리밍 서비스 지원을 위한 노력은 여기서 멈추지 않습니다 오늘날 기업들은 과거에는 상상도 못했던 일들을 달성하기 위해 더 다양한 클라우드 인프라와 도구에 액세스할 수 있기 때문에 우리는 기술의 도약을 따라잡아야 합니다 당사의 스트리밍 서비스 제공업체가 올해 더 크게 성장했으며 증가하는 사용자 기반의 동적 트래픽 수요를 충족시키기 위해 새로운 방법을 실험하고 있다고 가정해 보겠습니다 일시적인 트래픽 스트레스를 완화하기 위해 실시간으로 CDN 서버를 동적으로 생성하여 이를 수행하고 있습니다 예를 들어, 새로운 CDN3 집합을 생성하고 이를 기존 클라이언트에 알리고자 할 수 있습니다 그러나 여기서 문제는 기존 클라이언트가 요청했을 때 동적으로 생성된 CDN 정보가 다변형 재생 목록에 포함되지 않는다는 것입니다 왜냐하면 그것이 존재하지 않았기 때문입니다 클라이언트 플레이어에게 새로운 CDN의 출현을 알리려면 무엇을 해야할까요? 여기에서 우리의 새로운 Pathway Cloning이 유용하게 사용됩니다 WWDC21에 도입된 Content Steering 1.2와의 역호환성이 있는 새로운 기능입니다 경로 복제를 통해 Steering Server는 압축 Manifest 정의를 사용하여 기존 클라이언트에 새 CDN을 알릴 수 있습니다 Pathways 구조가 동일하다고 가정하면 기존 Pathways를 복사하고 수정하여 새 Pathways를 만들 수 있습니다 Pathway의 구조를 살펴보겠습니다 Pathway는 하나 이상의 변형 스트림으로 구성됩니다 각 변형 스트림은 하나의 경로에만 있을 수 있습니다 PATHWAY-ID 속성을 지정하지 않으면 기본적으로 "." Pathway를 암시합니다 각 변형 스트림은 오디오, 자막 및 폐쇄 자막 중 각 미디어 유형에 대해 0개 또는 1개의 미디어 그룹을 참조할 수 있습니다 각 미디어 그룹은 다른 경로에서라도 여러 변형 스트림에서 참조할 수 있습니다 기존 Pathway에서 새 Pathway를 복제할 때 변형 스트림뿐만 아니라 참조된 미디어 그룹이 있다면 이도 복제해야 합니다
그런 다음 새 Pathway로 만들려면 새로 복제된 Pathway의 변형 및 변환 스트림의 URI를 수정해야 합니다 복제된 Pathway에서 6Mbps 변형 스트림을 예로 들어 보겠습니다
이 특정 변형 스트림에 다음과 같은 URI가 있다고 가정해 보겠습니다 새로운 Pathway의 URI가 되도록 수정하는 가장 유연한 방법은 전체 URI 줄을 통째로 바꾸는 것입니다 즉, 복제된 각 경로에 해당하는 스티어링 매니페스트에 전체 URI 세트를 저장해야 합니다 그러나 실제로는 일반적으로 이를 능가할 수 있죠 업계에서는 동일한 URI 경로 구조를 유지하는 여러 CDN에 스트리밍 자산을 배포하는 것이 일반적입니다 그리고 동일한 URI에서 제공되는 자산은 동일한 URI 호스트 이름과 쿼리 매개변수를 공유합니다 이 경우 호스트 및 쿼리 매개변수의 교체를 매니페스트에 저장하고 복제된 모든 URI의 구성요소를 교체하기만 하면 새로운 Pathway가 생성됩니다
매니페스트 개체에서 경로 복제를 정의하는 방법을 살펴보겠습니다 Pathway Clone 개체의 배열과 함께 PATHWAY-CLONES 필드를 추가했습니다 Pathway Clone 개체는 기존 Pathway에서 복제된 새 Pathway를 정의합니다 이 예에는 하나의 Pathway Clone 개체가 있습니다 BASE-ID 필드는 복제할 원본 경로가 될 CDN1을 지정합니다 ID 필드는 CDN3이 될 새 경로 ID를 지정합니다 다음으로 URI 교체 규칙의 객체가 있는 URI-REPLACEMENT 필드가 있습니다
이 예에서는 호스트 부분을 대체하고 스트림 URI의 쿼리 매개변수를 각각 삽입하거나 대체해야 하는 HOST 및 쿼리 매개변수 대체 규칙을 사용하고 있습니다 이 경우 호스트 부분을 cdn3.example.com으로 교체하고 쿼리 매개변수 foo를 xyz 값으로 추가하거나 설정하고 쿼리 매개변수 bar 값을 123으로 설정합니다
이전에 호스트 및 매개변수 URI 교체를 예시 URI에 적용해 보겠습니다 먼저 다변형 재생 목록의 URI를 기반으로 해결된 변형 스트림 URI가 있습니다
Steering Manifest에서는 HOST URI 교체 규칙을 사용했습니다 따라서 URI의 호스트 부분에 대해 cdn3.example.com으로 교체하고 새 URI에 대한 새 호스트 부분을 얻었습니다
그런 다음 복제된 URI의 URI 경로 구성 요소를 유지합니다
마지막으로 URI 쿼리 매개변수 교체 규칙을 적용합니다 여기서 foo 매개변수는 원래 URI에 있기 때문에 교체합니다 그런 다음 새로운 매개변수이기 때문에 bar 매개변수를 추가합니다 그런 다음 새 URI의 쿼리 매개변수 부분을 교체했습니다 최종 결과 URI는 새로운 Pathway CDN3의 6Mbps 변형 스트림에 대한 URI입니다
복제된 Pathway의 나머지 변형 및 변환에 동일한 URI 교체 규칙을 적용합니다 3Mbps 변형 스트림의 경우 원래 URI가 있고 호스트 및 매개변수 대체 규칙을 적용하여 새 URI를 가져옵니다 오디오 및 자막 변환에 대해서도 동일한 작업을 수행합니다 모든 복제된 변형 및 변환에 URI 교체 규칙을 적용하면 새 CDN 호스트에서 제공하는 새 경로가 생깁니다 다른 예로, 스트리밍 공급자가 다른 낮은 비트 전송률 스트림과 달리 특별히 조정된 가장 빠른 CDN 호스트에서 가장 높은 대역폭의 비디오 및 오디오 스트림을 제공하려고 한다고 가정해 보겠습니다 여기에서 안정 ID별 URI 교체 규칙이 유용합니다 HLS에서는 변형 및 변환 스트림을 식별하기 위해 STABLE-VARIANT-ID 및 STABLE-RENDITION-ID 속성이 도입되었습니다 다변형 재생 목록에서 설정하면 나중에 Pathway Clone 개체, Steering Manifest에서 안정적인 ID로 각 변형 또는 변환 스트림을 참조하고 스트림별 URI 교체 규칙을 할당할 수 있습니다 이러한 특정 특수 URI 대체 규칙을 정의하려면 다중 변형 재생 목록의 모든 변형 및 변환 스트림에 안정적인 ID를 할당해야 합니다 예를 들어 STABLE-RENDITION-ID "audio-en-ac3"을 AC3 영어 오디오에 할당하고 STABLE-VARIANT-ID "video-4k-dv"를 25Mbps 4K 변형 스트림에 할당합니다 그런 다음 Steering Manifest에서 안정적인 ID를 참조하여 두 가지 유연한 교체 규칙을 추가할 수 있습니다 변형 스트림의 경우 URI 레코드에 STABLE-VARIANT-ID 사전과 함께 "URI-REPLACEMENT" 개체에 "PER-VARIANT-URIS" 필드를 추가했습니다 여기에서 변형 스트림의 URI를 STABLE-VARIANT-ID "video-4k-dv"로 다음 URI로 바꾸도록 지정합니다 변환 스트림의 경우 URI 레코드에 STABLE-RENDITION-ID 사전과 함께 "URI-REPLACEMENT" 개체에 "PER-RENDITION-URIS" 필드를 추가했습니다 여기에서 STABLE-RENDITION-ID "audio-en-ac3"으로 변환 스트림의 URI를 다음 URI로 바꾸도록 지정합니다
여기에서 URI 교체를 적용한 후 4K 비디오 변형 및 AC3 영어 오디오 변환을 제외한 모든 스트림이 새로운 cdn3.exmapple.com 호스트에서 제공되고 있음을 알 수 있습니다 여기에는 fast.example.com 호스트와 다른 URI 경로 및 쿼리 구성 요소를 가리키는 특수 URI 대체 규칙이 있습니다
경로 복제를 사용하면 스트리밍 공급자가 새 CDN 집합 이 예에서는 CDN3을 동적으로 생성할 때 Steering Server는 Steering Manifest에서 기존 클라이언트에 대한 경로 복제로 CDN3을 추가할 수 있습니다 또한 유럽과 같은 지역을 선택하여 기본 경로로 CDN3의 우선 순위를 지정할 수도 있습니다 유럽의 클라이언트가 Steering Manifest 업데이트를 받으면 트래픽을 CDN3으로 조정합니다 이 강연의 마지막 부분에서는 로드 밸런싱을 위해 클라이언트 레이어의 트래픽 조정의 구체적인 예와 서버 논리를 구현하는 방법을 설명하기 위해 Steering Server의 세부 사항으로 초점을 전환하겠습니다 쇄도하는 클라이언트 플레이어를 관리 및 조정하고 분할된 규칙을 적용하는 한 가지 방법은 모든 클라이언트를 하나의 버킷에 넣고 버킷의 수준에서 규칙을 적용하는 것입니다 클라이언트 세션 상태를 유지하지 않고 Steering Server에서 버킷팅을 구현하는 것은 간단합니다 클라이언트 플레이어가 초기 Steering Manifest를 요청할 때 Steering Server URI에서 HTTP GET 요청을 합니다 그런 다음 서버는 12개의 가능한 버킷 중에서 균일한 난수를 생성합니다 스티어링 매니페스트를 반환할 때 서버는 클라이언트 플레이어의 다음 요청에 대한 스티어링 매니페스트 URI가 될 RELOAD-URI 속성에 버킷 번호, 이 경우에는 7을 추가합니다 다음 번에 클라이언트 플레이어가 스티어링 매니페스트를 요청할 때 요청 매개변수에 버킷 번호를 전달하고 서버가 이를 추출하고 버킷 번호를 기반으로 스티어링 규칙을 적용할 수 있도록 합니다 이제 간단한 이중 분할 조정 규칙을 살펴보겠습니다 이 경우 50% 트래픽이 CDN1을 선호하도록 조정하고 나머지 50% 트래픽은 CDN2를 선호하도록 조정하려고 합니다 버킷 번호로 이러한 규칙을 작성할 수 있습니다 클라이언트 플레이어의 버킷 번호가 처음 6개 버킷에 속하면 PATHWAY-PRIORITY가 CDN1을 선호하는 스티어링 매니페스트를 반환하고 그렇지 않으면 PATHWAY-PRIORITY가 CDN2를 선호하는 것을 반환합니다 클라이언트는 버킷에 균일하게 할당되므로 12개의 버킷을 6개의 버킷으로 나누면 트래픽을 균등하게 이분할 수 있습니다
이제 CDN3이라는 새로운 Pathway가 동적으로 생성된다고 가정해 보죠 Steering Server는 Pathway 복제를 사용하여 클라이언트가 다변형 재생 목록에서 이를 알지 못하는 클라이언트에게 광고할 수 있습니다 경로 복제로 스티어링 매니페스트를 구성할 때 일반적인 질문은 PATHWAY-CLONES 배열에 포함해야 하는 경로 집합을 결정하는 것입니다 규칙은 클라이언트의 다변형 재생 목록에 없는 경로를 복제하는 것입니다 그러나 클라이언트 세션에 대한 서버 측 상태를 유지하지 않고 Steering Server가 클라이언트의 다변형 재생 목록에 있는 경로 집합을 어떻게 알 수 있을까요?
이를 수행하는 한 가지 방법은 다변형 재생 목록을 생성하는 동안 쿼리 매개 변수로 초기 조정 서버 URI에 경로 집합을 포함하는 것입니다 이 경우 다변형 재생 목록에는 CDN1 및 CDN2의 두 경로가 포함됩니다 따라서 쿼리 매개변수로 SERVER-URI 속성에 포함됩니다 그런 다음 클라이언트 플레이어는 요청을 URI로 보내 매개변수를 조정 서버로 전달합니다 그런 다음 조정 서버는 클라이언트의 다변형 재생 목록에서 경로 집합으로 매개변수를 추출할 수 있습니다 그런 다음 클라이언트의 다변형 재생 목록에 있는 경로 집합과 함께 사용 가능한 경로 집합을 빼서 복제할 경로 집합을 계산할 수 있습니다 이 경우 사용 가능한 경로는 CDN1, 2 및 3이고 클라이언트의 다변형 재생 목록의 경로는 CDN1 및 CDN2이므로 PATHWAY-CLONES 배열에 포함해야 하는 경로는 CDN3입니다
또한 사용 가능한 경로가 세 개 있을 때 Steering Server가 조정 규칙을 변경할 수 있는 방법도 살펴보겠습니다 이 경우 서버는 클라이언트 트래픽을 CDN1, 2, 3에 균등하게 분할하기를 원합니다 클라이언트의 버킷 번호가 12개 버킷 중 첫 번째 1/3에 해당하는 경우 CDN1을 선호하는 PATHWAY-PRIORITY를 반환하고 PATHWAY를 반환하여 이 규칙을 작성합니다 클라이언트의 버킷 번호가 두 번째, 세 번째 범위에 속하면 CDN2를 선호하는 PRIORITY이고 그렇지 않으면 CDN3을 선호하는 PATHWAY-PRIORITY를 반환합니다 이런 식으로 각 Pathway는 클라이언트 트래픽의 1/3을 처리합니다 우리가 다룬 모든 내용을 통해 이제 자신의 동적인 조정 규칙을 사용하여 Steering Server를 구축할 수 있는 모든 준비가 완료되었습니다 그렇게 하면 스트리밍 서비스의 안정성을 더욱 향상시킬 수 있습니다
여기까지가 올해 Content Steering에 관한 업데이트 내용입니다. 아직 하지 않았다면 HLS CDN 대체 메커니즘으로 Content Steering을 채택해 보세요 이는 기능이 다양하고 동적 트래픽 조정을 가능하게 합니다 서비스의 안정성을 개선하기 위해 새로운 경로 복제 기능도 활용해 보세요 일반적으로 최신 IETF HLS 사양에서 자세한 기술 정보를 확인하세요 또한 HTTP 라이브 스트리밍 도구를 활용하여 재생 목록을 변경할 때 유효성을 확인하는 것도 잊지 마세요 마지막으로 질문이나 제안 사항이 더 있으시면 언제든지 hls-interest@ietf.org로 연락해 주세요 참여해 주셔서 감사합니다, 좋은 하루 되세요
-
-
찾고 계신 콘텐츠가 있나요? 위에 주제를 입력하고 원하는 내용을 바로 검색해 보세요.
쿼리를 제출하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도해 주세요.