بروتوكولات بث مشغِّلات استقبال الويب

تتوافق حزمة تطوير البرامج (SDK) لجهاز الاستقبال على الويب مع ثلاثة أنواع من بروتوكولات البث الحالية:

DASH، HTTP Live البث البث السلس:

نستعرض في هذا المستند الدعم لكل بروتوكول من بروتوكولات البث. ملاحظة يتم اختصار شرح العلامات المتوافقة لكل بروتوكول بدرجة كبيرة مقارنةً بمواصفات البروتوكول التفصيلية. إن الهدف هو توفير نظرة سريعة على كيفية استخدام كل بروتوكول وميزاته من البروتوكول على الأجهزة التي تعمل بتكنولوجيا Google Cast لتقديم وتجارب البث.

البث الديناميكي التكيُّفي عبر HTTP (DASH)

مقاييس ISO المواصفات التفصيلية لـ DASH.

DASH هو بروتوكول للبث التكيفي يتيح بث الفيديو عالي الجودة البث عبر خوادم HTTP(S). ويحتوي البيان، المؤلف بتنسيق XML، على معظم عن معلومات البيانات الوصفية حول كيفية إعداد الفيديو وتنزيله المحتوى. المفاهيم الرئيسية التي يدعمها مشغّل مستقبل الويب هي <Period>، <AdaptationSet> و<Representation> و<SegmentTemplate> <SegmentList> و<BaseUrl> و<ContentProtection>

يبدأ بيان DASH بعلامة <MPD> الجذر ويتضمن الداخل علامة أو المزيد من علامات <Period> التي تمثّل محتوى بثًا واحدًا. تتيح علامات <Period> ترتيب أجزاء مختلفة من المحتوى الذي يتم بثه. وغالبًا ما تُستخدم لفصل المحتوى الرئيسي والإعلانات أو المحتوى المتتالية في الفيديو.

تمثل <AdaptationSet> ضمن <MPD> مجموعة من تمثيلات نوعًا واحدًا من بث الوسائط، في معظم الأحيان، فيديو أو صوت أو ترجمة وشرح. الأكثر أنواع MIME التي يشيع استخدامها هي "video/mp4" و"audio/mp4" و"text/vtt". إنّ يمكن تضمين <ContentComponent contentType="$TYPE$">. أقل من <AdaptationSet>.

يجب أن تحتوي كل <AdaptationSet> على قائمة بعلامات <Representation> التواجد ويستخدم مشغل الويب المستقبل معلومات codecs لتنفيذ ما يلي: إعداد المخزن المؤقت لمصدر الخطأ التربيعي المتوسط ومعلومات 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 (وحدات تمثل ثانية واحدة) غالبًا ما يتم تضمينها كجزء من سمات <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 هنا نطاق البيانات الوصفية الأولية وتحدّد العلامة 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 نظام إدارة الحقوق الرقمية بشكل فريد الذي يجب استخدامه. يمكن تضمين رقم تعريف مفتاح اختياري للتشفير المشترك.

<!-- 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 لتحديد عدد مقطع الوسائط الأول في العرض التقديمي في الفترة. يتم استخدام هذه الطريقة غالبًا في البث المباشر.

نتيح أيضًا التعرّف على مربّع EMSG داخل أجزاء MP4 بالنسبة إلى DASH توفير EmsgEvent للمطورين.

على الرغم من أن مشغّل الويب الحالي الذي نستخدمه يتوافق مع حالات استخدام DASH الرئيسية، نذكر هنا هو قائمة بالسمات الشائعة التي يعتمدها تطبيق DASH في الوقت الحالي يتجاهل أو لا يستخدم. هذا يعني بغض النظر عما إذا كان البيان يحتوي على على تجربة تشغيل المحتوى.

  • availabilityStartTime
  • segmentAlignment

البث المباشر وفق بروتوكول HTTP ‏(HLS)

