Web Alıcısı Oynatıcı Akış Protokolleri

Web Alıcı SDK'sı üç türü destekler. şu anki akış protokollerinin sayısı:

DASH HTTP Canlı Akış ve Sorunsuz yayın.

Bu dokümanda, her bir akış protokolü için sağladığımız destek listelenmiştir. Not her protokol için desteklenen etiketlerin açıklaması oldukça kısa ile karşılaştırdık. Hedef, size her bir protokolün nasıl kullanılacağına ve hangi özelliklerin Yayın özellikli cihazlarda desteklenen protokollerin akış deneyimi.

HTTP üzerinden Dinamik Uyarlanabilir Akış (DASH)

ISO'nun DASH'in ayrıntılı spesifikasyonu hakkında daha fazla bilgi edinin.

DASH, yüksek kaliteli video sağlayan uyarlanabilir bit hızı akış protokolüdür. HTTP(S) sunucuları üzerinden akış ile izleme. XML biçiminde oluşturulan bir manifesto, videoyu başlatma ve indirme ile ilgili meta veri bilgilerinin içerik. Web Alıcı Oynatıcısı'nın desteklediği temel kavramlar <Period>, <AdaptationSet>, <Representation>, <SegmentTemplate>, <SegmentList>, <BaseUrl> ve <ContentProtection>.

DASH manifesti bir kök <MPD> etiketiyle başlar ve içinde bir ya da bir akış içeriğini temsil eden daha fazla <Period> etiketi. <Period> etiketleri, farklı akış içeriklerinin sıralanmasına olanak tanır Bunlar genellikle ana içerik ile reklamı veya birden çok içeriği ayırmak için kullanılır. art arda gelen video içeriklerini takip eder.

<MPD> altındaki <AdaptationSet>, şuna ilişkin bir temsil kümesidir: Çoğu durumda video, ses veya altyazı gibi bir medya akışı türüdür. En Yaygın olarak desteklenen mime türleri, "video/mp4", "audio/mp4" ve "text/vtt"dir. isteğe bağlı <ContentComponent contentType="$TYPE$"> dahil edilebilir <AdaptationSet> altında.

Her <AdaptationSet> içinde <Representation> etiket içeren bir liste olması ve Web Alıcı Oynatıcısı'nın codecs bilgilerini kullanarak MSE kaynak arabelleğini ve bandwidth bilgilerini ilk kullanıma hazırlayarak otomatik olarak doğru temsili/bit hızını seçer.

