البث المباشر

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

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

المتطلبات الأساسية

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

يتم استخدام المصطلحات التالية في الدليل:

  • النافذة التي تتيح البحث: تشير إلى نطاق البث المباشر الذي يمكن للمستخدمين الاطّلاع عليه.
  • Live Edge: أحدث جزء من بث مباشر متاح للمشغّل.
  • رأس التشغيل - طابع زمني لواجهة المستخدم لموضع التشغيل الحالي

بث بث مباشر

هناك طريقتان لإعداد "حزمة SDK الخاصة باستقبال الويب" لاستخدام Live API في المحتوى:

  1. باستخدام أداة اعتراض الرسائل "LOAD" في تطبيق "جهاز استقبال الويب" الخاص بك. (مستحسن)
  2. باستخدام طلب تحميل من إنشاء جهة المُرسِل أو جهة المستلِم

يوفر الاعتراض LoadRequestData يحتوي على جميع البيانات الوصفية المهمة حول طلب تحميل. إلى للإشارة إلى أن طلب التحميل يتعلق ببث مباشر، فما عليك سوى تعيين streamType في صفحة mediaInformation الاعتراض على StreamType.LIVE يجب أن تكون قيمة الحقل "MediaInformation.duration" هي -1 لأنّ مثيلات المشغّل نحن مسؤولون عن احتسابه عندما يكون المحتوى LIVE.

/*
* This interceptor is called before your content is loaded by a Cast device
*/
playerManager.setMessageInterceptor(
   cast.framework.messages.MessageType.LOAD,
   request => { /* cast.framework.messages.LoadRequestData */
       request.media.streamType = cast.framework.messages.StreamType.LIVE;
   return request;
});

إضافة بيانات أدلة البرامج

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

يمكنك ضبط بيانات الدليل الأولية لمصدر بيانات في رسالة "تحميل". جهاز اعتراض، بالطريقة نفسها التي أشرنا بها إلى أن البث كان بثًا مباشرًا في المثال السابق. تكون الأقسام أو البرامج الفردية في البث المباشر ممثلة في MediaMetadata الكائنات التي يتم تخزينها بعد ذلك في قائمة انتظار. هناك فئة MediaMetadata مختلفة لأنواع البرامج المختلفة، على سبيل المثال. TvShowMediaMetadata, MovieMediaMetadata, MusicTrackMediaMetadata، وهكذا.

في مقتطف الرمز التالي، نستخدم الكائن MediaMetadata لتحديد وقت بدء كل عرض مع الطابع الزمني لنظام التشغيل UNIX مع sectionStartAbsoluteTime الموقع. يتم تمثيل مدة البرنامج بالثواني.

// The metadata for a single TV show
const currentShow = new cast.framework.messages.TvShowMediaMetadata();
currentShow.episode = 15;
currentShow.seriesTitle = 'The Odyssey';
currentShow.title = 'Scylla and Charybdis';
currentShow.sectionStartAbsoluteTime = toUnixTimestamp('9:00 PM');
currentShow.sectionDuration = HOUR_IN_SECONDS;

const previousShow = new ...;
const nextShow = new ...;

const containerMetadata = new cast.framework.messages.ContainerMetadata();
containerMetadata.title = 'My TV Channel';
containerMetadata.sections = [previousShow, currentShow, nextShow];

playerManager.getQueueManager().setContainerMetadata(containerMetadata);

نطاق قابل للبحث المباشر

تتضمّن حزمة تطوير البرامج (SDK) الخاصة بالبث عناصر وعناصر تحكُّم في واجهة المستخدم تسمح للمستخدِم بنقل بياناتها. ضمن البث باستخدام وحدة تحكُّم موسّعة أو عناصر التحكّم باللمس على الأجهزة التي تعمل باللمس.

تشير رسالة الأشكال البيانية LiveSeekableRange النطاق الزمني في البث الذي يمكن للمستخدم تقديمه. في صفحة جهاز استقبال الويب يمكنك الوصول إلى معلومات حول النطاق المطلوب من خلال PlayerManager.getLiveSeekableRange()، وينتج عن ذلك LiveSeekableRange الخاص بك. في ما يلي السمات الأساسية التي يجب مراعاتها في العنصر:

  • start - وقت البدء (بالثواني) للنطاق بالنسبة إلى بدء البث بالثواني.
  • end - أقصى وقت ممكن (بالثواني) يمكن للّاعب تقديمه. بناءً على الشرائح المتاحة، مقارنةً ببداية البث
  • isMovingWindow — قيمة منطقية تشير إلى ما إذا كان النطاق القابل للبحث (أي تتم إزالة الشرائح القديمة من البيان) مع ساحة المشاركات، يجب أن تكون هذه القيمة صحيحة لكل أحداث البث المباشر.
  • isLiveDone: قيمة منطقية تشير إلى ما إذا كان البث المباشر يتضمن منتهٍ، مما يعني عدم إنشاء شرائح جديدة.