يمكن الحصول على نظرة عامة ومواصفات البث المباشر الكاملة عبر HTTP. هنا.

تتمثل إحدى نقاط القوة الرئيسية لمشغِّل مستقبل الويب في قدرته على دعم تشغيل HLS في MSE. يختلف الأمر عن DASH، حيث يأتي البيان في يرسل HLS قائمة التشغيل الرئيسية التي تحتوي على قائمة بجميع عمليات بث الصيغ مع عنوان URL الخاص بها. قائمة تشغيل الشكل هي قائمة تشغيل الوسائط. الاثنين علامات HLS الرئيسية التي يدعمها مشغّل استقبال الويب حاليًا في بروتوكول قائمة التشغيل هي:

اسم العلامة الوظائف
#EXT-X-STREAM-INF تحدّد هذه السياسة معدل نقل البيانات أو خيارات البث المختلفة. السمة BANDWIDTH هي يتطلب اختيار بث معدل نقل البيانات بشكل تكيُّفي. تشير رسالة الأشكال البيانية يُنصح بشدة باستخدام السمة 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 المعلومات الأساسية لإدارة الحقوق الرقمية تخبرنا السمة METHOD بالمفتاح استخدامه. نتيح اليوم استخدام AES-128 وSAMPLE-AES. .
#EXT-X-BYTERANGE نطاق البايت المطلوب جلبه لعنوان URL للشريحة.
#EXT-X-DISCONTINUITY تحدد هذه السمة المسافة بين المقاطع المتتالية. غالبًا ما تتم ملاحظة ذلك إدراج إعلان من جهة الخادم حيث تظهر شريحة إعلان في منتصف التيار الرئيسي.
#EXT-X-PROGRAM-DATE-TIME الوقت المطلق للعينة الأولى من المقطع التالي، على سبيل المثال &quot;2016-09-21T23:23:52.066Z&quot;.
#EXT-X-ENDLIST ما إذا كان المحتوى فيديو عند الطلب أو بثًا مباشرًا

نستخدم #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). إذا لم يكن عنوان URL، على سبيل المثال سيؤدي النقر على #EXT-X-DISCOUNTINUITY إلى تعذُّر تحليل قائمة التشغيل.

كل #EXT-X-TARGETDURATION ثانية، نعيد تحميل قائمة التشغيل/البيان للحصول على قوائم شرائح جديدة ونحدّث التمثيل الداخلي الجديد لجميع الشرائح الجديدة. في أي وقت يتم فيه طلب البحث، لا نبحث سوى خلال المدى القابل للبحث. بالنسبة إلى البث المباشر، نسمح فقط بالتقديم/الترجيع من بداية أحدث قائمة حتى ثلاث مدة مستهدَفة من النهاية. على سبيل المثال، إذا كانت لديك قائمة مكوّنة من 10 مقاطع، وكنت في الشريحة 6، يمكنك فقط البحث عن إلى 7 ولكن ليس 8.

دعم تنسيق الشرائح

