웹 수신기 플레이어 스트리밍 프로토콜

웹 수신기 SDK는 세 가지 유형을 지원합니다. 오늘날 스트리밍 프로토콜의 핵심은 다음과 같습니다.

DASH, HTTP 라이브 스트리밍 <ph type="x-smartling-placeholder"></ph> 원활한 스트리밍

이 문서에서는 각 스트리밍 프로토콜에 대한 지원에 대해 설명합니다. 참고 각 프로토콜에서 지원되는 태그에 대한 설명은 매우 축약되어 있습니다. 세부 프로토콜 사양과 비교할 수 있습니다. 목표는 고객에게 각 프로토콜의 사용 방법 및 기능에 대한 간략한 소개 및 이해 이 프로토콜은 Cast 지원 기기에서 지원되어 스트리밍 환경도 제공합니다

HTTP 동적 적응형 스트리밍 (DASH)

ISO DASH의 세부 사양.

DASH는 고품질 동영상을 가능하게 하는 적응형 비트 전송률 스트리밍 프로토콜입니다. HTTP(S) 서버를 통해 스트리밍하게 됩니다 XML로 구성되는 매니페스트는 대부분의 파일을 동영상 초기화 및 다운로드 방법에 대한 메타데이터 정보 있습니다. 웹 수신기 플레이어에서 지원하는 주요 개념은 <Period>입니다. <AdaptationSet>, <Representation>, <SegmentTemplate> <SegmentList>, <BaseUrl>, <ContentProtection>

DASH 매니페스트는 루트 <MPD> 태그로 시작하며, 그 안에 하나 이상의 1개의 스트리밍 콘텐츠를 나타내는 <Period> 태그가 더 많음 <Period> 태그를 사용하면 다양한 스트리밍 콘텐츠를 정렬할 수 있습니다. 주요 콘텐츠와 광고를 구분하거나 연속 동영상 콘텐츠입니다.

<MPD> 아래의 <AdaptationSet>는 한 가지 유형의 미디어 스트림으로, 대부분의 경우 동영상, 오디오 또는 자막입니다. 가장 일반적으로 지원되는 mimetype은 'video/mp4', 'audio/mp4' 및 'text/vtt'입니다. 선택사항인 <ContentComponent contentType="$TYPE$">를 포함할 수 있습니다. <AdaptationSet> 미만

<AdaptationSet> 내에서 <Representation> 태그 목록이 다음을 실행해야 합니다. 웹 수신기 플레이어는 codecs 정보를 사용하여 MSE 소스 버퍼와 bandwidth 정보를 초기화하여 재생에 적합한 표현/비트 전송률을 자동으로 선택합니다.

<Representation>의 경우 미디어 세그먼트는 다음 중 하나를 사용하여 설명됩니다. 단일 세그먼트 표현을 위한 <BaseURL>, 단일 세그먼트 표현의 경우 <SegmentList> 세그먼트 목록 (HLS와 유사) 또는 <SegmentTemplate>입니다.

<SegmentTemplate>의 경우 초기화 세그먼트와 미디어 세그먼트는 템플릿을 통해 표현할 수 있습니다. 아래 예에서 $Number$는 CDN에서 사용할 수 있는 세그먼트 번호를 나타냅니다. 따라서 재생이 계속됨에 따라 seg1.m4s, seg2.m4s 등으로 변환됩니다.

<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:ns2="http://www.w3.org/1999/xlink"
  profiles="urn:mpeg:dash:profile:isoff-live:2011,http://dashif.org/guidelines/dash264" type="static"
  publishTime="2016-10-05T22:07:14.859Z" mediaPresentationDuration="P1DT0H0M0.000S" minBufferTime="P0DT0H0M7.500S">
  <Period id="P0">
    <AdaptationSet lang="en" segmentAlignment="true">
      <ContentComponent id="1" contentType="audio"/>
      <SegmentTemplate media="seg$Number$.m4s" initialization="seginit.mp4"
        duration="10000" startNumber="1" timescale="1000" presentationTimeOffset="0"/>
      <Representation id="1" bandwidth="150123" audioSamplingRate="44100"
        mimeType="audio/mp4" codecs="mp4a.40.2" startWithSAP="1">
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
        <BaseURL>http://www.google.com/testVideo</BaseURL>
      </Representation>
    </AdaptationSet>
    <AdaptationSet segmentAlignment="true">
      <ContentComponent id="1" contentType="video"/>
      <SegmentTemplate media="seg$Number$.m4s" initialization="seginit.mp4"
        duration="10000" startNumber="1" timescale="1000" presentationTimeOffset="0"/>
      <Representation id="1" bandwidth="212191" width="384" height="208" sar="26:27"
        frameRate="25" mimeType="video/mp4" codecs="avc1.42c01f" startWithSAP="1">
        <BaseURL>http://www.google.com/testVideo/bitrate1/</BaseURL>
      </Representation>
      <Representation id="1" bandwidth="366954" width="512" height="288" sar="1:1"
        frameRate="25" mimeType="video/mp4" codecs="avc1.42c01f" startWithSAP="1">
        <BaseURL>http://www.google.com/testVideo/bitrate2/</BaseURL>
      </Representation>
      <Representation id="1" bandwidth="673914" width="640" height="352" sar="44:45"
        frameRate="25" mimeType="video/mp4" codecs="avc1.42c01f" startWithSAP="1">
        <BaseURL>http://www.google.com/testVideo/bitrate3/</BaseURL>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>