حجم النطاق القابل للبحث، ويتم تمثيله بالوقت بين start و يتم تحديد end من خلال عدد الشرائح المتاحة في ساحة المشاركات، وسيتم مع ساحة المشاركات. على سبيل المثال، إذا كان المستخدم الذي يبحث في بداية البث النطاق هو {start:0, end: 600, isMovingWindow: false, isLiveDone: false}، عشر بعد ثوانٍ من بدء البث، يمكن أن يصبح {start: 10, end: 610, isMovingWindow: true, isLiveDone: false}. من المهم ملاحظة البداية يتم تحديث أوقات الانتهاء في النطاق القابل للبحث بناءً على الوقت المستغرق إنشاء شريحة جديدة. وبالتالي، إذا كان المقطع النموذجي في البث المباشر 10 ثوانٍ، فسيتم تحديث أوقات البدء والانتهاء كل 10 ثوانٍ تقريبًا أيضًا.

إيقاف التقديم/الترجيع

لإيقاف التقديم/الترجيع ضمن بث، يجب إزالة وظيفة البحث. من أوامر الوسائط المتوافقة على جهاز استقبال الويب:

// disable seeking in the LOAD messageInterceptor
playerManager.removeSupportedMediaCommands(cast.framework.messages.Command.SEEK, true);

جارٍ إزالة أمر الوسائط المتوافق لإشارات SEEK إلى تطبيقات المُرسِلين ولمس الشاشات لإيقاف التقديم/الترجيع، بدون إيقاف الطلبات الصوتية بعبارة "Ok google، ترجيع بمقدار 30 ثانية" شاهد أوامر الوسائط المتوافقة مع الصوت دليل يتضمّن تفاصيل حول طريقة إيقاف الطلبات الصوتية للوسائط.

أحداث إطار العمل المباشرة

تم تضمين حدثين، هما LIVE_ENDED وLIVE_IS_MOVING_WINDOW_CHANGED في واجهة برمجة التطبيقات المباشرة. تم تمرير كلا الحدثين LiveStatusEvent الذي يحتوي على النطاق المباشر الحالي القابل للبحث.

الحدث الوصف
LIVE_ENDED يتم تشغيله عند انتهاء البث المباشر. في هذه المرحلة، سيتوقف تعديل قيمة النهاية في LiveSeekableRange. سيظل بإمكان المستخدمين عرض المحتوى ضمن النطاق القابل للبحث المباشر.
LIVE_IS_MOVING_WINDOW_CHANGED يتم تشغيله عندما يتغيّر النطاق القابل للبحث في بث مباشر من نافذة ثابتة إلى نافذة متحركة، أو العكس. أمّا في البث المباشر، فسيحدث ذلك عندما يكتشف اللاعب أنّ البيان يزيل المقاطع السابقة.

سيناريوهات البث المباشر

هناك ثمانية أنواع محتملة من السيناريوهات للبث المباشر، كلٌ منها: من خلال ضبط ثلاثة إعدادات أساسية:

  • تم تحديد وقت بدء البث
  • تم تحديد وقت انتهاء البث.
  • يُسمح للمستخدمين بالتنقّل ضمن نافذة البث المباشر القابلة للبحث.

راجِع إضافة بيانات دليل البرنامج لمعرفة كيفية ضبط إعداداتها. تلك القيم.

في ما يلي أوصاف ولقطات شاشة للسيناريوهات التي يوفّرها البث المباشر. واجهة برمجة التطبيقات. يتم استخدام المتغيرين T1 وT2 لتمثيل الطابع الزمني على يمين ويسار واجهة المستخدم على التوالي.

وقت البدء وقت الانتهاء يمكن جذبه T1 T2
السيناريو 1 لا لا لا رأس اللعب غير معروض
السيناريو 2 لا لا نعم لعبة Head غير معروض
السيناريو 3 لا نعم لا لعبة Head غير معروض
السيناريو 4 لا نعم نعم لعبة Head غير معروض
السيناريو 5 نعم لا لا عرض وقت البدء لعبة Head
السيناريو 6 نعم لا نعم عرض وقت البدء لعبة Head
السيناريو 7 نعم نعم لا إظهار وقت البدء إظهار وقت الانتهاء
السيناريو 8 نعم نعم نعم إظهار وقت البدء إظهار وقت الانتهاء

السيناريو الأول

وقت البدء وقت الانتهاء يمكن جذبه T1 T2
لا لا لا رأس اللعب غير معروض

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

السيناريو السابع