Her <Representation> için medya segmentleri aşağıdakilerden biri kullanılarak açıklanır: tek segment temsili için <BaseURL>, için <SegmentList> segment listesi (HLS'ye benzer) veya <SegmentTemplate>.

<SegmentTemplate> için, ilk kullanıma hazırlama segmentinin ve medya segmentleri şablon oluşturma yoluyla temsil edilebilir. Aşağıdaki örnekte $Number$, CDN'den ulaşılabilen segment numarasını gösterir. İşte bu yüzden oynatma devam ederken seg1.m4s, seg2.m4s vb. dillere çevrilir.

<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> için <SegmentTimeline> etiketi şu amaçlarla yaygın olarak kullanılır: her bir segmentin ne kadar sürdüğünü ve hangi segmentlerin tekrar ettiğini gösterir. timescale (bir saniyeyi temsil eden birimler) genellikle <SegmentTemplate> böylece segmentin zamanını şuna göre hesaplayabiliriz: bu birimi seçeceğiz. Aşağıdaki örnekte <S> etiketi bir segment etiketini, d özelliği, segmentin uzunluğunu ve r özelliğini belirtir $Time$ işlemi için aynı süreye sahip kaç segmentin tekrarlandığını belirtir aşağıdaki şekilde belirtildiği şekilde medya segmentinin indirilmesi için doğru şekilde hesaplanabilir media özelliği hakkında daha fazla bilgi edinin.

<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> kullanarak temsil için aşağıda bir örnek verilmiştir:

<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>

Tek bir segment dosyası için <SegmentBase> genellikle bayt ile kullanılır <BaseURL> dosyasının hangi bölümünde dizine eklenir ve oynatma devam ederken veya arama devam ederken geri kalanlar istek üzerine getirilebilir. yaşanır. Burada Initialization aralığı, başlangıç meta veri aralığını belirtir Ayrıca indexRange, medya segmentlerinin dizinini belirtir. Lütfen şu anda yalnızca ardışık bayt aralıklarını destekliyoruz.

<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>

Hangi gösterimin kullanıldığına bakılmaksızın, akışlar korunursa <ContentProtection> bölümü, <AdaptationSet>, Burada schemeIdUri, kullanılacak DRM sistemini benzersiz şekilde tanımlar. Ortak şifreleme için isteğe bağlı bir anahtar kimliği eklenebilir.

<!-- 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>

Daha fazla örnek ve ayrıntı için lütfen MPEG-DASH spesifikasyonuna bakın. Aşağıda, yukarıda belirtilmeyen etiketlerdeki ek DASH özelliklerinin listesi verilmiştir şu anda desteklediğimiz:

Özellik Adı Özellik İşlevi
mediaPresentationDuration Video içeriğinin uzunluğu.
minimumUpdatePeriod <MPD> etiketinin özelliği; ne sıklıkla manifest dosyasını yeniden yükleyin.
tür <MPD> etiketinin özelliği; "dinamik" dönüşüm hunisinin orta kısmına yönelik bir bu bir canlı yayın.
presentationTimeOffset <SegmentBase> etiketinin özelliği; kodu, dönemin başlangıcından sunum süresi farkına varır.
startNumber Bir geçerlidir. Bu genellikle canlı yayında kullanılır.

DASH ve DASH için MP4 parçalarının içindeki EMSG kutusunun tanınmasını da destekliyoruz bir EmsgEvent nasıl değer kattığından bahsettik.

Mevcut Web Alıcı Oynatıcımız başlıca DASH kullanım alanlarını desteklese de DASH API'nin şu anda uyguladığımız ortak dikkate almaz. Bu, manifest dosyasında İçeriğin oynatma deneyimi üzerinde hiçbir etkisi yoktur.

  • availabilityStartTime
  • segmentAlignment

HTTP Canlı Yayın (HLS)

HTTP canlı yayınının genel görünümüne ve tam özelliklerine erişebilirsiniz. burada bulabilirsiniz.

Web Alıcı Oynatıcısı'nın temel güçlü yanlarından biri MSE'de oynatılması. Manifestin tek bir uygulamada sunulduğu DASH'ten farklıdır dosyası yüklediğinizde HLS, tüm varyant akışların listesini içeren ana oynatma listesini gönderir. ilgili URL ile birlikte gönderin. Varyant oynatma listesi, medya oynatma listesidir. İkisi Web Alıcı Oynatıcısının şu anda ana makinede desteklediği ana HLS etiketleri oynatma listeleri şunlardır:

Etiket adı İşlevsellik
#EXT-X-STREAM-INF Bit hızı/varyant akışı belirtir. BANDWIDTH özelliği Bu özellik, uyarlanabilir bit hızı akış seçimini destekleyen bir değerdir. İlgili içeriği oluşturmak için kullanılan MSE'yi başlatmak için CODECS özelliğinin kullanılması kesinlikle önerilir. Örneğin: "avc1.42c01e,mp4a.40.2" olarak. Belirtilmezse varsayılan büyük/küçük harf durumu şu şekildedir: H264 ana profil 3.0 video ve "mp4a.40.2" ses kodlamalı olarak ayarlandı içerik.
#EXT-X-MEDIA Şu özelliklere sahip ek medya oynatma listesini (URI özelliğinde) belirtir: içeriği temsil eder. Bunlar genellikle diğer biçimi (5.1 surround ses) veya dil olabilir. TYPE özelliği VIDEO, AUDIO, SUBTITLES veya CLOSED-CAPTIONS değerine izin verilir. Ayar YES için DEFAULT özelliği, bu alternatif akışı varsayılan olarak ayarlayacağız.

Web Alıcı Oynatıcısı'nın şu anda desteklediği HLS etiketlerinin listesini burada bulabilirsiniz: medya oynatma listesi:

Etiket adı İşlevsellik
#EXTINF Akış bilgileri; daha sonra genellikle segmentin süresi gelir. saniye ve bir sonraki satırda segmentin URL'si yer alır.
#EXT-X-TARGETDURATION Her bir segmentin saniye cinsinden uzunluğu. Bu aynı zamanda ne sıklıkla Canlı yayın için oynatma listesi manifestini indirin/yenileyin. Web Alıcısı Oynatıcı 0,1 saniyeden kısa süreleri desteklemez.
#EXT-X-MEDIA-SEQUENCE Videodaki ilk segmentin sıra numarası (genellikle canlı yayın için) temsil eder.
#EXT-X-KEY DRM anahtarı bilgileri. METHOD özelliği, hangi anahtarın karar vermenize yardımcı olacaktır. Bugün AES-128 ve SAMPLE-AES desteklenir ,
#EXT-X-BYTERANGE Segment URL'si için getirilecek bayt aralığı.
#EXT-X-DISCONTINUITY Ardışık segmentler arasındaki süreksizliği belirtir. Bu, genelde bir reklam segmentinin ortadaki reklam segmentinin ortasında göründüğü ana akım.
#EXT-X-PROGRAM-DATE-TIME Bir sonraki segmentin ilk örneğin mutlak süresi, örneğin &quot;2016-09-21T23:23:52.066Z&quot;.
#EXT-X-ENDLIST Bunun bir seç-izle yayın mı yoksa canlı yayın mı olduğu.

Canlı yayın için #EXT-X-PROGRAM-DATE-TIME ve #EXT-X-MEDIA-SEQUENCE kullanırız. . Eğer Mevcutsa #EXT-X-PROGRAM-DATE-TIME, yenilenen segmentleri eşleştirmek için kullanılır. Aksi takdirde #EXT-X-MEDIA-SEQUENCE numarası kullanılır. HLS spesifikasyonuna göre, eşleştirme için dosya adı karşılaştırması kullanılmaz.

HLS uygulamamız, Ana ses çalma olarak 5.1 surround ses. Bu, paydaşların alternatif codec'lere sahip bir #EXT-X-MEDIA etiketine sahip olmanın yanı sıra Yayın yapılandırmasındaki segment biçimini.

Web Alıcı Oynatıcı, spesifikasyona göre belirli davranış bekler. Örneğin, #EXT-INF etiketi için bir URI bekleriz. URI değilse, örneğin #EXT-X-DISCOUNTINUITY, oynatma listesi için ayrıştırma işleminin başarısız olmasına neden olur.

Aşağıdaki öğelerin elde edilmesi için oynatma listesini/manifest'i #EXT-X-TARGETDURATION saniyede bir yeniden yükleriz. ve tüm segmentlerin yeni dahili gösterimini güncelleyerek segmentlere ayırıyoruz. Talep edilen her arama, yalnızca en fazla aralığı seçin. Canlı yayınlar için yalnızca videonun başından Sondan üç hedef süreye kadar en yeni listeyi. Örneğin, 10 segment listeniz varsa ve 6. segmentteyseniz yalnızca yukarı doğru ancak 8'e değil.

Segment biçimi desteği

CAF SDK'sı, referans verilen birden fazla biçimde sunulan içeriklerin oynatılmasını destekler. HlsSegmentFormat adlı albümde ses ve HlsVideoSegmentFormat için video için. Elektronik tablo kullanarak yapılmış gruplandırılmış ses (örneğin, şifrelenmiş veya şifrelenmemiş) AAC ve AC3 oynatma gibi. Gerekli MediaInformation içinde, bu bilgiyi LoadRequestData oyuncuya doğru şekilde açıklamak için. Belirtilmezse varsayılan oynatıcı yapılandırması, içeriği Aktarım olarak oynatmayı dener Paket içerik akışı gerçekleştirebilirsiniz. Bu özellik, istek verilerini yükleme (Android, iOS ve Web) algılaması vardır.

Örnek kodu inceleyin aşağıdaki snippet'i veya contentId, contentUrl ve varlık kullanarak medya yükleme rehberini inceleyin.

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;
    });