<SegmentTemplate>의 경우 일반적으로 <SegmentTimeline> 태그를 사용하여 각 구간의 길이와 반복 구간을 표시합니다. timescale (1초를 나타내는 단위)는 <SegmentTemplate>를 곱하면 확인할 수 있습니다 아래 예에서 <S> 태그는 세그먼트 태그를 나타내며, d 속성은 세그먼트의 길이와 r 속성을 지정합니다. $Time$에 해당하는 동일한 길이의 구간이 몇 개까지 반복되는지 지정합니다. 미디어 세그먼트 다운로드를 위해 media 속성

<SegmentTemplate>
  timescale="48000"
  initialization="$RepresentationID$-init.dash"
  media="$RepresentationID$-$Time$.dash"
    startNumber="1">
    <SegmentTimeline>
      <S t="0" d="96256" r="2" />
      <S d="95232" />
      <S d="96256" r="2" />
      <S d="95232" />
      <S d="96256" r="2" />
   </SegmentTimeline>
</SegmentTemplate>

다음은 <SegmentList>를 사용한 표현의 예입니다.

<Representation id="FirstRep" bandwidth="2000000" width="1280"
  height="720">
  <BaseURL>FirstRep/</BaseURL>
  <SegmentList timescale="90000" duration="270000">
     <RepresentationIndex sourceURL="representation-index.sidx"/>
     <SegmentURL media="seg-1.ts"/>
     <SegmentURL media="seg-2.ts"/>
     <SegmentURL media="seg-3.ts"/>
  </SegmentList>
</Representation>

단일 세그먼트 파일의 경우 <SegmentBase>는 종종 바이트와 함께 사용됩니다. <BaseURL> 파일에서 나머지는 재생이 계속되거나 탐색이 진행될 때 필요에 따라 가져올 수 있습니다. 정의합니다 여기서 Initialization 범위는 init 메타데이터 범위를 지정합니다. indexRange는 미디어 세그먼트의 색인을 지정합니다. 참고: 현재는 연속 바이트 범위만 지원합니다.

<Representation bandwidth="4190760" codecs="avc1.640028"
  height="1080" id="1" mimeType="video/mp4" width="1920">
  <BaseURL>video.mp4<BaseURL>
  <SegmentBase indexRange="674-1149">
    <Initialization range="0-673" />
  </SegmentBase>
</Representation>

사용되는 표현에 관계없이 스트림이 보호되는 경우 <ContentProtection> 섹션은 <AdaptationSet> 아래에 표시될 수 있습니다. 여기서 schemeIdUri는 사용할 DRM 시스템을 고유하게 식별합니다. 일반적인 암호화에 키 ID(선택사항)를 포함할 수 있습니다.

<!-- Common Encryption -->
<ContentProtection
  schemeIdUri="urn:mpeg:dash:mp4protection:2011"
  value="cenc"
  cenc:default_KID="7D2714D0-552D-41F5-AD56-8DD9592FF891">
</ContentProtection>

<!-- Widevine -->
<ContentProtection
  schemeIdUri="urn:uuid:EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED">
</ContentProtection>

더 많은 예와 자세한 내용은 MPEG-DASH 사양을 참조하세요. 다음은 위에 언급되지 않은 태그의 추가 DASH 속성 목록입니다. 다음과 같습니다.

