نظرة عامة
تتيح حزمة تطوير البرامج (SDK) الخاصة بـ WebRecipients إمكانية إضافة المحتوى إلى قائمة الانتظار مع
قائمة الانتظار الافتراضية التي توفرها
تستخدم حزمة SDK
QueueData
أو
QueueManager
أو استخدام قائمة انتظار مخصّصة
جارٍ التنفيذ
cast.framework.QueueBase
واستخدام
QueueManager
للحصول على التحديثات.
تسمح واجهة برمجة التطبيقات Pendinging API بدمج التطبيقات بشكل أفضل مع Cast من خلال توفير الميزات التالية:
- دعم تطبيق قائمة انتظار السحابة الإلكترونية لكل من Google وشركائك بشكل خارجي يمكن تحميل قائمة المحتوى التالي المخزنة والمُنشأة مباشرةً إلى أجهزة البث.
- الآليات التي تسمح بتقسيم العناصر في قائمة الانتظار إلى صفحات بدلاً من التحميل كل شيء في وقت واحد.
- إتاحة استخدام رسائل جديدة مثل الانتقال إلى العنصر التالي أو العنصر السابق وجلب نافذة من العناصر، فضلاً عن الحصول على معلومات الوسائط المتعلقة مجموعة من عناصر قائمة الانتظار.
- تشير رسالة الأشكال البيانية
QueueManager
إدارة عملية إدراج العناصر في قائمة المحتوى التالي وإزالتها وتعديلها
قائمة الانتظار التلقائية
توفِّر حزمة تطوير البرامج (SDK) استلام الويب دعمًا محدودًا لقائمة الانتظار في النموذج لقائمة انتظار افتراضية.
لاستخدام قائمة الانتظار الافتراضية، قدم
queueData
في LoadRequestData
من عمليات التحميل من جهة المُرسِل، أو أرسِل طلب تحميل على الجهاز
استخدام
PlayerManager#load
راجِع أيضًا تحميل الوسائط.
ومن جهة المستلِم، يمكن تعديل قائمة المحتوى التالي باستخدام
QueueManager
بمجرد تحميل الوسائط الأولية.
قائمة انتظار مخصّصة
إذا كانت قائمة الانتظار الافتراضية لا توفر وظيفة الانتظار في قائمة الانتظار المطلوبة لتطبيقك، تتوفر إمكانية إنشاء قائمة انتظار مخصصة، مما يتيح المزيد والإمكانات والمرونة.
يمكن لمطوّري التطبيقات إنشاء قائمة انتظار جانبية لـ "مستقبل الويب" من خلال تنفيذ
cast.framework.QueueBase
فيما يلي مثال أساسي لقائمة انتظار بسيطة حيث
initialize
تم إلغاء المكالمة، ثم يتم عرض قائمة بعناصر قائمة الانتظار مع أوصاف قائمة الانتظار.
إلى جهاز البث.
راجِع أيضًا تحميل الوسائط.
// Creates a simple queue with a combination of contents.
const DemoQueue = class extends cast.framework.QueueBase {
constructor() {
super();
/**
* List of media urls.
* @private @const {!Array<string>}
*/
this.myMediaUrls_ = [...];
}
/**
* Provide a list of items.
* @param {!cast.framework.messages.LoadRequestData} loadRequestData
* @return {!cast.framework.messages.QueueData}
*/
initialize(loadRequestData) {
const items = [];
for (const mediaUrl of this.myMediaUrls_) {
const item = new cast.framework.messages.QueueItem();
item.media = new cast.framework.messages.MediaInformation();
item.media.contentId = mediaUrl;
items.push(item);
}
let queueData = loadRequestData.queueData;
// Create a new queue with media from the load request if one doesn't exist.
if (!queueData) {
queueData = new cast.framework.messages.QueueData();
queueData.name = 'Your Queue Name';
queueData.description = 'Your Queue Description';
queueData.items = items;
// Start with the first item in the playlist.
queueData.startIndex = 0;
// Start from 10 seconds into the first item.
queueData.currentTime = 10;
}
return queueData;
}
};
في هذا المثال، تمثل قائمة العناصر في
initialize
مكالمة واردة في عنوان URL الخاص بمقدّم الخدمة
QueueBase
الدالة الإنشائية. ومع ذلك، بالنسبة إلى تنفيذ قائمة انتظار السحابة الإلكترونية،
فإن واجهة الويب المخصصة
يمكن لمنطق المُستلِم جلب العناصر خارجيًا ثم إرجاعها كجزء من
اتصال الإعداد.
لتوضيح استخدام أكثر شمولاً لواجهة برمجة التطبيقات في قائمة الانتظار، إليكم عرضًا توضيحيًا
قائمة انتظار تنفذ معظم
صف واحد (QueueBase
).
const DemoQueue = class extends cast.framework.QueueBase {
constructor() {
/** @private {} */
super();
YourServer.onSomeEvent = this.updateEntireQueue_;
}
/**
* Initializes the queue.
* @param {!cast.framework.messages.LoadRequestData} loadRequestData
* @return {!cast.framework.messages.QueueData}
*/
initialize(loadRequestData) {
let queueData = loadRequestData.queueData;
// Create a new queue with media from the load request if one doesn't exist.
if (!queueData) {
queueData = new cast.framework.messages.QueueData();
queueData.name = 'Your Queue Name';
queueData.description = 'Your Queue Description';
// Put the first set of items into the queue
const items = this.nextItems();
queueData.items = items;
// Start with the first item in the playlist.
queueData.startIndex = 0;
// Start from 10 seconds into the first item.
queueData.currentTime = 10;
}
return queueData;
}
/**
* Picks a set of items from remote server after the reference item id and
* return as the next items to be inserted into the queue. When
* referenceItemId is omitted, items are simply appended to the end of the
* queue.
* @param {number} referenceItemId
* @return {!Array<cast.framework.QueueItem>}
*/
nextItems(referenceItemId) {
// Assume your media has a itemId and the media url
return this.constructQueueList_(YourServer.getNextMedias(referenceItemId));
}
/**
* Picks a set of items from remote server before the reference item id and
* return as the items to be inserted into the queue. When
* referenceItemId is omitted, items are simply appended to beginning of the
* queue.
* @param {number} referenceItemId
* @return {!Array<cast.framework.QueueItem>}
*/
prevItems(referenceItemId) {
return this.constructQueueList_(YourServer.getPrevMedias(referenceItemId));
}
/**
* Constructs a list of QueueItems based on the media information containing
* the item id and the media url.
* @param {number} referenceItemId
* @return {!Array<cast.framework.QueueItem>}
*/
constructQueueList_(medias) {
const items = [];
for (media of medias) {
const item = new cast.framework.messages.QueueItem(media.itemId);
item.media = new cast.framework.messages.MediaInformation();
item.media.contentId = media.url;
items.push(item);
}
return items;
}
/**
* Logs the currently playing item.
* @param {number} itemId The unique id for the item.
* @export
*/
onCurrentItemIdChanged(itemId) {
console.log('We are now playing video ' + itemId);
YourServer.trackUsage(itemId);
}
};
في المثال أعلاه، YourServer
هو خادم قائمة انتظار السحابة الإلكترونية وله منطق
حول كيفية استرجاع عناصر وسائط معيّنة
لاستخدام QueueBase
- تضعها في قائمة الانتظار، واحدة من شأنها تعيين خيار قائمة الانتظار في
CastReceiverContext
:
const context = cast.framework.CastReceiverContext.getInstance();
context.start({queue: new DemoQueue()});
إدارة قائمة انتظار
تشير رسالة الأشكال البيانية
QueueManager
المطوّرين في تطوير حلول قوائم الانتظار من خلال توفير
للوصول إلى القائمة المخزنة حاليًا بعناصر قائمة الانتظار بالإضافة إلى
العنصر قيد التشغيل الحالي. كما أنها توفر عمليات مثل الإدراج والإزالة
وتحديث العناصر المدرَجة في قائمة الانتظار. يوضح المقتطف التالي كيفية الوصول إلى
مثال على
QueueManager
:
const context = cast.framework.CastReceiverContext.getInstance();
const queueManager = context.getPlayerManager().getQueueManager();
الإدارة التلقائية لقائمة الانتظار
بمجرد تحميل قائمة الانتظار الأولية،
QueueManager
يمكن استخدامها لتنفيذ إجراءات مثل استرداد العنصر الحالي واسترداد
جميع العناصر في قائمة الانتظار، وتحديث العناصر في قائمة الانتظار باستخدام
insertItems
,
removeItems
,
أو
updateItems
.
إدارة قوائم الانتظار المخصّصة
فيما يلي مثال على تنفيذ قائمة انتظار مخصصة يستخدم الإدراج
إزالة المحتوى استنادًا إلى حدث معيّن. يوضح المثال أيضًا استخدام
updateItems
حيث يمكن للمطورين تعديل عناصر قائمة الانتظار في قائمة الانتظار الحالية، مثل
إزالة الفواصل الإعلانية.
const DemoQueue = class extends cast.framework.QueueBase {
constructor() {
super();
/** @private @const {!cast.framework.QueueManager} */
this.queueManager_ = context.getPlayerManager().getQueueManager();
}
/**
* Provide a list of items.
* @param {!cast.framework.messages.LoadRequestData} loadRequestData
* @return {!cast.framework.messages.QueueData}
*/
initialize(loadRequestData) {
// Your normal initialization; see examples above.
return queueData;
}
/** Inserts items to the queue. */
onSomeEventTriggeringInsertionToQueue() {
const twoMoreUrls = ['http://url1', 'http://url2'];
const items = [];
for (const mediaUrl of twoMoreUrls) {
const item = new cast.framework.QueueItem();
item.media = new cast.framework.messages.MediaInformation();
item.media.contentId = mediaUrl;
items.push(item);
}
// Insert two more items after the current playing item.
const allItems = this.queueManager_.getItems();
const currentItemIndex = this.queueManager_.getCurrentItemIndex();
const nextItemIndex = currentItemIndex + 1;
let insertBefore = undefined;
if (currentItemIndex >= 0 &&
currentItemIndex < allItems.length - 1) {
insertBefore = allItems[nextItemIndex].itemId;
}
this.queueManager_.insertItems(items, insertBefore);
}
/** Removes a particular item from the queue. */
onSomeEventTriggeringRemovalFromQueue() {
this.queueManager_.removeItems([2]);
}
/** Removes all the ads from all the items across the entire queue. */
onUserBoughtAdFreeVersion() {
const items = this.queueManager_.getItems();
this.queueManager_.updateItems(items.map(item => {
item.media.breaks = undefined;
return item;
}));
}
};
الرسائل الواردة والصادرة
لتوفير دعم كامل لجلب قائمة الانتظار من جهة المُستلِم كمصدر للحقيقة، تقديم ومعالجة رسائل CAF الإضافية التالية حزمة تطوير البرامج (SDK) للمستلِم:
رسالة واردة | المعلّمات | رسالة ردّ صادرة | إرجاع |
التالي | ليست هناك مَعلمة مطلوبة. | MEDIA_STATUS | سيبدأ المتلقي (يجلبه من خلال nextItems() إذا لزم الأمر) ويبدأ اللعب العنصر التالي. |
السابق | ليست هناك مَعلمة مطلوبة. | MEDIA_STATUS | سيجري مستلم الويب (يجلب من خلال prevItems() إذا لزم الأمر) ويبدأ تشغيل العنصر السابق. |
FETCH_ITEMS | FetchItemsRequestData | QUEUE_CHANGE | A cast.framework.messages.playlistChange. وكمثال، بالنسبة إلى حالة الإدراج، سيحتوي حقل السلع في ملف JSON على قائمة بالسلع الجديدة التي تم جلبها. |
GET_ITEMS_INFO | GetItemsInfoRequestData التي تحتوي على itemIds: مصفوفة<number> | ITEMS_INFO | cast.framework.messages.ItemsInfo مع معلومات عنصر قائمة الانتظار. |
GET_QUEUE_IDS | ليست هناك مَعلمة مطلوبة. | QUEUE_IDS | cast.framework.messages.QueueIds. |
بالنسبة إلى NEXT
/PREVIOUS
، إذا كان تمثيل قائمة الانتظار الحالي على مستقبل الويب
على المزيد من العناصر،
QueueBase.nextItems()
أو
QueueBase.prevItems()
يتم استدعاء تلقائيًا لاستلام المزيد من العناصر.
بالنسبة إلى FETCH_ITEM
، لا يمكن للدالة المتجاوبة
fetchItems
في تنفيذ QueueBase
، يتم استدعاء قوائم الانتظار في السحابة الإلكترونية، والتي تسترد
البيانات ذات الصلة التي سيتم إرجاعها إلى جهاز استقبال الويب لتخزينها.
كلما تم استرجاع المزيد من العناصر، يتم تشغيل نوع رسالة جديد "QUEUE_CHANGE
".
وإرساله مرة أخرى إلى المرسل. اطلع على الأنواع المختلفة من
التغييرات في قائمة الانتظار.
معلومات تسجيل الدخول إلى GET_ITEMS_INFO
QueueBase
عدم تنفيذ الإجراء ويعرض جهاز استقبال الويب معلومات الوسائط
المعروفة بالفعل لقائمة المعرّفات.
ترتيب قائمة المحتوى التالي عشوائيًا
لتعيين العناصر في قائمة الانتظار ليتم ترتيبها عشوائيًا، قم بتعيين
shuffle
علم
QueueData
على true
عند تحميل العناصر في قائمة الانتظار.
إذا كنت تستخدم عملية تنفيذ
QueueBase
، استخدام
الـ
shuffle
لإرجاع قائمة عناصر عشوائية.
لترتيب قائمة انتظار حالية عشوائيًا، استخدم
shuffle
عَلم QUEUE_UPDATE
MessageType
,
بدلاً من الأمر QUEUE_SHUFFLE
. عرض
QueueUpdateRequestData
لمزيد من المعلومات.
وضع التكرار
لتعيين العناصر في قائمة الانتظار بحيث يتم تكرارها، عيِّن
repeatMode
خاصية
QueueData
إلى المستوى المطلوب
RepeatMode
عند تحميل العناصر إلى قائمة الانتظار
لتغيير RepeatMode
لقائمة حالية، يمكنك استخدام
repeatMode
خاصية
QueueUpdateRequestData
,
الذي يستخدم QUEUE_UPDATE
MessageType