İçerik koruması

Cast SDK, yukarıdaki #EXT-X-KEY etiketi bölümünde listelendiği gibi, SAMPLE-AES veya SAMPLE-AES-CTR, burada anahtarın URI'sı bir başlatma vektörüdür şu şekilde belirtilebilir:

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

Şu anda desteklediğimiz KEYFORMAT Widevine'dır ve URI bir BASE64 kodlu DRM bilgisi XXXXXXX, kodu çözüldüğünde şu anahtar kimliğini içerir:

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

Sürüm 1 aşağıdaki özellikleri tanımlamaktadır:

Özellik Örnek Açıklama
KEYFORMATVERSIONS "1" Bu teklif, anahtar biçimi sürüm 1'i tanımlıyor
KEYFORMAT "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" UUID, DASH IF IOP'taki Widevine UUID'dir. Widevine şifrelenmiş akışlarıyla MPD'de aynı dize kullanılır.
URI "data:text/plain;base64, <base64 encoded PSSH box>" Veri türünü ve PSSH kutusunu içeren akışın URI'si.
METHOD SAMPLE-AES-CTR İçerik şifrelenirken kullanılan şifreleme şifresini belirtir. ÖRNEK-AES, içeriğin "cbcs" kullanılarak şifrelendiğini belirtir. ÖRNEK-AES-TO, içeriğin AES-TO koruma şemalarından biri olan "enc" kullanılarak şifrelendiğini gösterir.