속성 이름 속성 함수
mediaPresentationDuration 동영상 콘텐츠의 길이
minimumUpdatePeriod <MPD> 태그의 속성 디코더가 얼마나 자주 매니페스트를 새로고침합니다
유형 <MPD> 태그의 속성 '동적' 긍정적, 부정적이라는 라이브 스트림입니다.
presentationTimeOffset <SegmentBase> 태그의 속성 는 기간의 시작부터 프레젠테이션 시간 오프셋입니다.
startNumber 프레젠테이션의 첫 번째 미디어 세그먼트 번호를 있습니다. 라이브 스트림에서 자주 사용됩니다.

또한 DASH 및EMSG 제공 EmsgEvent 개발자에게 맡기세요

현재 웹 수신기 플레이어는 주요 DASH 사용 사례를 지원하지만 여기서는 DASH의 현재 구현에서 공통적으로 나타나는 속성 무시하거나 사용하지 않습니다. 즉, 매니페스트에 다음이 포함되어 있는지 여부와 관계없이 콘텐츠 재생 환경에는 영향을 미치지 않습니다.

  • availabilityStartTime
  • segmentAlignment

HTTP 실시간 스트리밍(HLS)

HTTP 라이브 스트리밍의 개요 및 전체 사양을 확인할 수 있습니다. 여기에서 확인할 수 있습니다.

웹 수신기 플레이어의 주요 강점 중 하나는 MSE에서 HLS 재생 매니페스트가 단일 형식으로 제공되는 DASH와는 다릅니다. 파일, HLS는 모든 변형 스트림의 목록이 포함된 마스터 재생목록을 전송합니다. 을 각각의 URL로 대체합니다. 변형 재생목록은 미디어 재생목록입니다. 둘 웹 수신기 플레이어가 현재 마스터에서 지원하는 주요 HLS 태그 재생목록은 다음과 같습니다.

태그 이름 기능
#EXT-X-STREAM-INF 비트 전송률/변형 스트림을 지정합니다. BANDWIDTH 속성: 필수 속성입니다. 이 MSE 초기화에는 CODECS 속성을 사용하는 것이 좋습니다. 예를 들면 다음과 같습니다. "avc1.42c01e,mp4a.40.2" 형식으로 전송합니다. 지정하지 않으면 기본 케이스는 다음과 같습니다. H264 메인 프로필 3.0 동영상 및 "mp4a.40.2" 오디오 인코딩으로 설정 있습니다.
#EXT-X-MEDIA URI 속성에서 가 콘텐츠를 나타냅니다. 이것은 일반적으로 다른 오디오의 대체 오디오 스트림으로 형식 (5.1 서라운드 사운드) 또는 언어로 표시됩니다. TYPE의 속성 VIDEO, AUDIO, SUBTITLES 또는 CLOSED-CAPTIONS이 허용됩니다. 설정 DEFAULT 속성을 YES로 설정하면 이 대체 스트림을 기본적으로 제공합니다.

다음은 현재 웹 수신기 플레이어가 지원하는 HLS 태그 목록입니다. 선택합니다.

태그 이름 기능
#EXTINF 스트림 정보(일반적으로 다음에 해당하는 세그먼트의 시간) 초, 다음 줄에는 세그먼트의 URL을 입력합니다.
#EXT-X-TARGETDURATION 각 세그먼트의 시간(초)입니다. 또한 이 측정항목은 라이브 스트림의 재생목록 매니페스트를 다운로드/새로고침합니다. 웹 수신기 플레이어는 0.1초보다 짧은 시간을 지원하지 않습니다.
#EXT-X-MEDIA-SEQUENCE 첫 번째 세그먼트의 시퀀스 번호 (실시간 스트림의 경우)는 확인할 수 있습니다
#EXT-X-KEY DRM 키 정보 METHOD 속성은 있습니다. 현재는 AES-128SAMPLE-AES를 지원합니다. 에서 자세한 내용을 확인하실 수 있습니다.
#EXT-X-BYTERANGE 세그먼트 URL을 가져올 바이트 범위입니다.
#EXT-X-DISCONTINUITY 연속하는 세그먼트 간의 불연속성을 지정합니다. 이것은 흔히 볼 수 있는 서버 측 광고 삽입이 있는데 볼 수 있습니다.
#EXT-X-PROGRAM-DATE-TIME 다음 세그먼트의 첫 번째 샘플의 절대 시간(예: &quot;2016-09-21T23:23:52.066Z&quot;.
#EXT-X-ENDLIST VOD인지 라이브 스트림인지 여부