تلفزيون يعرض واجهة المستخدم المباشرة في Chromecast للسيناريو 7 مع وقت الساعة هاتف جوّال يعرض واجهة المستخدم المباشرة للسيناريو 7 مع وقت الساعة

وقت البدء وقت الانتهاء يمكن جذبه T1 T2
نعم نعم لا رأس اللعب مدة البرنامج

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

السيناريو الثامن

تلفزيون يعرض واجهة المستخدم المباشرة في Chromecast للسيناريو 8 مع وقت الساعة هاتف جوّال يعرض واجهة المستخدم المباشرة للسيناريو 8 مع وقت الساعة

وقت البدء وقت الانتهاء يمكن جذبه T1 T2
نعم نعم نعم رأس اللعب مدة البرنامج

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

تهيئة سيناريو

يتم ضبط إعدادات بث مباشر في سيناريو بث مباشر على ثلاثة أجزاء:

  1. ضبط نوع البث: وضع علامة على البث باعتباره "بثًا" بث مباشر.
  2. إضافة بيانات دليل البرنامج: ضبط وقت البدء والمدة في الكائن MediaMetadata.
  3. إعداد وظائف البحث - تفعيل أو إيقاف التقديم/الترجيع.

سلوك التشغيل

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

أحداث البث التي يمكن البحث عنها

عند استئناف بث يمكن البحث عنه:

  • يجب تحديث الحافة المباشرة إلى الموقع المباشر والنطاق القابل للبحث. وفقًا لذلك.
  • إذا تجاوز رأس التشغيل العرض الحالي، سيتم تحديث شريط التقديم والترجيع. مع البيانات الوصفية من العرض الجديد (بما في ذلك وقت البدء ووقت الانتهاء إذا المتوفرة).
  • إذا كان طول نافذة قابلة للترجيع بها "X"، فسيمتد نطاق البحث إلى "X" على الأكثر، أو إلى بداية العرض، أيهما أصغر.
  • إذا تم إيقاف المستخدم مؤقتًا لمدة كافية بحيث لا يعود الوقت الحالي نافذة جديدة، سيتم استئناف البث في أقرب وقت ممكن (في أقصى اليسار) في نافذة البحث.

ترجيع إلى LiveSeekableRange.end لاستئناف التشغيل أثناء البث المباشر بعد إلغاء الإيقاف المؤقت.

let playerManager = cast.framework.CastReceiverContext.getInstance().getPlayerManager();
// Intercept the message to PLAY
playerManager.setMessageInterceptor(cast.framework.messages.MessageType.PLAY, (requestData) => {
  ...
  if (playerManager.getLiveSeekableRange()) {
    // Resume playback at the live edge
    playerManager.seek(playerManager.getLiveSeekableRange().end);
  } else {
    return requestData;
  }
  ...
});

أحداث البث التي لا يمكن اقتراحها

عند استئناف بث غير قابل للبحث:

  • في هذه الحالة، سيتم استئناف التشغيل عند الحافة المباشرة.
  • إذا تجاوزت الحافة المباشرة العرض الحالي، فينبغي أن يكون شريط التقديم والترجيع بتحديث باستخدام البيانات الوصفية من العرض الجديد (بما في ذلك وقت البدء والانتهاء الوقت إذا كان ذلك متاحًا).

التغييرات في مساحات عرض واجهة برمجة التطبيقات تخصيص واجهة المستخدم المباشرة

توفِّر حزمة تطوير البرامج (SDK) لتكنولوجيا Cast إمكانية إنشاء واجهات مستخدم مخصَّصة بدلاً من باستخدام واجهة المستخدم الجاهزة. ومع ذلك، من المهم اتباع إرسال قائمة التحقق من تصميم تجربة المستخدم عند تخصيص من واجهة pyplot.

مستقبِل الويب

في جهاز استقبال الويب، PlayerData الحقول التالية للسماح للمطوّرين بتوسيع نطاق واجهات البث المباشر:

  • isLive - علامة تشير إلى ما إذا كان البث الحالي عبارة عن بث مباشر مقارنةً بالفيديوهات المسجّلة
  • liveSeekableRange - النطاق القابل للبحث الذي سيتم عرضه على تعيين حدود الشاشة نافذة DVR.
  • mediaStartAbsoluteTime: عند بدء القسم في الوقت المطلق (حقبة UNIX)
  • sectionStartTimeInMedia - وقت بدء القسم بالثواني بالنسبة إلى وقت بدء تشغيل الوسائط.
  • sectionDuration: مدة القسم بالثواني

تأكد أيضًا من مراعاة حدثان مباشران عند تخصيص واجهة المستخدم.

Android SDK

كجزء من وظيفة البث المباشر، تم استخدام أداة Android Seekbar Widget في تم إيقاف UIMediaController نهائيًا، ويمكنك بدلاً من ذلك استخدام CastSeekBar.