DASH MPD ile eşlenen özellikler:

Özellik Açıklama
KEYFORMAT ContentProtection öğesinin schemaIdUri özelliği.
URI cenc:pssh öğesinin içeriği.
KEYID MPEG DASH'teki default_kid ile aynı role sahip anahtar kimliğini kodlayan 16 baytlık onaltılık dize. Hiyerarşik anahtar şeması kullanıyorsanız bu "kök" olmalıdır tuşuna basın.

V2 Sinyali ile Örnek HLS Oynatma Listesi:

#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

Aşağıda, HLS'de şu anda kullanmadığımız özelliklerin ve etiketlerin bir listesi verilmiştir: destek. Bunların varlığı veya yokluğu yayın davranışını etkilemez.

  • #EXT-X-STREAM-INF öğesindeki RESOLUTION= özelliği yoksayıldı.
  • #EXT-X-MEDIA içindeki AUTOSELECT= özelliği kullanılmıyor. Bunun yerine DEFAULT=.
  • Ana oynatma listesindeki #EXT-X-I-FRAME-STREAM-INF yoksayılır.
  • #EXT-X-DISCONTINUITY-SEQUENCE yoksayıldı
  • #EXT-X-PLAYLIST-TYPE:EVENT canlı yayında bulunabilir ve #EXT-X-PLAYLIST-TYPE:VOD bir VOD akışında bulunabilir ancak şu an için Web Alıcı Oynatıcısı yalnızca #EXT-X-ENDLIST varlığına dayanır ve canlı - Seç-izle videolar.

Sorunsuz akış

Microsoft'un resmi Sorunsuz akış özellikleri.