라이브 스트림에는 #EXT-X-PROGRAM-DATE-TIME#EXT-X-MEDIA-SEQUENCE를 사용합니다. 를 핵심 요소로 삼았습니다. 만약 #EXT-X-PROGRAM-DATE-TIME가 새로고침된 세그먼트를 일치시키는 데 사용됩니다. 그렇지 않으면 #EXT-X-MEDIA-SEQUENCE 번호가 사용됩니다. 참고: HLS 사양에서는 일치를 위해 파일 이름 비교를 사용하지 않습니다.

HLS 구현은 다음과 같은 대체 오디오 스트림 선택을 지원합니다. 5.1 서라운드 사운드(기본 오디오 재생) 이는 대체 코덱과 함께 #EXT-X-MEDIA 태그를 지정하고 스트림 구성의 세그먼트 형식입니다.

웹 수신기 플레이어는 특정 사양별 동작을 예상합니다. 예를 들어 #EXT-INF 태그에는 URI가 필요합니다. URI가 아닌 경우(예: #EXT-X-DISCOUNTINUITY로 인해 재생목록 파싱이 실패합니다.

#EXT-X-TARGETDURATION초마다 재생목록/매니페스트가 새로고침되어 새 세그먼트 목록을 만들고 새 세그먼트에 추가합니다 탐색이 요청될 때마다 Google은 다음 범위 내에서만 탐색합니다. 찾을 수 있습니다. 실시간인 경우 동영상의 처음부터 탐색이 허용됩니다. 끝에서 3개의 타겟 기간까지 최신 목록을 유지합니다. 예를 들어 10개의 세그먼트 목록이 있고 세그먼트 6에 있다면 7로 설정하고 8로는 안 됩니다.

세그먼트 형식 지원

CAF SDK는 참조된 대로 여러 형식으로 전송된 콘텐츠의 재생을 지원합니다. 출처: HlsSegmentFormat 오디오 및 HlsVideoSegmentFormat용 있습니다. 여기에는 압축 오디오 AAC 및 AC3 재생과 같이 암호화되거나 암호화되지 않은 상태로 재생됩니다. 필수 항목입니다. LoadRequestDataMediaInformation에서 이 정보를 지정합니다. 해야 합니다. 지정하지 않으면 기본 플레이어 구성에서 전송으로 콘텐츠 재생을 시도합니다. 패키지 콘텐츠를 스트리밍할 수 있습니다. 이 속성은 요청 데이터 로드 (Android, iOS) 메시지 인터셉터를 통해 수신자 내부에 전달됩니다.

샘플 코드 확인 아래 스니펫 또는 contentId, contentUrl 및 항목을 사용하여 미디어 로드 가이드를 참조하세요.

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.LOAD, loadRequestData => {
      ...
      // Specify segment format for an HLS stream playing CMAF packaged content.
      loadRequestData.media.contentType = 'application/x-mpegurl';
      loadRequestData.media.hlsSegmentFormat = cast.framework.messages.HlsSegmentFormat.FMP4;
      loadRequestData.media.hlsVideoSegmentFormat = cast.framework.messages.HlsVideoSegmentFormat.FMP4;
      ...
      return loadRequestData;
    });

콘텐츠 보호

위의 #EXT-X-KEY 태그 섹션에 나와 있는 것처럼 Cast SDK는 SAMPLE-AES 또는 SAMPLE-AES-CTR: 초기화 벡터의 키 URI 다음과 같이 지정할 수 있습니다.

EXT-X-KEY: METHOD=SAMPLE-AES, \
URI="data:text/plain;base64,XXXXXX", \
IV=0x6df49213a781e338628d0e9c812d328e, \
KEYFORMAT="com.widevine", \
KEYFORMATVERSIONS="1"

이제 지원되는 KEYFORMAT는 Widevine이며 URI에는 BASE64 인코딩된 DRM 정보 XXXXXXX은 디코딩 시 키 ID를 포함합니다.

{
   "content_id": "MTQ1NjkzNzM1NDgxNA==",
   "key_ids": [
      "xxxxxxxxxxxxxxxx"
   ]
}

버전 1은 다음과 같은 속성을 정의합니다.