تتيح حزمة تطوير البرامج (SDK) الخاصة بنموذج CAF تشغيل المحتوى الذي يتم إرساله بتنسيقات متعددة على النحو المُشار إليه. في HlsSegmentFormat للصوت وHlsVideoSegmentFormat للفيديو. ويشمل ذلك الدعم محتوى صوتي مضغوط مثل التشغيل بتنسيق AAC وAC3، سواء كان مشفّرًا أم غير مشفّر يجب ملء هذا الحقل لتحديد هذه المعلومات في MediaInformation من LoadRequestData من أجل وصف المحتوى الخاص بك للمشغل بشكل صحيح. إذا لم يتم تحديده، سيتم سيحاول إعداد المشغّل التلقائي تشغيل المحتوى كنقل. بث المحتوى المجمّع. يمكن إعداد هذا الموقع من أي من المرسلين في بيانات طلب التحميل (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 أعلاه، تتوافق حزمة تطوير البرامج (SDK) مع Cast. 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 المرمّزة XXXXXXX التي تحتوي على معرّف المفتاح عند فك ترميزها:

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

يحدد الإصدار 1 السمات التالية:

السمة مثال الوصف
KEYFORMATVERSIONS "1" يحدد هذا الاقتراح الإصدار 1 للتنسيق الرئيسي
KEYFORMAT "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" المعرّف الفريد العالمي (UUID) هو المعرّف الفريد العالمي Widevine من DASH IF IOP. يتم استخدام السلسلة نفسها نفسها بتنسيق MPD مع مجموعات البث المشفَّرة من Widevine.
URI "data:text/plain;base64, <base64 encoded PSSH box>" معرّف الموارد المنتظم (URI) للبث الذي يحتوي على نوع البيانات وصندوق PSSH
METHOD SAMPLE-AES-CTR يشير إلى شفرة التشفير المستخدمة عند تشفير المحتوى. يشير نموذج SAMPLE-AES إلى أنّه تم تشفير المحتوى باستخدام "cbcs". تُشير SAMPLE-AES-CTR إلى أن المحتوى مشفَّر باستخدام أحد أنظمة الحماية المستندة إلى AES-CTR، وهو مخطط "cenc".

السمات التي تم تعيينها إلى DASH MPD:

السمة الوصف
KEYFORMAT سمة schemeIdUri في عنصر ContentProtection
URI محتوى العنصر cenc:pssh
KEYID سلسلة سداسية عشرية 16 بايت تقوم بترميز معرف المفتاح والذي له نفس دور default_kid في MPEG DASH. في حالة استخدام نظام مفتاح هرمي، يكون هذا هو "الجذر" المفتاح.

مثال على قائمة تشغيل HLS مع إشارة V2:

#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 التي لا نستخدمها حاليًا أو والدعم. ولا يؤثّر حضور هذه الفيديوهات أو غيابها على تجربة البث.

  • تم تجاهل السمة RESOLUTION= في #EXT-X-STREAM-INF.
  • السمة AUTOSELECT= في #EXT-X-MEDIA غير مُستخدَمة. بدلاً من ذلك، نعتمد على DEFAULT=
  • تم تجاهل #EXT-X-I-FRAME-STREAM-INF في قائمة التشغيل الرئيسية.
  • تم تجاهل #EXT-X-DISCONTINUITY-SEQUENCE
  • يمكن أن تشارك "#EXT-X-PLAYLIST-TYPE:EVENT" في بث مباشر يمكن أن يظهر الفيديو #EXT-X-PLAYLIST-TYPE:VOD في بث فيديو عند الطلب، ولكنّنا في الوقت الحالي يعتمد مشغّل مستقبل الويب فقط على وجود #EXT-X-ENDLIST تحديد متغيرات مباشرة مقابل فيديو عند الطلب

البث السلس

نهج Microsoft الرسمي مواصفات البث السلس:

يوفر البث السلس مواصفات بروتوكول البث التكيُّفي ومواصفات XML عبر HTTP (يشبه DASH). تختلف ميزة "البث السلس" عن DASH، فميزة "البث السلس" مقترَحة حزمة MPEG-4 فقط لشرائح الوسائط.

في ما يلي جدول يتضمّن العلامات والسمات الأكثر شيوعًا في البث السلس الذي الذي يدعمه مشغّل الويب المستقبِل اليوم. لقد تم شرح العديد من المفاهيم بالفعل في قسم DASH أعلاه.

العلامة/السمة الاستخدام
&lt;SmoothStreamingMedia&gt; تشمل العلامة الرئيسية للبيان السمات التالية:
  • مقياس زمني: عدد الوحدات التي تمثل ثانية واحدة، وهو عادةً ما يكون أكبر من 10000000.
  • المدة: مدة المحتوى حسب المقياس الزمني يقوم مشغّل استقبال الويب لا تدعم المدد الأقصر من 0.1 ثانية.
  • IsLive: ما إذا كان البيان وسائط مباشرة.
&lt;StreamIndex&gt; مجموعة واحدة من البث، تشبه مجموعة AdaptationSet من DASH. عادة ما يكون النوع "نص" أو "فيديو" أو "صوت". عادةً ما تحتوي سمة عنوان Url على نموذج عنوان URL مجزأ باستخدام معلومات مثل معدل نقل البيانات أو وقت البدء.
&lt;QualityLevel&gt; تحدد كل علامة QualityLevel معدل البت الخاص بها وبرنامج الترميز FourCC. فريق FourCC الرمز "H264" أو "AVC1" أو "AACL" وما إلى ذلك. بالنسبة إلى الفيديو، يحدد الدقة من خلال Maxالعرض وMaxHeight. بالنسبة للصوت، فإنه يحدد (مثل 44100) إلى معدل SamplingRate وعدد القنوات.
&lt;c&gt; بث عنصر جزء من الصفحة يحتوي على:
  • d: مدة الجزء.
  • t: وقت الوسائط للجزء
&lt;Protection&gt; علامة تحتوي على سمة SystemID الاختيارية تسرد رقم تعريف النظام إدارة الحقوق الرقمية (DRM) التي يتم استخدامها ضمن <SmoothStreamingMedia> .
&lt;ProtectionHeader&gt; ضمن <Protection>، يمكن أن يحتوي على سمة SystemID وcustom بترميز Base64 عادةً. بالنسبة إلى Widevine، سيحتوي على معرّف المفتاح، ومعرّف الخوارزمية مثل AESCTR أو LA_URL (عنوان URL للحصول على الترخيص) LUI_URL (عنوان URL لواجهة مستخدم الترخيص) وDas_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)
...