Kolay akış, uyarlanabilir akış protokolü ve XML spesifikasyonu sağlar. HTTP üzerinden (DASH'e benzer) şekilde çalışır. DASH'ten farklı olarak Smooth Streaming, DASH'ten farklı MPEG-4 paketlemesini destekler.

Aşağıda, Smooth Streaming'de en sık kullanılan etiket ve özelliklerin şu anda Web Alıcı Oynatıcısı tarafından destekleniyor. Birçok kavram zaten yukarıdaki DASH bölümüne.

Etiket/Özellik Kullanım
&lt;SmoothStreamingMedia&gt; Manifest için ana etiket, şu özellikleri içerir:
  • Zaman Ölçeklendirmesi: Bir saniyeyi temsil edecek birim sayısı, genellikle 10.000.000.
  • Süre: İçeriğin zaman ölçeğindeki uzunluğu. Web Alıcı Oynatıcısı 0,1 saniyeden kısa süreleri desteklemez.
  • IsLive: Manifestin canlı medya olup olmadığı.
&lt;StreamIndex&gt; DASH'in AdaptationSet'e benzeyen bir akış grubu. Tür genellikle "text" (metin), "video" veya "audio" (ses). Url özelliği genellikle bit hızı veya başlangıç zamanı gibi bilgileri kullanan kısmi URL'dir.
&lt;QualityLevel&gt; Her bir QualityLevel etiketi, bit hızını ve bir FourCC codec'ini belirtir. FourCC kod genellikle "H264", "AVC1", "AACL" vb. olur. Video için, Maksimum Genişlik ve Maks. Yükseklik gibi uzaklıklarla çözünürlük ayarlarını yapabilirsiniz. Ses için, (ör. 44100) [SamplingRate] ve Kanal sayısı aracılığıyla iletişim kurulabilir.
&lt;c&gt; Akış Parçası Öğesi. Şunu içerir:
  • d: parçanın süresi.
  • t: Parçanın Medya Zamanı.
&lt;Protection&gt; İsteğe bağlı SystemID özelliğine sahip ve sistem kimliğini listeleyen bir etiket <SmoothStreamingMedia> altında kullanılacak DRM kapanış etiketinin hemen öncesine yapıştırın.
&lt;ProtectionHeader&gt; <Protection> altında SystemID özelliği ve özel verileri (genellikle Base64 olarak kodlanır). Widevine için bu; anahtar kimliğini, uzunluğu, algoritma kimliğini (ör. AESCTR, LA_URL), LUI_URL (lisans kullanıcı arayüzü URL'si) ve DS_ID (alan hizmeti kimliği).

İçerik koruması

Koruma sistemi kimliklerini doğru şekilde kodlamak için lütfen aşağıdaki eşlemeyi kullanın:

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

<ProtectionHeader> için aşağıda, Base64 olarak kodlanmış verilerin yer aldığı bir örnek bulunmaktadır. İlgili içeriği oluşturmak için kullanılan de kodu çözülmüş verileri, Yukarıdaki DASH içerik koruması desteği.

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

Aşağıda, 3.000 saniyelik bir canlı yayın manifesti örneği verilmiştir: içeriğin süresi:

<?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>

Yukarıdaki video akışı örneğinde URL şablonu şu şekildedir:

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

Dolayısıyla ilk iki segment (endeks 2 kalite seviyesinde olduğumuzu varsayarak) aşağıdaki, ilk zaman t="80649401378125" parametresinden alınmıştır altında video StreamIndex ve segment başına 4 saniyelik süre artışı x 10000000:

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

Şu anda yoksaydığımız ve sahip olduğumuz Smooth Streaming özelliklerinin listesi aşağıda verilmiştir sağlanmalarına bakılmaksızın akış deneyimleri üzerinde hiçbir etkisi yoktur:

  • <SmoothStreamingMedia> etiketinde CanSeek, CanPause.
  • <StreamIndex> etikette Chunks, QualityLevels. Bunun yerine bilgilere dayalı olarak segment sayısı ve kalite seviyesi sayısı <StreamIndex> içinde sağlanır (örneğin, gerçek QualityLevel etiketi ve <c> etiket.
  • BitsPerSample, <QualityLevel> içinde PacketSize kullanılmaz.
ziyaret edin.

Ekran türünü kontrol edin

canDisplayType yöntemi, Web Alıcı cihazının video ve ses özelliklerini kontrol eder ve geçirilen medya parametrelerini doğrulayıp bir boole döndürerek görüntüleyin. Tümü parametreleridir, ancak ilki isteğe bağlıdır. Ne kadar çok parametre eklerseniz daha kesin sonuçlar verir.

İmzası canDisplayType(<em>mimeType</em>,<em>codecs</em>,<em>width</em>,<em>height</em>,<em>framerate</em>)

Örnekler:

Web Alıcı cihazının ve ekranının videoyu/mp4'ü destekleyip desteklemediğini kontrol eder mimetype işlevini kullanmanız gerekir. Bu codec, boyutlar ve kare hızı:

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

Web Alıcı cihazının ve ekranının 4K video biçimini destekleyip desteklemediğini kontrol eder. 3840 genişliğini ve 2160 yüksekliğini belirterek bu codec'i destekler:

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

Web Alıcı cihazının ve ekranının bu codec bileşeni için HDR10'u destekleyip desteklemediğini kontrol eder. ve kare hızını görebilirsiniz:

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

Web Alıcısı cihazının ve ekranının Dolby Vision (DV) desteği şu codec'i, boyutları ve kare hızını içerir:

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

DRM

Bazı medya içerikleri Dijital Haklar Yönetimi (DRM) gerektirir. Medya içeriği için manifest dosyasında (DASH veya HLS) saklanan DRM lisansı (ve anahtar URL'si) varsa Cast SDK'sı bu durumla sizin için ilgilenir. Bu içeriğin alt kümesi için bir licenseUrl şifre çözme anahtarını elde etmek için gereklidir. Web Buyer'da, licenseUrl öğesini gerektiği gibi ayarlamak için PlaybackConfig.

Aşağıdaki kod snippet'i, lisans isteği bilgilerini nasıl ayarlayabileceğinizi gösterir withCredentials gibi istekler:

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 Asistan entegrasyonunuz varsa DRM bilgilerinden bazıları (ör. söz konusu içerik için gereken kimlik bilgileri doğrudan OAuth/TOA gibi mekanizmalar üzerinden bir Google Hesabı ile oturum açın. Böyle durumlarda, medya içeriği sesli şekilde yüklenir veya buluttan gelen setCredentials, buluttan şu işlemi sağlayan Cast cihazına çağrılır: kimlik bilgileri. Web Alıcı uygulamasına yazan uygulamalar, DRM'yi gerektiği gibi çalıştırmak için setCredentials bilgileri. Elektronik tablo kullanarak yapılmış oluşturmak için kimlik bilgilerini kullanma.

İpucu: ContentId, contentUrl ve varlık kullanarak medya yükleme konusuna da bakın.

Ses kanalı işleme

Yayın çalar medya yüklediğinde tek bir ses kaynağı arabelleği oluşturur. Kuyruklu a işareti aynı zamanda arabellek tarafından kullanılacak uygun bir codec birincil parçanın MIME türüne göre değişir. Yeni bir arabellek ve codec ayarlanır:

  • oynatma başladığında
  • her reklam arasını izler ve
  • her ana içerik devam ettirildiğinde.

Arabellek tek bir codec kullandığından ve codec seçildiğinden birincil kanala göre, ikincil parçaların ses yok. Bu durum, bir medya programının birincil parça surround seste, ancak ikincil ses parçalarında stereo ses kullanılır. İkincil parçalar genellikle alternatif biçimde içerik sunmak için kullanıldığından farklı sayıda parça içeren medyalar sunmak, çok sayıda izleyicinin videoyu duyamaması gibi önemli ana dillerinde sunulur.

Aşağıdaki senaryolarda, programlamanın neden önemli olduğu birincil ve ikincil parçaların aynı sayıda kanal içerdiği yerler:

1. Senaryo: Medya akışında kanal yok ilk ve ikincil kanallarda denklik:

  • İngilizce - AC-3 5.1 kanal (birincil)
  • isveç - AAC 2 kanallı
  • fransızca - AAC 2 kanallı
  • alman - AAC 2 kanallı

Bu senaryoda, oynatıcının dili Kullanıcı duymayı beklediği parçayı duymaz, çünkü iki kanallı parçalar oynatma sırasında filtrelenir. Proje başladıktan sonra birincil AC-3 5.1 kanalı olabilir ve yalnızca dili İngilizce olarak ayarlanmalıdır.

2. Senaryo: Kanallı medya akışı ilk ve ikincil kanallarda denklik:

  • İngilizce - AC-3 5.1 kanal (birincil)
  • isveç - AC-3 5.1 kanalı
  • fransız - AC-3 5.1 kanal
  • Almanca - AC-3 5.1 kanalı

Bu canlı yayındaki tüm parçalar aynı sayıda kanala sahip olduğu için seçilen dilden bağımsız olarak bir parça duyacak.

Shaka ses kanalı işleme

Shaka oynatıcısı (DASH) varsayılan olarak tercih edilen kanal sayısını ikincil medyalarda eşitliği olmayan medyalarla karşılaştığınızda uygulanan risk azaltma önlemi ses parçalarına dokunun.

Birincil parça surround ses değilse (örneğin, iki kanallı stereo) bir parça) oynattığınızda, Shaka Player'da varsayılan olarak iki kanal olur ve üzerinde ikiden fazla bulunan ikincil medya kanallarını otomatik olarak kanallar.

Shaka'nın tercih ettiği ses kanalı sayısı da shakaConfig mülkündeki preferredAudioChannelCount cast.framework.PlaybackConfig.

Örneğin:

shakaConfig = { "preferredAudioChannelCount": 6 };

preferredAudioChannelCount, 6 olarak ayarlandığında Shaka Player, kontrol ederek surround ses codec'lerini (AC-3 veya EC-3) destekleyebilir ve Tercih edilen reklam yayınına uymayan tüm medya kanallarını otomatik olarak izin verir.