속성 설명
KEYFORMATVERSIONS "1" 이 제안서는 키 형식 버전 1을 정의합니다.
KEYFORMAT "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" UUID는 DASH IF IOP의 Widevine UUID입니다. Widevine 암호화 스트림이 있는 MPD에서는 정확히 동일한 문자열이 사용됩니다.
URI "data:text/plain;base64, <base64 encoded PSSH box>" 데이터 유형 및 PSSH 상자가 포함된 스트림의 URI.
METHOD SAMPLE-AES-CTR 콘텐츠를 암호화할 때 사용된 암호화 암호화를 나타냅니다. Sample-AES는 콘텐츠가 ‘cbcs’를 사용하여 암호화되었음을 알립니다. samples-AES-CTR은 콘텐츠가 AES-CTR 보호 체계인 ‘cenc’ 중 하나를 사용하여 암호화되었음을 알립니다.

DASH MPD에 매핑된 속성:

속성 설명
KEYFORMAT ContentProtection 요소의 schemeIdUri 속성입니다.
URI cenc:pssh 요소의 콘텐츠입니다.
KEYID MPEG DASH의 default_kid와 동일한 역할을 가진 키 ID를 인코딩하는 16바이트 16진수 문자열입니다. 계층적 키 스키마를 사용하는 경우 '루트'가 됩니다. 키를 누릅니다.

V2 신호를 사용한 HLS 재생목록의 예:

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:2
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MAP:URI="init_segment.mp4"
#EXTINF:1.001,
output_video-1.mp4
#EXT-X-DISCONTINUITY
#EXT-X-KEY:METHOD=SAMPLE-AES,URI="data:text/plain;base64,AAAAPXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAB0aDXdpZGV2aW5lX3Rlc3QiDHRlc3QgY29udGVudA==",KEYID=0x112233445566778899001122334455,KEYFORMAT="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed",KEYFORMATVERSION="1"
#EXTINF:1.001,
output_video-2.mp4
#EXTINF:0.734,
output_video-3.mp4
#EXT-X-ENDLIST

다음은 현재 사용하지 않는 HLS의 기능 및 태그 목록입니다. 도움이 될 수 있습니다 실시간 스트리밍의 존재 여부는 스트리밍 동작에 영향을 미치지 않습니다.

  • #EXT-X-STREAM-INFRESOLUTION= 속성은 무시됩니다.
  • #EXT-X-MEDIAAUTOSELECT= 속성은 사용되지 않습니다. 대신 우리는 DEFAULT=
  • 마스터 재생목록의 #EXT-X-I-FRAME-STREAM-INF는 무시됩니다.
  • #EXT-X-DISCONTINUITY-SEQUENCE 무시됨
  • #EXT-X-PLAYLIST-TYPE:EVENT님이 라이브 스트림에 표시될 수 있음 #EXT-X-PLAYLIST-TYPE:VOD님이 VOD 스트림에 표시될 수 있지만, 현재 웹 수신기 플레이어는 #EXT-X-ENDLIST의 존재에만 의존하여 실시간 vs. VOD

원활한 스트리밍

Microsoft 공식 원활한 스트리밍 사양.

원활한 스트리밍은 가변 품질 스트리밍 프로토콜 및 XML 사양을 제공합니다. HTTP를 통한 전송 (DASH 유사) DASH와 다름, Smooth Streaming 권장 미디어 세그먼트를 위한 MPEG-4 패키징만 제공합니다.

다음은 원활한 스트리밍에서 가장 일반적인 태그와 속성이 현재 지원되는 웹 수신기입니다. 많은 개념이 이미 자세히 알아보겠습니다

태그/속성 사용
&lt;SmoothStreamingMedia&gt; 매니페스트의 기본 태그로 다음 속성이 포함됩니다. <ph type="x-smartling-placeholder">
    </ph>
  • TimeScale: 1초를 나타낼 단위 수로, 일반적으로 1초씩 증가합니다. 10,000,000입니다.
  • 길이: 콘텐츠 길이(시간 기준) 웹 수신기 플레이어는 0.1초보다 짧은 시간은 지원하지 않습니다.
  • IsLive: 매니페스트가 라이브 미디어인지 여부입니다.
&lt;StreamIndex&gt; DASH의 AdaptationSet와 유사한 하나의 스트림 세트입니다. 유형은 일반적으로 '텍스트', '동영상' 또는 '오디오'입니다. URL 속성에는 일반적으로 템플릿 형식 프래그먼트 URL을 전송해야 합니다.
&lt;QualityLevel&gt; 각 QualityLevel 태그는 비트 전송률 및 FourCC 코덱을 지정합니다. FourCC 'H264', 'AVC1', 'AACL' 등입니다. 동영상의 경우 최대 해상도를 제공합니다. 오디오의 경우 샘플링 비율 및 채널 수를 통해 전송되는 데이터입니다.
&lt;c&gt; 스트림 프래그먼트 요소. 포함 항목: <ph type="x-smartling-placeholder">
    </ph>
  • d: 프래그먼트의 기간
  • t: 프래그먼트의 미디어 시간입니다.
