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 "2016-09-21T23:23:52.066Z". |
#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
öğesindekiRESOLUTION=
özelliği yoksayıldı.#EXT-X-MEDIA
içindekiAUTOSELECT=
özelliği kullanılmıyor. Bunun yerineDEFAULT=
.- 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 |
---|---|
<SmoothStreamingMedia> | Manifest için ana etiket, şu özellikleri içerir:
|
<StreamIndex> | 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. |
<QualityLevel> | 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. |
<c> | Akış Parçası Öğesi. Şunu içerir:
|
<Protection> | İ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. |
<ProtectionHeader> | <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çekQualityLevel
etiketi ve<c>
etiket.- BitsPerSample,
<QualityLevel>
içinde PacketSize kullanılmaz.
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.