إليك قائمة بسمات البث السلس التي نتجاهلها حاليًا لا تؤثر في تجارب البث بغض النظر عما إذا تم تقديمها:

  • CanSeek وCanPause في العلامة <SmoothStreamingMedia>
  • الأجزاء والجودة في العلامة <StreamIndex> بدلاً من ذلك، نحسب عدد الشرائح وعدد مستويات الجودة استنادًا إلى المعلومات المقدمة داخل <StreamIndex>، مثل العلامة QualityLevel الفعلية علامات <c>
  • BitsPerSample، ولا يتم استخدام PacketSize في <QualityLevel>.

التحقّق من نوع العرض

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). لمحتوى الوسائط تم تخزين ترخيص إدارة الحقوق الرقمية (وعنوان URL الرئيسي) الخاص به في ملف البيان الخاص به (DASH أو HLS)، ستعالج حزمة تطوير البرامج (SDK) لتكنولوجيا Cast هذا الطلب نيابةً عنك. تتطلب مجموعة فرعية من هذا المحتوى licenseUrl وهو المطلوب للحصول على مفتاح فك التشفير. في جهاز استقبال الويب، يمكنك استخدام 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 من خلال آليات، مثل OAuth/الدخول المُوحَّد (SSO) في تلك الحالات، إذا كانت تحميل محتوى الوسائط من خلال الصوت أو من السحابة، يتم استدعاء تطبيق "setCredentials" من السحابة الإلكترونية إلى جهاز البث لتقديم ما يلي: بيانات الاعتماد. ويمكن للتطبيقات التي تكتب تطبيقًا للمستقبِل الويب استخدام setCredentials لتشغيل إدارة الحقوق الرقمية حسب الضرورة. فيما يلي مثال على استخدام بيانات الاعتماد لإنشاء الوسائط.

ملاحظة: راجِع أيضًا المقالة تحميل الوسائط باستخدام contentId وcontentUrl والكيان.

معالجة القنوات الصوتية