&lt;Protection&gt; 시스템 ID를 나열하는 선택적 SystemID 속성이 있는 태그 <SmoothStreamingMedia>에서 사용할 DRM 태그 사이에 있어야 합니다.
&lt;ProtectionHeader&gt; <Protection> 아래에 SystemID 및 맞춤 일반적으로 Base64로 인코딩됩니다. Widevine의 경우 키 ID, 키 길이, 알고리즘 ID(예: AESCTR), LA_URL(라이선스 획득 URL), LUI_URL (라이선스 사용자 인터페이스 URL) 및 DS_ID (도메인 서비스 ID)가 포함되어 있습니다.

콘텐츠 보호

보호 시스템 ID를 올바르게 인코딩하려면 아래의 매핑을 사용하세요.

  • WIDEVINE: 'EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED',
  • CLEARKEY: '1077EFEC-C0B2-4D02-ACE3-3C1E52E2FB4B',
  • MPEG_DASH_MP4PROTECTION: 'URN:MPEG:DASH:MP4PROTECTION:2011'

다음은 <ProtectionHeader>의 경우 Base64로 인코딩된 데이터가 포함된 예입니다. 이 데이터는 디코딩될 때 위의 DASH 콘텐츠 보호 지원

<Protection>
  <ProtectionHeader SystemID="9a04f079-9840-4286-ab92-e65be0885f95">
    $BASE64ENCODED_DATA
  </ProtectionHeader>
</Protection>

다음은 3,000초 길이의 부드러운 라이브 스트리밍 매니페스트의 예입니다. 콘텐츠 길이:

<?xml version="1.0"?>
  <SmoothStreamingMedia MajorVersion="2" MinorVersion="0" Duration="3000000000"
    TimeScale="10000000" IsLive="TRUE" LookAheadFragmentCount="2" DVRWindowLength="600000000" CanSeek="TRUE" CanPause="TRUE">
    <StreamIndex Type="text" Name="textstream301_swe" Language="swe" Subtype="CAPT" Chunks="0"
      TimeScale="10000000" Url="QualityLevels({bitrate})/Fragments(textstream301_swe={start time})">
      <QualityLevel Index="0" Bitrate="20000" CodecPrivateData="" FourCC="DFXP"/>
        <c d="40000000" t="80649382288125"/>
        <c d="39980000"/>
        <c d="40020000"/>
    </StreamIndex>
    <Protection>
      <ProtectionHeader> SystemID="$BASE64ENCODEDDRMDATA$"</ProtectionHeader>
    </Protection>
    <StreamIndex Type="audio" Name="audio101_eng" Language="eng" Subtype="AACL" Chunks="0"
      TimeScale="10000000" Url="QualityLevels({bitrate})/Fragments(audio101_eng={start time})">
      <QualityLevel Index="0" Bitrate="128000" CodecPrivateData="1290" FourCC="AACL" AudioTag="255"
        Channels="2" SamplingRate="32000" BitsPerSample="16" PacketSize="4"/>
      <c d="40000000" t="80649401327500"/>
      <c d="40000000"/>
      <c d="40000000"/>
    </StreamIndex>
    <StreamIndex Type="video" Name="video" Subtype="AVC1" Chunks="0" TimeScale="10000000"
      Url="QualityLevels({bitrate})/Fragments(video={start time})">
      <QualityLevel Index="0" Bitrate="400000" CodecPrivateData="000000016742E01596540C0EFCB808140000000168CE3880"
        FourCC="AVC1" MaxWidth="384" MaxHeight="216"/>
      <QualityLevel Index="1" Bitrate="800000" CodecPrivateData="00000001674D401E965281004B6020500000000168EF3880"
        FourCC="AVC1" MaxWidth="512" MaxHeight="288"/>
      <QualityLevel Index="2" Bitrate="1600000" CodecPrivateData="00000001674D401E965281B07BCDE020500000000168EF3880"
        FourCC="AVC1" MaxWidth="854" MaxHeight="480"/>
      <QualityLevel Index="3" Bitrate="2200000" CodecPrivateData="00000001674D401F96528080093602050000000168EF3880"
        FourCC="AVC1" MaxWidth="1024" MaxHeight="576"/>
      <c d="40000000" t="80649401378125"/>
      <c d="40000000"/>
      <c d="40000000"/>
    </StreamIndex>
  </SmoothStreamingMedia>

