يمكنك استخدام واجهات برمجة التطبيقات للتحكم في الوقت في خدمة إدخال التلفزيون للسماح للمستخدمين بالإيقاف المؤقت والترجيع تقديم برامج مباشرة وسريعة في قنوات الخدمة. إذا كان تطبيقك يتيح التسجيل على مراحل، حيث يحظى المستخدمون بالمرونة في طريقة مشاهدة المحتوى التابع لك:
- يمكن للمستخدمين إيقاف البرامج مؤقتًا أثناء التعامل مع انقطاع قصير الأجل، لا يفوتهم أبدًا اللحظات الرئيسية.
- يمكن للمستخدمين التقديم السريع عبر المحتوى الذي شاهدوه من قبل أو المحتوى الذي لا تهمهم.
- يمكن للمستخدمين ترجيع الفيديو وإعادة مشاهدة اللقطات المفضّلة في محتوى البرنامج.
![](https://developer.android.com/static/images/training/tv/tif/time-shift.png?authuser=19&hl=ar)
الشكل 1. عناصر التحكّم في التشغيل على Android TV المستخدَمة لميزة "التحكّم بالبثّ".
تستخدم ميزة "التحكّم بالبثّ" شرائح قصيرة ومؤقتة ومسجَّلة من بيانات البرنامج للأغراض التالية: تنفيذ إمكانية تشغيل برامج مباشرة. لا يمكن للمستخدمين تشغيل عملية التسجيل على وسيط التسجيلات خارج جلسة التشغيل الحالية. هذا يعني أنه لا يمكنه استخدام عملية التسجيل على وسيط لإيقاف برنامج بشكل مؤقت لمشاهدته في اليوم التالي أو إيقاف أحد البرامج مؤقتًا المشاهدة لاحقًا أثناء انتقاله إلى قناة مختلفة.
استخدام واجهات برمجة تطبيقات تسجيل التلفزيون إذا أردت للسماح للمستخدمين بتسجيل محتوى البرنامج لمشاهدته خارج إطار التشغيل الحالي جلسة المراجعة.
إضافة دعم عملية التسجيل على وسيط
لإضافة دعم عملية التسجيل على وسيط تخزين في خدمة إدخال التلفزيون، يجب تنفيذ
في فئة TvInputService.Session
،
معالجة تسجيل وتشغيل تسجيلات التسجيل في ميزة "التحكّم بالبثّ" في التطبيق وإرسال إشعار
النظام الذي توفر خدمة الإدخال فيه دعم عملية التسجيل.
الطرق الـ TvInputService.Session
التي تستخدمها هي
ما يلي:
onTimeShiftGetCurrentPosition()
: من خلال النظام للحصول على موضع التشغيل بالمللي ثانية لمزيد من التفاصيل، يُرجى مراجعة تتبُّع أوقات التشغيلonTimeShiftGetStartPosition()
: بواسطة النظام لبدء موضع تسجيل الانتقال الزمني الحالي بالمللي ثانية. لمزيد من التفاصيل، راجِع قسم تتبُّع أوقات التشغيل.onTimeShiftPause()
: يتم استدعاؤه عندما يوقف المستخدم التشغيل مؤقتًا.onTimeShiftResume()
: يتم استدعاؤه عندما يستأنف المستخدم التشغيل.onTimeShiftSeekTo(long)
: يتم استدعاؤه عندما يحتاج النظام إلى إجراء الموضع الزمني الجديد. وعادةً ما يكون الموضع الجديد بين وموضع البداية والمكان الحالي.onTimeShiftSetPlaybackParams(PlaybackParams)
: من خلال النظام لتوفير مَعلمات التشغيل، مثل سرعة التشغيل، للجلسة الحالية لمزيد من التفاصيل، يُرجى مراجعة قسم دعم معلمات التشغيل.
لمزيد من المعلومات حول كيفية إبلاغ النظام بأنّ خدمة الإدخال تتوافق عملية التسجيل على وسيط إبلاغ النظام بحالة عملية "التحكّم بالبثّ" .
إذا كنت تستخدم مكتبة TIF المصاحبة لتنفيذ
صف واحد (TvInputService.Session
)، ستحصل تلقائيًا على
تنفيذ عملية التسجيل على وسيط
التي تستخدم ExoPlayer. يمكنك استخدام هذه الصفحة
أو إلغاء طرق واجهة برمجة التطبيقات الخاصة بـ Time-shifting في
BaseTvInputService.Session
وتقديم معلوماتك الخاصة
التنفيذ. للحصول على مزيد من المعلومات حول استخدام مكتبة TIF المصاحبة، يمكنك الاطّلاع على مقالة إنشاء خدمة إدخال تلفزيون باستخدام
مكتبة TIF المصاحبة.
تسجيل المحتوى عند بدء جلسة
يمكن للمستخدم إيقاف محتوى البرنامج مؤقتًا وترجيعه وتقديمه بسرعة من خلال الوصول إلى عناصر التحكم في التشغيل للقناة، إما من خلال الضغط على تحديد أثناء مشاهدة المحتوى ثم الانتقال إلى عناصر التحكم في التشغيل أو باستخدام عناصر تحكم مخصصة في التشغيل على جهاز بعيد.
نظرًا لأن المستخدم يمكنه
استخدام ميزة "التحكّم بالبثّ" في أي وقت أثناء مشاهدة محتوى أحد البرامج، أو
أن تبدأ خدمة الإدخال في تسجيل المحتوى الذي يتم تبديل الوقت إليه بمجرد أن ينتقل المستخدم
الأغاني على قناة في
onTune()
التنفيذ. يجب عليك أيضًا
لإعلام النظام بأنّك قادر على التسجيل عبر استدعاء
notifyTimeShiftStatusChanged(int)
,
كما هو موضح في
إبلاغ النظام بحالة عملية التسجيل على وسيط
.
إدارة مساحة تخزين المحتوى المسجّل
تكون خدمة إدخال التلفزيون مسؤولة عن تخزين تسجيلات التسجيل الزمني في
مساحة التخزين الخاصة لتطبيقك وتشغيل المحتوى عند اتّصال النظام
طرق التسجيل في الوقت لديك، مثل
onTimeShiftResume()
إذا كان المحتوى الخاص بك مخزَّنًا في السحابة الإلكترونية وكان بإمكان تطبيقك إدارة
مخزنة مؤقتًا في السحابة، يمكنك استخدام التخزين في السحابة الإلكترونية بدلاً من
من مساحة تخزين التطبيقات
إذا كان المحتوى الخاص بك يستخدم محتوًى محميًا، تكون خدمة إدخال التلفزيون مسؤولة عن التشفير السليم للمحتوى المسجل وفك تشفير المحتوى أثناء التشغيل.
بما أنّ محتوى الفيديو المسجّل قد يتطلب مساحة تخزين كبيرة، عليك إجراء ما يلي: إدارة المحتوى المسجّل بعناية أثناء تشغيل الجلسة إذا كان تشغيل يتجاوز وقت الجلسة مقدار الوقت الذي يمكنك تسجيله وتخزينه عملية التسجيل على وسيط تخزين المورد الاحتياطي الحالي ولكن تضمن تسجيل الوقت الحالي. على سبيل المثال، إذا كان المستخدم مدّة تشغيل المحتوى لمدّة 31 دقيقة، والحدّ الأقصى للتسجيل الحجم 30 دقيقة، اضبط التسجيل ووقت البدء لتضمينه من الدقيقة 1 إلى الدقيقة 31.
إذا لم تتمكن خدمة إدخال التلفزيون من دعم عملية التسجيل بالبثّ بسبب عدم التخزين، فيجب إبلاغ النظام. لمزيد من التفاصيل حول كيفية إعلام حول قيود دعم عملية التسجيل على وسيط، راجع إبلاغ النظام بحالة عملية "التحكّم بالبثّ" .
عندما ينتقل المستخدم إلى قناة مختلفة أو ينهي التشغيل بطريقة أخرى حذف بيانات التبديل الزمني المسجلة.
إبلاغ النظام بحالة التبديل الزمني
إذا كانت خدمة إدخال التلفزيون تتوافق مع ميزة "التحكّم بالبثّ"، اتصل
notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_AVAILABLE)
في
تنفيذ
onTune()
عندما ينسّق المستخدم أغانيه
إلى قناة
لإبلاغ النظام بأي إمكانيات متعلقة بالتحكّم بالبثّ ضِمن خدمة الإدخال
تغيير، استخدام
notifyTimeShiftStatusChanged(int)
على سبيل المثال، إذا لم تتمكن خدمة إدخال التلفزيون من توفير خاصية التسجيل على الوقت
نظرًا للقيود المفروضة على مساحة التخزين أو لأسباب أخرى، اتصل
notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNAVAILABLE)
إذا لم تتمكن خدمة إدخال التلفزيون من توفير ميزة "التحكّم بالبثّ" على الإطلاق، يُرجى الاتصال
notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNSUPPORTED)
عند إنشاء جلسة تشغيل. يتعامل النظام مع أي خدمة إدخال
عدم الاتصال مطلقًا
notifyTimeShiftStatusChanged()
كخدمة إدخال لا يمكنها
عملية التسجيل على وسيط. ويشمل ذلك خدمات الإدخال باستخدام المستوى 22 من واجهة برمجة التطبيقات
سابقًا.
تتبُّع أوقات التشغيل
موضع بدء تسجيل التسجيل المؤقت هو أقرب وقت مطلق
الموضع بالمللي ثانية منذ تاريخ بدء حساب الفترة، والتي يمكن أن يسعى المستخدم إليها. هذا هو
عادةً، يكون الوقت الذي يبدأ فيه تشغيل الفيديو بعد
تم الاتصال بـ onTune()
.
ولكن عندما يشاهد المستخدم قدرًا من المحتوى يزيد عن
يمكن للتطبيق تسجيلها، يجب البدء في تسجيل مقطع جديد
التسجيل على الوقت وتحديث وقت البدء وفقًا لذلك.
الموضع الحالي للتسجيل المؤقت بالمللي ثانية منذ تاريخ بدء حساب الفترة. يتغير هذا الموضع باستمرار أثناء التشغيل. يمكنك عادةً استخدام محرّك التشغيل لتحديد هذا كما هو موضح في المثال التالي:
Kotlin
override fun onTimeShiftGetCurrentPosition(): Long = tvPlayer?.run { currentProgram?.let { program -> currentPosition + program.startTimeUtcMillis } } ?: TvInputManager.TIME_SHIFT_INVALID_TIME
Java
@Override public long onTimeShiftGetCurrentPosition() { if (getTvPlayer() != null && currentProgram != null) { return getTvPlayer().getCurrentPosition() + currentProgram.getStartTimeUtcMillis(); } return TvInputManager.TIME_SHIFT_INVALID_TIME; }
تأكد من أن وقت البدء الذي تقدمه عندما يتصل النظام
onTimeShiftGetStartPosition()
لا يزيد أبدًا عن الموضع الزمني الحالي الذي تقدمه
onTimeShiftGetCurrentPosition()
ويستخدم النظام هذه الاتصالات
لتعديل مدة التسجيل في واجهة مستخدم عناصر التحكم في التشغيل.
دعم معلمات التشغيل
لتغيير سرعة التشغيل أثناء التبديل الزمني، يستخدم النظام مَعلمات التشغيل. بالنسبة على سبيل المثال، إذا قرر المستخدم ترجيع التشغيل الحالي، سيتم تشغيل يتمّ تمرير المَعلمات إلى تطبيقك بسرعة تشغيل سلبية. تعمل ميزة "التحكّم بالبثّ" أيضًا على توفير عدة مستويات مختلفة لسرعة التشغيل بمقدار مرّتين أو ثلاث مرات. للترجيع أو التقديم السريع.
يستدعي النظام
onTimeShiftSetPlaybackParams(PlaybackParams)
مع كائن PlaybackParams
يحتوي على
المحددة للجلسة الحالية. استخدام هذه المعلومات في
تهيئة محرك تشغيل الوسائط بشكل مناسب.
إذا لم يكن محرك التشغيل يتيح استخدام معلَمة، لمحاكاة السلوك المتوقع بأفضل طريقة ممكنة. على سبيل المثال، إذا كانت وحدة التشغيل لا تدعم المحرك السرعة 2x، لذا استخدِم عمليات التقديم/الترجيع بشكل متكرّر أثناء التشغيل. إلى تحقيق سرعة تشغيل مضاعفة تقريبًا.
بعد ضبط المَعلمات، لا تغيّر الإعدادات ما لم يكن المستخدِم يصدر أمر تشغيل يتطلب معلمة أو مفاتيح تحويل مختلفة إلى قناة جديدة