عندما يحمِّل مشغّل البثّ الوسائط، يتم إعداد مخزن مؤقت واحد لمصدر الصوت. علامة @ وفي الوقت ذاته، تختار أيضًا برنامج الترميز المناسب ليستخدمه المخزن المؤقت، استنادًا إلى نوع MIME للمسار الأساسي. تم إعداد مورد وبرنامج ترميز جديدين:

  • عند بدء التشغيل،
  • عند كل فاصل إعلاني
  • في كل مرة يستأنف فيها المحتوى الرئيسي.

وذلك لأن المخزن المؤقت يستخدم برنامج ترميز واحدًا، ولأنه يتم اختيار برنامج الترميز استنادًا إلى المسار الأساسي، هناك مواقف قد يتم فيها تعديل تمت تصفيتها ولم يتم سماعها. يمكن أن يحدث هذا عندما يتم تحديد المقطع الصوتي في صوت محيطي، لكن المقاطع الصوتية الثانوية تستخدم صوت استيريو. لأنّ المسارات الثانوية تُستخدم بشكل متكرر لتقديم محتوى بديل اللغات، فإن توفير وسائط تحتوي على أعداد مختلفة من المقاطع الصوتية يمكن أن تأثير كبير، مثل عجز عدد كبير من المشاهدين عن السماع المحتوى بلغتهم الأم.

توضح السيناريوهات التالية سبب أهمية توفير البرمجة تحتوي فيها المسارات الأساسية والثانوية على عدد القنوات نفسه:

السيناريو الأول - عدم توفُّر قناة لبث الوسائط المساواة عبر المسارين الأساسي والثانوي:

  • الإنجليزية - قناة AC-3 5.1 (الأساسية)
  • swedish - قناتان AAC
  • الفرنسية - قنوات AAC
  • الألمانية - قناة 2 AAC

في هذا السيناريو، إذا كانت لغة المشغّل معينة على أي لغة أخرى باللغة الإنجليزية، فلا يسمع المستخدم المقطع الذي يتوقع أن يسمعه، لأن جميع تتم تصفية المقاطع الصوتية ذات قناتين أثناء التشغيل. إن المسار الوحيد الذي هو قناة AC-3 5.1 الأساسية، وبعد ذلك فقط عندما تم تعيين اللغة على الإنجليزية.

السيناريو الثاني - بث الوسائط مع القناة المساواة عبر المسارين الأساسي والثانوي:

  • الإنجليزية - قناة AC-3 5.1 (الأساسية)
  • swedish - قناة AC-3 5.1
  • الفرنسية - قناة AC-3 5.1
  • الألمانية - قناة AC-3 5.1

بما أنّ جميع المقاطع الصوتية في هذا البث لديها العدد نفسه من القنوات، سيتم سماع المقطع الصوتي بغض النظر عن اللغة المحددة.

معالجة قناة Shaka الصوتية

يتم ضبط مشغل Shaka بشكل افتراضي على عدد القنوات المفضل وهو قناتين، تدابير تخفيف الأثر عند مواجهة وسائط تفتقر إلى التكافؤ عبر والمقاطع الصوتية.

إذا لم يكن المقطع الصوتي الأساسي عبارة عن صوت محيطي (مثلاً، صوت استيريو ثنائي القناة المسار)، فسيتم بشكل افتراضي تشغيل مشغل Shaka على قناتين، تصفية أي مسارات للوسائط الثانوية التي تحتوي على أكثر من مقطعين بشكل أفضل.

يمكن أيضًا ضبط عدد القنوات الصوتية المفضّلة لدى Shaka من خلال preferredAudioChannelCount في السمة shakaConfig على cast.framework.PlaybackConfig.

على سبيل المثال:

shakaConfig = { "preferredAudioChannelCount": 6 };

عند ضبط قيمة preferredAudioChannelCount على 6، يتحقّق Shaka Player لمعرفة ما إذا يمكنه أن يتوافق مع برامج ترميز الصوت المحيطي (AC-3 أو EC-3) تقوم تلقائيًا بتصفية أي مسارات للوسائط التي لا تتوافق مع عدد القنوات.