위 동영상 스트림 예에서 URL 템플릿은 다음과 같습니다.

QualityLevels({bitrate})/Fragments(video={start time})

따라서 처음 두 세그먼트 (색인 2 품질 수준에 있다고 가정)는 t="80649401378125"에서 추출한 초기 시간은 다음과 같음 아래 동영상 StreamIndex 및 세그먼트당 시간 증분 4초 * 10000000:

QualityLevels(2)/Fragments(video=80649401378125)
QualityLevels(2)/Fragments(video=80649441378125)
...

다음은 현재 무시되고 있는 Smooth Streaming 속성 목록입니다. 제공 여부와 상관없이 스트리밍 환경에 영향을 미치지 않습니다.

  • <SmoothStreamingMedia> 태그에 CanSeek, CanPause
  • 청크, <StreamIndex> 태그의 QualityLevels. 대신 정보를 기반으로 한 세그먼트 수 및 품질 수준의 수 <StreamIndex> 내부에 제공됨(예: 실제 QualityLevel 태그 및 <c> 태그.
  • BitsPerSample<QualityLevel>PacketSize가 사용되지 않습니다.
를 통해 개인정보처리방침을 정의할 수 있습니다.

디스플레이 유형 확인

canDisplayType 웹 수신기 장치의 비디오 및 오디오 기능에 대한 메서드 검사와 하여 표시할 수 있습니다. 전체 첫 번째는 선택사항입니다. 더 많은 매개변수를 포함할수록 더 정확하게 확인할 수 있습니다

서명은 canDisplayType(<em>mimeType</em>,<em>codecs</em>,<em>width</em>,<em>height</em>,<em>framerate</em>)입니다.

예:

웹 수신기 기기 및 디스플레이에서 동영상/mp4를 지원하는지 확인하세요. mimetype을 지정할 수 있습니다.

canDisplayType("video/mp4", "avc1.42e015,mp4a.40.5", 1920, 1080, 30)

웹 수신기 기기 및 디스플레이에서 다음 기기에 4K 동영상 형식을 지원하는지 확인하세요. 이 코덱을 사용하려면 너비가 3840, 높이가 2160인 것으로 지정해야 합니다.

canDisplayType("video/mp4", "hev1.1.2.L150", 3840, 2160)

웹 수신기 기기 및 디스플레이에서 이 코덱에 HDR10을 지원하는지 확인합니다. 크기, 프레임 속도를 조정할 수 있습니다.

canDisplayType("video/mp4", "hev1.2.6.L150", 3840, 2160, 30)

웹 수신기 기기 및 디스플레이에서 Dolby Vision (DV)을 지원하는지 확인합니다. 코덱, 크기, 프레임 속도를 변경할 수 있습니다

canDisplayType("video/mp4", "dvhe.04.06", 1920, 1080, 30)

DRM

일부 미디어 콘텐츠에는 디지털 권한 관리 (DRM)가 필요합니다. 미디어 콘텐츠 매니페스트 (DASH 또는 HLS)에 저장된 DRM 라이선스 (및 키 URL) Cast SDK가 이러한 경우를 자동으로 처리합니다. 해당 콘텐츠의 하위 집합에는 licenseUrl 드림 이는 복호화 키를 얻는 데 필요합니다. Web Receiver에서 PlaybackConfig: 필요에 따라 licenseUrl를 설정합니다.

다음 코드 스니펫은 라이선스 요청 정보를 설정하는 방법을 보여줍니다. 요청(예: withCredentials):

const context = cast.framework.CastReceiverContext.getInstance();
const playbackConfig = new cast.framework.PlaybackConfig();
// Customize the license url for playback
playbackConfig.licenseUrl = 'http://widevine/yourLicenseServer';
playbackConfig.protectionSystem = cast.framework.ContentProtection.WIDEVINE;
playbackConfig.licenseRequestHandler = requestInfo => {
  requestInfo.withCredentials = true;
};
context.start({playbackConfig: playbackConfig});

// Update playback config licenseUrl according to provided value in load request.
context.getPlayerManager().setMediaPlaybackInfoHandler((loadRequest, playbackConfig) => {
  if (loadRequest.media.customData && loadRequest.media.customData.licenseUrl) {
    playbackConfig.licenseUrl = loadRequest.media.customData.licenseUrl;
  }
  return playbackConfig;
});

Google 어시스턴트 통합을 사용 중이라면 콘텐츠에 필요한 사용자 인증 정보가 Google 계정에 로그인해야 합니다. 이 경우 클라우드로부터 가져오는 미디어 콘텐츠 등 setCredentials가 클라우드에서 Cast 기기로 호출되어 다음을 제공합니다. 사용자 인증 정보를 제공합니다 그러면 웹 수신기 앱을 작성하는 애플리케이션은 setCredentials 정보를 포함해야 합니다. 이것은 사용자 인증 정보를 사용하여 미디어를 구성합니다.

도움말: contentId, contentUrl, 항목을 사용하여 미디어 로드도 참고하세요.

오디오 채널 처리

Cast 플레이어는 미디어를 로드할 때 단일 오디오 소스 버퍼를 설정합니다. 위치 동시에 버퍼에서 사용할 적절한 코덱을 선택합니다. MIME 유형을 기반으로 합니다. 새 버퍼와 코덱이 설정됩니다.

  • 재생이 시작되면
  • 모든 광고 시점 및
  • 콘텐츠를 다시 표시할 수 있습니다.

버퍼가 단일 코덱을 사용하고 코덱이 선택되기 때문입니다. 기본 트랙을 기반으로 하는 경우, 보조 트랙이 소리가 필터링되어 들리지 않습니다 이러한 상황은 미디어 프로그램의 기본 채널이 트랙은 서라운드 사운드이지만 보조 오디오 트랙은 스테레오 사운드를 사용합니다. 대체 트랙으로 콘텐츠를 제공하는 데 보조 트랙이 자주 사용되기 때문에 여러 트랙이 포함된 미디어를 제공하면 많은 시청자가 소리를 들을 수 없는 경우 등 콘텐츠를 제공할 수 있습니다

다음 시나리오는 프로그래밍을 제공하는 것이 중요한 이유를 보여줍니다. 여기서 기본 및 보조 트랙에 동일한 수의 채널이 포함됩니다.

시나리오 1 - 미디어 스트림에 채널이 없음 기본 트랙과 보조 트랙 간 패리티:

  • 영어 - AC-3 5.1 채널 (기본)
  • 스웨덴어 - AAC 2채널
  • 프랑스어 - AAC 2채널
  • 독일어 - AAC 2채널

이 시나리오에서 플레이어의 언어가 영어의 경우 사용자가 듣기를 기대하는 트랙을 듣지 못합니다. 재생되는 동안 2채널 트랙이 필터링됩니다. 내가 감상한 유일한 트랙은 기본 AC-3 5.1 채널이 될 수 있으며, 그런 다음 언어는 영어로 설정되어 있습니다.

시나리오 2 - 채널이 포함된 미디어 스트림 기본 트랙과 보조 트랙 간 패리티:

  • 영어 - AC-3 5.1 채널 (기본)
  • 스웨덴어 - AC-3 5.1 채널
  • 프랑스어 - AC-3 5.1 채널
  • 독일어 - AC-3 5.1 채널

이 스트림의 트랙은 모두 채널 수가 동일하므로 시청자가 선택한 언어와 관계없이 트랙을 들을 수 있습니다.

Shaka 오디오 채널 처리

Shaka 플레이어 (DASH)는 2차 환경 전반에서 패리티가 부족한 미디어에 대한 완화 조치 오디오 트랙입니다.

기본 트랙이 서라운드 사운드가 아닌 경우 (예: 2채널 스테레오) 트랙)에서 Shaka 플레이어는 기본적으로 두 개의 채널로 설정되고 세 개 이상의 동영상에 포함된 보조 미디어 트랙을 있습니다.

Shaka의 기본 오디오 채널 수는 다음과 같이 구성할 수 있습니다. shakaConfig 속성의 preferredAudioChannelCount cast.framework.PlaybackConfig.

예를 들면 다음과 같습니다.

shakaConfig = { "preferredAudioChannelCount": 6 };

preferredAudioChannelCount를 6으로 설정하면 Shaka Player가 서라운드 사운드 코덱 (AC-3 또는 EC-3)을 지원할 수 있습니다. 선호하지 않는 미디어 트랙을 자동으로 필터링합니다. 채널 수