از APIهای تغییر زمان در سرویس ورودی تلویزیون خود استفاده کنید تا به کاربران اجازه دهید برنامههای زنده را در کانالهای سرویس شما متوقف، به عقب و جلو ببرند. اگر برنامه شما از تغییر زمان پشتیبانی میکند، کاربران در نحوه تماشای محتوای شما انعطافپذیری بیشتری پیدا میکنند:
- کاربران میتوانند برنامهها را در حین مدیریت وقفههای کوتاهمدت متوقف کنند، بنابراین هرگز لحظات کلیدی را از دست نمیدهند.
- کاربران میتوانند محتوایی را که قبلاً دیدهاند یا محتوایی که برایشان جالب نیست، به سرعت به جلو ببرند.
- کاربران میتوانند لحظات مورد علاقه خود را در محتوای برنامه به عقب برگردانند و دوباره تماشا کنند.

تغییر زمان از بخشهای کوتاه، موقت و ضبطشده از دادههای برنامه برای پیادهسازی قابلیت پخش برنامههای زنده استفاده میکند. کاربران نمیتوانند این ضبطهای تغییر زمان را خارج از جلسه پخش فعلی پخش کنند. این بدان معناست که آنها نمیتوانند از تغییر زمان برای مکث یک برنامه برای تماشای روز بعد یا مکث یک برنامه برای تماشای بعدی در حالی که به کانال دیگری تغییر میکنند، استفاده کنند.
اگر میخواهید به کاربرانتان اجازه دهید محتوای برنامه را برای تماشا در خارج از جلسه پخش فعلی ضبط کنند، از APIهای ضبط تلویزیون استفاده کنید.
اضافه شدن پشتیبانی از تغییر زمان
برای افزودن پشتیبانی از تغییر زمان به سرویس ورودی تلویزیون خود، باید APIهای تغییر زمان را در کلاس TvInputService.Session خود پیادهسازی کنید، ضبط و پخش ضبطهای تغییر زمان را در برنامه خود مدیریت کنید و به سیستم اطلاع دهید که سرویس ورودی شما پشتیبانی از تغییر زمان را ارائه میدهد.
متدهای TvInputService.Session که شما پیادهسازی میکنید به شرح زیر هستند:
-
onTimeShiftGetCurrentPosition(): توسط سیستم فراخوانی میشود تا موقعیت پخش فعلی را بر حسب میلیثانیه دریافت کند. برای جزئیات بیشتر، به بخش زمان پخش آهنگ مراجعه کنید. -
onTimeShiftGetStartPosition(): توسط سیستم فراخوانی میشود تا موقعیت شروع ضبط شیفت زمانی فعلی را بر حسب میلیثانیه دریافت کند. برای جزئیات بیشتر، به بخش زمانهای پخش آهنگ مراجعه کنید. -
onTimeShiftPause(): زمانی فراخوانی میشود که کاربر پخش را متوقف کند. -
onTimeShiftResume(): زمانی که کاربر پخش را از سر میگیرد، فراخوانی میشود. -
onTimeShiftSeekTo(long): زمانی فراخوانی میشود که سیستم نیاز به جستجوی یک موقعیت زمانی جدید داشته باشد. معمولاً موقعیت جدید بین موقعیت شروع و موقعیت فعلی است. -
onTimeShiftSetPlaybackParams(PlaybackParams): توسط سیستم فراخوانی میشود تا پارامترهای پخش، مانند سرعت پخش، را برای جلسه فعلی ارائه دهد. برای جزئیات بیشتر، به بخش پارامترهای پخش پشتیبانی مراجعه کنید.
برای اطلاعات بیشتر در مورد نحوه اطلاع رسانی به سیستم مبنی بر اینکه سرویس ورودی شما از تغییر زمان پشتیبانی میکند، به بخش «اطلاع رسانی به سیستم در مورد وضعیت تغییر زمان» مراجعه کنید.
اگر از کتابخانه همراه TIF برای پیادهسازی کلاس TvInputService.Session خود استفاده میکنید، بهطور خودکار یک پیادهسازی از تغییر زمان دریافت میکنید که از ExoPlayer استفاده میکند. میتوانید از این پیادهسازی استفاده کنید یا متدهای API تغییر زمان را در BaseTvInputService.Session لغو کنید و پیادهسازی خودتان را ارائه دهید. برای اطلاعات بیشتر در مورد استفاده از کتابخانه همراه TIF، به ایجاد یک سرویس ورودی تلویزیون با استفاده از کتابخانه همراه TIF مراجعه کنید.
ضبط محتوا هنگام شروع جلسه
کاربر میتواند با دسترسی به کنترلهای پخش کانال، محتوای برنامه را متوقف، به عقب و جلو ببرد، یا با فشار دادن دکمه انتخاب (Select) هنگام تماشای محتوا و سپس پیمایش به کنترلهای پخش یا با استفاده از کنترلهای پخش اختصاصی روی یک دستگاه از راه دور.
از آنجا که کاربر میتواند در هر زمانی هنگام تماشای محتوای برنامه از قابلیت تغییر زمان استفاده کند، سرویس ورودی تلویزیون شما باید به محض اینکه کاربر در پیادهسازی onTune() روی یک کانال تنظیم میشود، ضبط محتوای تغییر زمان را آغاز کند. همچنین باید با فراخوانی notifyTimeShiftStatusChanged(int) به سیستم اطلاع دهید که قادر به ضبط هستید، همانطور که در بخش «به سیستم در مورد وضعیت تغییر زمان اطلاع دهید» توضیح داده شده است.
مدیریت فضای ذخیرهسازی محتوای ضبطشده
سرویس ورودی تلویزیون شما مسئول ذخیره ضبطهای تغییر زمان در فضای ذخیرهسازی خصوصی برنامه شما و پخش محتوا هنگام فراخوانی متدهای تغییر زمان شما، مانند onTimeShiftResume() توسط سیستم است. اگر محتوای شما از قبل در فضای ابری ذخیره شده است و برنامه شما میتواند ضبطهای تغییر زمان را در فضای ابری مدیریت کند، میتوانید به جای فضای ذخیرهسازی برنامه از فضای ذخیرهسازی ابری استفاده کنید.
اگر محتوای شما از محتوای محافظتشده استفاده میکند، سرویس ورودی تلویزیون شما مسئول رمزگذاری صحیح محتوای ضبطشده و رمزگشایی محتوا در حین پخش است.
از آنجایی که محتوای ویدیوی ضبط شده میتواند به حجم زیادی از فضای ذخیرهسازی نیاز داشته باشد، باید محتوای ضبط شده را در طول پخش جلسه به دقت مدیریت کنید. اگر زمان جلسه پخش از مدت زمانی که میتوانید برای تغییر زمان ضبط و ذخیره کنید، بیشتر شد، ضبط تغییر زمان خود را طوری تنظیم کنید که بافر فعلی حفظ شود اما مطمئن شوید که زمان فعلی ضبط شده است. به عنوان مثال، اگر کاربر به مدت ۳۱ دقیقه محتوا پخش کرده است و حداکثر اندازه ضبط تغییر زمان شما ۳۰ دقیقه است، زمان ضبط و شروع خود را طوری تنظیم کنید که شامل محتوا از دقیقه ۱ تا دقیقه ۳۱ باشد.
اگر سرویس ورودی تلویزیون شما به دلیل کمبود فضای ذخیرهسازی نمیتواند از تغییر زمان پشتیبانی کند، باید به سیستم اطلاع دهید. برای جزئیات بیشتر در مورد نحوه اطلاعرسانی به سیستم در مورد محدودیتهای پشتیبانی از تغییر زمان، به بخش «به سیستم در مورد وضعیت تغییر زمان اطلاع دهید» مراجعه کنید.
وقتی کاربر به کانال دیگری تغییر مسیر میدهد یا به هر نحوی پخش خود را پایان میدهد، دادههای ضبطشدهی مربوط به تغییر زمان را حذف کنید.
سیستم را از وضعیت تغییر زمان مطلع کنید
اگر سرویس ورودی تلویزیون شما از تغییر زمان پشتیبانی میکند، وقتی کاربر روی یک کانال تنظیم میکند، در پیادهسازی onTune() خود notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_AVAILABLE) را فراخوانی کنید.
برای اطلاعرسانی به سیستم در صورت تغییر قابلیتهای تغییر زمان سرویس ورودی خود، notifyTimeShiftStatusChanged(int) استفاده کنید. برای مثال، اگر سرویس ورودی تلویزیون شما به دلیل محدودیت فضای ذخیرهسازی یا دلایل دیگر نمیتواند از تغییر زمان پشتیبانی کند، notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNAVAILABLE) را فراخوانی کنید.
اگر سرویس ورودی تلویزیون شما به هیچ وجه نمیتواند از تغییر زمان پشتیبانی کند، هنگام ایجاد یک جلسه پخش، notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNSUPPORTED) را فراخوانی کنید. سیستم با هر سرویس ورودی که هرگز notifyTimeShiftStatusChanged() را فراخوانی نکند، به عنوان یک سرویس ورودی که نمیتواند از تغییر زمان پشتیبانی کند، رفتار میکند. این شامل سرویسهای ورودی با استفاده از API سطح ۲۲ و قبل از آن میشود.
زمان پخش آهنگ
موقعیت شروع ضبط با تغییر زمان، اولین موقعیت زمانی مطلق، بر حسب میلیثانیه از زمان شروع، است که کاربر میتواند آن را جستجو کند. این معمولاً زمانی است که پخش ویدیو پس از onTune() شروع میشود. با این حال، هنگامی که کاربر مقدار محتوایی را تماشا میکند که از آنچه برنامه شما میتواند ضبط کند، بیشتر است، باید ضبط یک بخش جدید برای تغییر زمان را شروع کنید و زمان شروع خود را بر این اساس بهروزرسانی کنید.
موقعیت فعلی یک ضبط با قابلیت تغییر زمان، موقعیت پخش فعلی، بر حسب میلیثانیه از زمان شروع ضبط است. این موقعیت در طول پخش به طور مداوم تغییر میکند. معمولاً میتوانید از موتور پخش خود برای تعیین این مقدار استفاده کنید، همانطور که در مثال زیر نشان داده شده است:
کاتلین
override fun onTimeShiftGetCurrentPosition(): Long = tvPlayer?.run { currentProgram?.let { program -> currentPosition + program.startTimeUtcMillis } } ?: TvInputManager.TIME_SHIFT_INVALID_TIME
جاوا
@Override public long onTimeShiftGetCurrentPosition() { if (getTvPlayer() != null && currentProgram != null) { return getTvPlayer().getCurrentPosition() + currentProgram.getStartTimeUtcMillis(); } return TvInputManager.TIME_SHIFT_INVALID_TIME; }
مطمئن شوید که زمان شروعی که هنگام فراخوانی onTimeShiftGetStartPosition() توسط سیستم ارائه میدهید، هرگز بیشتر از موقعیت زمانی فعلی که در onTimeShiftGetCurrentPosition() ارائه میدهید، نباشد. سیستم از این فراخوانیها برای بهروزرسانی مدت زمان تغییر زمان در رابط کاربری کنترلهای پخش استفاده میکند.
پارامترهای پخش پشتیبانی
برای تغییر سرعت پخش در طول time-shifting، سیستم از پارامترهای پخش استفاده میکند. به عنوان مثال، اگر کاربر تصمیم به عقب بردن پخش فعلی بگیرد، پارامترهای پخش جدید با سرعت پخش منفی به برنامه شما ارسال میشوند. time-shifting همچنین از چندین سطح مختلف، ۲x یا ۳x، سرعت پخش برای عقب بردن یا جلو بردن پشتیبانی میکند.
سیستم، متد onTimeShiftSetPlaybackParams(PlaybackParams) شما را با یک شیء PlaybackParams که حاوی پارامترهایی برای جلسه فعلی است، فراخوانی میکند. از این اطلاعات برای پیکربندی مناسب موتور پخش رسانه خود استفاده کنید.
اگر موتور پخش شما از پارامتری پشتیبانی نمیکند، رفتار مورد انتظار را تا حد امکان شبیهسازی کنید. برای مثال، اگر موتور پخش شما از سرعت ۲ برابر پشتیبانی نمیکند، از عملیات جستجوی مکرر در موتور پخش خود استفاده کنید تا به سرعت پخش تقریباً دو برابر برسید.
پس از تنظیم پارامترها، تنظیمات را تغییر ندهید، مگر اینکه کاربر دستور پخشی صادر کند که به پارامتر متفاوتی نیاز داشته باشد یا به کانال جدیدی سوئیچ کند.
،از APIهای تغییر زمان در سرویس ورودی تلویزیون خود استفاده کنید تا به کاربران اجازه دهید برنامههای زنده را در کانالهای سرویس شما متوقف، به عقب و جلو ببرند. اگر برنامه شما از تغییر زمان پشتیبانی میکند، کاربران در نحوه تماشای محتوای شما انعطافپذیری بیشتری پیدا میکنند:
- کاربران میتوانند برنامهها را در حین مدیریت وقفههای کوتاهمدت متوقف کنند، بنابراین هرگز لحظات کلیدی را از دست نمیدهند.
- کاربران میتوانند محتوایی را که قبلاً دیدهاند یا محتوایی که برایشان جالب نیست، به سرعت به جلو ببرند.
- کاربران میتوانند لحظات مورد علاقه خود را در محتوای برنامه به عقب برگردانند و دوباره تماشا کنند.

تغییر زمان از بخشهای کوتاه، موقت و ضبطشده از دادههای برنامه برای پیادهسازی قابلیت پخش برنامههای زنده استفاده میکند. کاربران نمیتوانند این ضبطهای تغییر زمان را خارج از جلسه پخش فعلی پخش کنند. این بدان معناست که آنها نمیتوانند از تغییر زمان برای مکث یک برنامه برای تماشای روز بعد یا مکث یک برنامه برای تماشای بعدی در حالی که به کانال دیگری تغییر میکنند، استفاده کنند.
اگر میخواهید به کاربرانتان اجازه دهید محتوای برنامه را برای تماشا در خارج از جلسه پخش فعلی ضبط کنند، از APIهای ضبط تلویزیون استفاده کنید.
اضافه شدن پشتیبانی از تغییر زمان
برای افزودن پشتیبانی از تغییر زمان به سرویس ورودی تلویزیون خود، باید APIهای تغییر زمان را در کلاس TvInputService.Session خود پیادهسازی کنید، ضبط و پخش ضبطهای تغییر زمان را در برنامه خود مدیریت کنید و به سیستم اطلاع دهید که سرویس ورودی شما پشتیبانی از تغییر زمان را ارائه میدهد.
متدهای TvInputService.Session که شما پیادهسازی میکنید به شرح زیر هستند:
-
onTimeShiftGetCurrentPosition(): توسط سیستم فراخوانی میشود تا موقعیت پخش فعلی را بر حسب میلیثانیه دریافت کند. برای جزئیات بیشتر، به بخش زمان پخش آهنگ مراجعه کنید. -
onTimeShiftGetStartPosition(): توسط سیستم فراخوانی میشود تا موقعیت شروع ضبط شیفت زمانی فعلی را بر حسب میلیثانیه دریافت کند. برای جزئیات بیشتر، به بخش زمانهای پخش آهنگ مراجعه کنید. -
onTimeShiftPause(): زمانی فراخوانی میشود که کاربر پخش را متوقف کند. -
onTimeShiftResume(): زمانی که کاربر پخش را از سر میگیرد، فراخوانی میشود. -
onTimeShiftSeekTo(long): زمانی فراخوانی میشود که سیستم نیاز به جستجوی یک موقعیت زمانی جدید داشته باشد. معمولاً موقعیت جدید بین موقعیت شروع و موقعیت فعلی است. -
onTimeShiftSetPlaybackParams(PlaybackParams): توسط سیستم فراخوانی میشود تا پارامترهای پخش، مانند سرعت پخش، را برای جلسه فعلی ارائه دهد. برای جزئیات بیشتر، به بخش پارامترهای پخش پشتیبانی مراجعه کنید.
برای اطلاعات بیشتر در مورد نحوه اطلاع رسانی به سیستم مبنی بر اینکه سرویس ورودی شما از تغییر زمان پشتیبانی میکند، به بخش «اطلاع رسانی به سیستم در مورد وضعیت تغییر زمان» مراجعه کنید.
اگر از کتابخانه همراه TIF برای پیادهسازی کلاس TvInputService.Session خود استفاده میکنید، بهطور خودکار یک پیادهسازی از تغییر زمان دریافت میکنید که از ExoPlayer استفاده میکند. میتوانید از این پیادهسازی استفاده کنید یا متدهای API تغییر زمان را در BaseTvInputService.Session لغو کنید و پیادهسازی خودتان را ارائه دهید. برای اطلاعات بیشتر در مورد استفاده از کتابخانه همراه TIF، به ایجاد یک سرویس ورودی تلویزیون با استفاده از کتابخانه همراه TIF مراجعه کنید.
ضبط محتوا هنگام شروع جلسه
کاربر میتواند با دسترسی به کنترلهای پخش کانال، محتوای برنامه را متوقف، به عقب و جلو ببرد، یا با فشار دادن دکمه انتخاب (Select) هنگام تماشای محتوا و سپس پیمایش به کنترلهای پخش یا با استفاده از کنترلهای پخش اختصاصی روی یک دستگاه از راه دور.
از آنجا که کاربر میتواند در هر زمانی هنگام تماشای محتوای برنامه از قابلیت تغییر زمان استفاده کند، سرویس ورودی تلویزیون شما باید به محض اینکه کاربر در پیادهسازی onTune() روی یک کانال تنظیم میشود، ضبط محتوای تغییر زمان را آغاز کند. همچنین باید با فراخوانی notifyTimeShiftStatusChanged(int) به سیستم اطلاع دهید که قادر به ضبط هستید، همانطور که در بخش «به سیستم در مورد وضعیت تغییر زمان اطلاع دهید» توضیح داده شده است.
مدیریت فضای ذخیرهسازی محتوای ضبطشده
سرویس ورودی تلویزیون شما مسئول ذخیره ضبطهای تغییر زمان در فضای ذخیرهسازی خصوصی برنامه شما و پخش محتوا هنگام فراخوانی متدهای تغییر زمان شما، مانند onTimeShiftResume() توسط سیستم است. اگر محتوای شما از قبل در فضای ابری ذخیره شده است و برنامه شما میتواند ضبطهای تغییر زمان را در فضای ابری مدیریت کند، میتوانید به جای فضای ذخیرهسازی برنامه از فضای ذخیرهسازی ابری استفاده کنید.
اگر محتوای شما از محتوای محافظتشده استفاده میکند، سرویس ورودی تلویزیون شما مسئول رمزگذاری صحیح محتوای ضبطشده و رمزگشایی محتوا در حین پخش است.
از آنجایی که محتوای ویدیوی ضبط شده میتواند به حجم زیادی از فضای ذخیرهسازی نیاز داشته باشد، باید محتوای ضبط شده را در طول پخش جلسه به دقت مدیریت کنید. اگر زمان جلسه پخش از مدت زمانی که میتوانید برای تغییر زمان ضبط و ذخیره کنید، بیشتر شد، ضبط تغییر زمان خود را طوری تنظیم کنید که بافر فعلی حفظ شود اما مطمئن شوید که زمان فعلی ضبط شده است. به عنوان مثال، اگر کاربر به مدت ۳۱ دقیقه محتوا پخش کرده است و حداکثر اندازه ضبط تغییر زمان شما ۳۰ دقیقه است، زمان ضبط و شروع خود را طوری تنظیم کنید که شامل محتوا از دقیقه ۱ تا دقیقه ۳۱ باشد.
اگر سرویس ورودی تلویزیون شما به دلیل کمبود فضای ذخیرهسازی نمیتواند از تغییر زمان پشتیبانی کند، باید به سیستم اطلاع دهید. برای جزئیات بیشتر در مورد نحوه اطلاعرسانی به سیستم در مورد محدودیتهای پشتیبانی از تغییر زمان، به بخش «به سیستم در مورد وضعیت تغییر زمان اطلاع دهید» مراجعه کنید.
وقتی کاربر به کانال دیگری تغییر مسیر میدهد یا به هر نحوی پخش خود را پایان میدهد، دادههای ضبطشدهی مربوط به تغییر زمان را حذف کنید.
سیستم را از وضعیت تغییر زمان مطلع کنید
اگر سرویس ورودی تلویزیون شما از تغییر زمان پشتیبانی میکند، وقتی کاربر روی یک کانال تنظیم میکند، در پیادهسازی onTune() خود notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_AVAILABLE) را فراخوانی کنید.
برای اطلاعرسانی به سیستم در صورت تغییر قابلیتهای تغییر زمان سرویس ورودی خود، notifyTimeShiftStatusChanged(int) استفاده کنید. برای مثال، اگر سرویس ورودی تلویزیون شما به دلیل محدودیت فضای ذخیرهسازی یا دلایل دیگر نمیتواند از تغییر زمان پشتیبانی کند، notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNAVAILABLE) را فراخوانی کنید.
اگر سرویس ورودی تلویزیون شما به هیچ وجه نمیتواند از تغییر زمان پشتیبانی کند، هنگام ایجاد یک جلسه پخش، notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNSUPPORTED) را فراخوانی کنید. سیستم با هر سرویس ورودی که هرگز notifyTimeShiftStatusChanged() را فراخوانی نکند، به عنوان یک سرویس ورودی که نمیتواند از تغییر زمان پشتیبانی کند، رفتار میکند. این شامل سرویسهای ورودی با استفاده از API سطح ۲۲ و قبل از آن میشود.
زمان پخش آهنگ
موقعیت شروع ضبط با تغییر زمان، اولین موقعیت زمانی مطلق، بر حسب میلیثانیه از زمان شروع، است که کاربر میتواند آن را جستجو کند. این معمولاً زمانی است که پخش ویدیو پس از onTune() شروع میشود. با این حال، هنگامی که کاربر مقدار محتوایی را تماشا میکند که از آنچه برنامه شما میتواند ضبط کند، بیشتر است، باید ضبط یک بخش جدید برای تغییر زمان را شروع کنید و زمان شروع خود را بر این اساس بهروزرسانی کنید.
موقعیت فعلی یک ضبط با قابلیت تغییر زمان، موقعیت پخش فعلی، بر حسب میلیثانیه از زمان شروع ضبط است. این موقعیت در طول پخش به طور مداوم تغییر میکند. معمولاً میتوانید از موتور پخش خود برای تعیین این مقدار استفاده کنید، همانطور که در مثال زیر نشان داده شده است:
کاتلین
override fun onTimeShiftGetCurrentPosition(): Long = tvPlayer?.run { currentProgram?.let { program -> currentPosition + program.startTimeUtcMillis } } ?: TvInputManager.TIME_SHIFT_INVALID_TIME
جاوا
@Override public long onTimeShiftGetCurrentPosition() { if (getTvPlayer() != null && currentProgram != null) { return getTvPlayer().getCurrentPosition() + currentProgram.getStartTimeUtcMillis(); } return TvInputManager.TIME_SHIFT_INVALID_TIME; }
مطمئن شوید که زمان شروعی که هنگام فراخوانی onTimeShiftGetStartPosition() توسط سیستم ارائه میدهید، هرگز بیشتر از موقعیت زمانی فعلی که در onTimeShiftGetCurrentPosition() ارائه میدهید، نباشد. سیستم از این فراخوانیها برای بهروزرسانی مدت زمان تغییر زمان در رابط کاربری کنترلهای پخش استفاده میکند.
پارامترهای پخش پشتیبانی
برای تغییر سرعت پخش در طول time-shifting، سیستم از پارامترهای پخش استفاده میکند. به عنوان مثال، اگر کاربر تصمیم به عقب بردن پخش فعلی بگیرد، پارامترهای پخش جدید با سرعت پخش منفی به برنامه شما ارسال میشوند. time-shifting همچنین از چندین سطح مختلف، ۲x یا ۳x، سرعت پخش برای عقب بردن یا جلو بردن پشتیبانی میکند.
سیستم، متد onTimeShiftSetPlaybackParams(PlaybackParams) شما را با یک شیء PlaybackParams که حاوی پارامترهایی برای جلسه فعلی است، فراخوانی میکند. از این اطلاعات برای پیکربندی مناسب موتور پخش رسانه خود استفاده کنید.
اگر موتور پخش شما از پارامتری پشتیبانی نمیکند، رفتار مورد انتظار را تا حد امکان شبیهسازی کنید. برای مثال، اگر موتور پخش شما از سرعت ۲ برابر پشتیبانی نمیکند، از عملیات جستجوی مکرر در موتور پخش خود استفاده کنید تا به سرعت پخش تقریباً دو برابر برسید.
پس از تنظیم پارامترها، تنظیمات را تغییر ندهید، مگر اینکه کاربر دستور پخشی صادر کند که به پارامتر متفاوتی نیاز داشته باشد یا به کانال جدیدی سوئیچ کند.
،از APIهای تغییر زمان در سرویس ورودی تلویزیون خود استفاده کنید تا به کاربران اجازه دهید برنامههای زنده را در کانالهای سرویس شما متوقف، به عقب و جلو ببرند. اگر برنامه شما از تغییر زمان پشتیبانی میکند، کاربران در نحوه تماشای محتوای شما انعطافپذیری بیشتری پیدا میکنند:
- کاربران میتوانند برنامهها را در حین مدیریت وقفههای کوتاهمدت متوقف کنند، بنابراین هرگز لحظات کلیدی را از دست نمیدهند.
- کاربران میتوانند محتوایی را که قبلاً دیدهاند یا محتوایی که برایشان جالب نیست، به سرعت به جلو ببرند.
- کاربران میتوانند لحظات مورد علاقه خود را در محتوای برنامه به عقب برگردانند و دوباره تماشا کنند.

تغییر زمان از بخشهای کوتاه، موقت و ضبطشده از دادههای برنامه برای پیادهسازی قابلیت پخش برنامههای زنده استفاده میکند. کاربران نمیتوانند این ضبطهای تغییر زمان را خارج از جلسه پخش فعلی پخش کنند. این بدان معناست که آنها نمیتوانند از تغییر زمان برای مکث یک برنامه برای تماشای روز بعد یا مکث یک برنامه برای تماشای بعدی در حالی که به کانال دیگری تغییر میکنند، استفاده کنند.
اگر میخواهید به کاربرانتان اجازه دهید محتوای برنامه را برای تماشا در خارج از جلسه پخش فعلی ضبط کنند، از APIهای ضبط تلویزیون استفاده کنید.
اضافه شدن پشتیبانی از تغییر زمان
برای افزودن پشتیبانی از تغییر زمان به سرویس ورودی تلویزیون خود، باید APIهای تغییر زمان را در کلاس TvInputService.Session خود پیادهسازی کنید، ضبط و پخش ضبطهای تغییر زمان را در برنامه خود مدیریت کنید و به سیستم اطلاع دهید که سرویس ورودی شما پشتیبانی از تغییر زمان را ارائه میدهد.
متدهای TvInputService.Session که شما پیادهسازی میکنید به شرح زیر هستند:
-
onTimeShiftGetCurrentPosition(): توسط سیستم فراخوانی میشود تا موقعیت پخش فعلی را بر حسب میلیثانیه دریافت کند. برای جزئیات بیشتر، به بخش زمان پخش آهنگ مراجعه کنید. -
onTimeShiftGetStartPosition(): توسط سیستم فراخوانی میشود تا موقعیت شروع ضبط شیفت زمانی فعلی را بر حسب میلیثانیه دریافت کند. برای جزئیات بیشتر، به بخش زمانهای پخش آهنگ مراجعه کنید. -
onTimeShiftPause(): زمانی فراخوانی میشود که کاربر پخش را متوقف کند. -
onTimeShiftResume(): زمانی که کاربر پخش را از سر میگیرد، فراخوانی میشود. -
onTimeShiftSeekTo(long): زمانی فراخوانی میشود که سیستم نیاز به جستجوی یک موقعیت زمانی جدید داشته باشد. معمولاً موقعیت جدید بین موقعیت شروع و موقعیت فعلی است. -
onTimeShiftSetPlaybackParams(PlaybackParams): توسط سیستم فراخوانی میشود تا پارامترهای پخش، مانند سرعت پخش، را برای جلسه فعلی ارائه دهد. برای جزئیات بیشتر، به بخش پارامترهای پخش پشتیبانی مراجعه کنید.
برای اطلاعات بیشتر در مورد نحوه اطلاع رسانی به سیستم مبنی بر اینکه سرویس ورودی شما از تغییر زمان پشتیبانی میکند، به بخش «اطلاع رسانی به سیستم در مورد وضعیت تغییر زمان» مراجعه کنید.
اگر از کتابخانه همراه TIF برای پیادهسازی کلاس TvInputService.Session خود استفاده میکنید، بهطور خودکار یک پیادهسازی از تغییر زمان دریافت میکنید که از ExoPlayer استفاده میکند. میتوانید از این پیادهسازی استفاده کنید یا متدهای API تغییر زمان را در BaseTvInputService.Session لغو کنید و پیادهسازی خودتان را ارائه دهید. برای اطلاعات بیشتر در مورد استفاده از کتابخانه همراه TIF، به ایجاد یک سرویس ورودی تلویزیون با استفاده از کتابخانه همراه TIF مراجعه کنید.
ضبط محتوا هنگام شروع جلسه
کاربر میتواند با دسترسی به کنترلهای پخش کانال، محتوای برنامه را متوقف، به عقب و جلو ببرد، یا با فشار دادن دکمه انتخاب (Select) هنگام تماشای محتوا و سپس پیمایش به کنترلهای پخش یا با استفاده از کنترلهای پخش اختصاصی روی یک دستگاه از راه دور.
از آنجا که کاربر میتواند در هر زمانی هنگام تماشای محتوای برنامه از قابلیت تغییر زمان استفاده کند، سرویس ورودی تلویزیون شما باید به محض اینکه کاربر در پیادهسازی onTune() روی یک کانال تنظیم میشود، ضبط محتوای تغییر زمان را آغاز کند. همچنین باید با فراخوانی notifyTimeShiftStatusChanged(int) به سیستم اطلاع دهید که قادر به ضبط هستید، همانطور که در بخش «به سیستم در مورد وضعیت تغییر زمان اطلاع دهید» توضیح داده شده است.
مدیریت فضای ذخیرهسازی محتوای ضبطشده
سرویس ورودی تلویزیون شما مسئول ذخیره ضبطهای تغییر زمان در فضای ذخیرهسازی خصوصی برنامه شما و پخش محتوا هنگام فراخوانی متدهای تغییر زمان شما، مانند onTimeShiftResume() توسط سیستم است. اگر محتوای شما از قبل در فضای ابری ذخیره شده است و برنامه شما میتواند ضبطهای تغییر زمان را در فضای ابری مدیریت کند، میتوانید به جای فضای ذخیرهسازی برنامه از فضای ذخیرهسازی ابری استفاده کنید.
اگر محتوای شما از محتوای محافظتشده استفاده میکند، سرویس ورودی تلویزیون شما مسئول رمزگذاری صحیح محتوای ضبطشده و رمزگشایی محتوا در حین پخش است.
از آنجایی که محتوای ویدیوی ضبط شده میتواند به حجم زیادی از فضای ذخیرهسازی نیاز داشته باشد، باید محتوای ضبط شده را در طول پخش جلسه به دقت مدیریت کنید. اگر زمان جلسه پخش از مدت زمانی که میتوانید برای تغییر زمان ضبط و ذخیره کنید، بیشتر شد، ضبط تغییر زمان خود را طوری تنظیم کنید که بافر فعلی حفظ شود اما مطمئن شوید که زمان فعلی ضبط شده است. به عنوان مثال، اگر کاربر به مدت ۳۱ دقیقه محتوا پخش کرده است و حداکثر اندازه ضبط تغییر زمان شما ۳۰ دقیقه است، زمان ضبط و شروع خود را طوری تنظیم کنید که شامل محتوا از دقیقه ۱ تا دقیقه ۳۱ باشد.
اگر سرویس ورودی تلویزیون شما به دلیل کمبود فضای ذخیرهسازی نمیتواند از تغییر زمان پشتیبانی کند، باید به سیستم اطلاع دهید. برای جزئیات بیشتر در مورد نحوه اطلاعرسانی به سیستم در مورد محدودیتهای پشتیبانی از تغییر زمان، به بخش «به سیستم در مورد وضعیت تغییر زمان اطلاع دهید» مراجعه کنید.
وقتی کاربر به کانال دیگری تغییر مسیر میدهد یا به هر نحوی پخش خود را پایان میدهد، دادههای ضبطشدهی مربوط به تغییر زمان را حذف کنید.
سیستم را از وضعیت تغییر زمان مطلع کنید
اگر سرویس ورودی تلویزیون شما از تغییر زمان پشتیبانی میکند، وقتی کاربر روی یک کانال تنظیم میکند، در پیادهسازی onTune() خود notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_AVAILABLE) را فراخوانی کنید.
برای اطلاعرسانی به سیستم در صورت تغییر قابلیتهای تغییر زمان سرویس ورودی خود، notifyTimeShiftStatusChanged(int) استفاده کنید. برای مثال، اگر سرویس ورودی تلویزیون شما به دلیل محدودیت فضای ذخیرهسازی یا دلایل دیگر نمیتواند از تغییر زمان پشتیبانی کند، notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNAVAILABLE) را فراخوانی کنید.
اگر سرویس ورودی تلویزیون شما به هیچ وجه نمیتواند از تغییر زمان پشتیبانی کند، هنگام ایجاد یک جلسه پخش، notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNSUPPORTED) را فراخوانی کنید. سیستم با هر سرویس ورودی که هرگز notifyTimeShiftStatusChanged() را فراخوانی نکند، به عنوان یک سرویس ورودی که نمیتواند از تغییر زمان پشتیبانی کند، رفتار میکند. این شامل سرویسهای ورودی با استفاده از API سطح ۲۲ و قبل از آن میشود.
زمان پخش آهنگ
موقعیت شروع ضبط با تغییر زمان، اولین موقعیت زمانی مطلق، بر حسب میلیثانیه از زمان شروع، است که کاربر میتواند آن را جستجو کند. این معمولاً زمانی است که پخش ویدیو پس از onTune() شروع میشود. با این حال، هنگامی که کاربر مقدار محتوایی را تماشا میکند که از آنچه برنامه شما میتواند ضبط کند، بیشتر است، باید ضبط یک بخش جدید برای تغییر زمان را شروع کنید و زمان شروع خود را بر این اساس بهروزرسانی کنید.
موقعیت فعلی یک ضبط با قابلیت تغییر زمان، موقعیت پخش فعلی، بر حسب میلیثانیه از زمان شروع ضبط است. این موقعیت در طول پخش به طور مداوم تغییر میکند. معمولاً میتوانید از موتور پخش خود برای تعیین این مقدار استفاده کنید، همانطور که در مثال زیر نشان داده شده است:
کاتلین
override fun onTimeShiftGetCurrentPosition(): Long = tvPlayer?.run { currentProgram?.let { program -> currentPosition + program.startTimeUtcMillis } } ?: TvInputManager.TIME_SHIFT_INVALID_TIME
جاوا
@Override public long onTimeShiftGetCurrentPosition() { if (getTvPlayer() != null && currentProgram != null) { return getTvPlayer().getCurrentPosition() + currentProgram.getStartTimeUtcMillis(); } return TvInputManager.TIME_SHIFT_INVALID_TIME; }
مطمئن شوید که زمان شروعی که هنگام فراخوانی onTimeShiftGetStartPosition() توسط سیستم ارائه میدهید، هرگز بیشتر از موقعیت زمانی فعلی که در onTimeShiftGetCurrentPosition() ارائه میدهید، نباشد. سیستم از این فراخوانیها برای بهروزرسانی مدت زمان تغییر زمان در رابط کاربری کنترلهای پخش استفاده میکند.
پارامترهای پخش پشتیبانی
برای تغییر سرعت پخش در طول time-shifting، سیستم از پارامترهای پخش استفاده میکند. به عنوان مثال، اگر کاربر تصمیم به عقب بردن پخش فعلی بگیرد، پارامترهای پخش جدید با سرعت پخش منفی به برنامه شما ارسال میشوند. time-shifting همچنین از چندین سطح مختلف، ۲x یا ۳x، سرعت پخش برای عقب بردن یا جلو بردن پشتیبانی میکند.
سیستم، متد onTimeShiftSetPlaybackParams(PlaybackParams) شما را با یک شیء PlaybackParams که حاوی پارامترهایی برای جلسه فعلی است، فراخوانی میکند. از این اطلاعات برای پیکربندی مناسب موتور پخش رسانه خود استفاده کنید.
اگر موتور پخش شما از پارامتری پشتیبانی نمیکند، رفتار مورد انتظار را تا حد امکان شبیهسازی کنید. برای مثال، اگر موتور پخش شما از سرعت ۲ برابر پشتیبانی نمیکند، از عملیات جستجوی مکرر در موتور پخش خود استفاده کنید تا به سرعت پخش تقریباً دو برابر برسید.
پس از تنظیم پارامترها، تنظیمات را تغییر ندهید، مگر اینکه کاربر دستور پخشی صادر کند که به پارامتر متفاوتی نیاز داشته باشد یا به کانال جدیدی سوئیچ کند.
،از APIهای تغییر زمان در سرویس ورودی تلویزیون خود استفاده کنید تا به کاربران اجازه دهید برنامههای زنده را در کانالهای سرویس شما متوقف، به عقب و جلو ببرند. اگر برنامه شما از تغییر زمان پشتیبانی میکند، کاربران در نحوه تماشای محتوای شما انعطافپذیری بیشتری پیدا میکنند:
- کاربران میتوانند برنامهها را در حین مدیریت وقفههای کوتاهمدت متوقف کنند، بنابراین هرگز لحظات کلیدی را از دست نمیدهند.
- کاربران میتوانند محتوایی را که قبلاً دیدهاند یا محتوایی که برایشان جالب نیست، به سرعت به جلو ببرند.
- کاربران میتوانند لحظات مورد علاقه خود را در محتوای برنامه به عقب برگردانند و دوباره تماشا کنند.

تغییر زمان از بخشهای کوتاه، موقت و ضبطشده از دادههای برنامه برای پیادهسازی قابلیت پخش برنامههای زنده استفاده میکند. کاربران نمیتوانند این ضبطهای تغییر زمان را خارج از جلسه پخش فعلی پخش کنند. این بدان معناست که آنها نمیتوانند از تغییر زمان برای مکث یک برنامه برای تماشای روز بعد یا مکث یک برنامه برای تماشای بعدی در حالی که به کانال دیگری تغییر میکنند، استفاده کنند.
اگر میخواهید به کاربرانتان اجازه دهید محتوای برنامه را برای تماشا در خارج از جلسه پخش فعلی ضبط کنند، از APIهای ضبط تلویزیون استفاده کنید.
اضافه شدن پشتیبانی از تغییر زمان
برای افزودن پشتیبانی از تغییر زمان به سرویس ورودی تلویزیون خود، باید APIهای تغییر زمان را در کلاس TvInputService.Session خود پیادهسازی کنید، ضبط و پخش ضبطهای تغییر زمان را در برنامه خود مدیریت کنید و به سیستم اطلاع دهید که سرویس ورودی شما پشتیبانی از تغییر زمان را ارائه میدهد.
متدهای TvInputService.Session که شما پیادهسازی میکنید به شرح زیر هستند:
-
onTimeShiftGetCurrentPosition(): توسط سیستم فراخوانی میشود تا موقعیت پخش فعلی را بر حسب میلیثانیه دریافت کند. برای جزئیات بیشتر، به بخش زمان پخش آهنگ مراجعه کنید. -
onTimeShiftGetStartPosition(): توسط سیستم فراخوانی میشود تا موقعیت شروع ضبط شیفت زمانی فعلی را بر حسب میلیثانیه دریافت کند. برای جزئیات بیشتر، به بخش زمانهای پخش آهنگ مراجعه کنید. -
onTimeShiftPause(): زمانی فراخوانی میشود که کاربر پخش را متوقف کند. -
onTimeShiftResume(): زمانی که کاربر پخش را از سر میگیرد، فراخوانی میشود. -
onTimeShiftSeekTo(long): زمانی فراخوانی میشود که سیستم نیاز به جستجوی یک موقعیت زمانی جدید داشته باشد. معمولاً موقعیت جدید بین موقعیت شروع و موقعیت فعلی است. -
onTimeShiftSetPlaybackParams(PlaybackParams): توسط سیستم فراخوانی میشود تا پارامترهای پخش، مانند سرعت پخش، را برای جلسه فعلی ارائه دهد. برای جزئیات بیشتر، به بخش پارامترهای پخش پشتیبانی مراجعه کنید.
برای اطلاعات بیشتر در مورد نحوه اطلاع رسانی به سیستم مبنی بر اینکه سرویس ورودی شما از تغییر زمان پشتیبانی میکند، به بخش «اطلاع رسانی به سیستم در مورد وضعیت تغییر زمان» مراجعه کنید.
اگر از کتابخانه همراه TIF برای پیادهسازی کلاس TvInputService.Session خود استفاده میکنید، بهطور خودکار یک پیادهسازی از تغییر زمان دریافت میکنید که از ExoPlayer استفاده میکند. میتوانید از این پیادهسازی استفاده کنید یا متدهای API تغییر زمان را در BaseTvInputService.Session لغو کنید و پیادهسازی خودتان را ارائه دهید. برای اطلاعات بیشتر در مورد استفاده از کتابخانه همراه TIF، به ایجاد یک سرویس ورودی تلویزیون با استفاده از کتابخانه همراه TIF مراجعه کنید.
ضبط محتوا هنگام شروع جلسه
کاربر میتواند با دسترسی به کنترلهای پخش کانال، محتوای برنامه را متوقف، به عقب و جلو ببرد، یا با فشار دادن دکمه انتخاب (Select) هنگام تماشای محتوا و سپس پیمایش به کنترلهای پخش یا با استفاده از کنترلهای پخش اختصاصی روی یک دستگاه از راه دور.
از آنجا که کاربر میتواند در هر زمانی هنگام تماشای محتوای برنامه از قابلیت تغییر زمان استفاده کند، سرویس ورودی تلویزیون شما باید به محض اینکه کاربر در پیادهسازی onTune() روی یک کانال تنظیم میشود، ضبط محتوای تغییر زمان را آغاز کند. همچنین باید با فراخوانی notifyTimeShiftStatusChanged(int) به سیستم اطلاع دهید که قادر به ضبط هستید، همانطور که در بخش «به سیستم در مورد وضعیت تغییر زمان اطلاع دهید» توضیح داده شده است.
مدیریت فضای ذخیرهسازی محتوای ضبطشده
سرویس ورودی تلویزیون شما مسئول ذخیره ضبطهای تغییر زمان در فضای ذخیرهسازی خصوصی برنامه شما و پخش محتوا هنگام فراخوانی متدهای تغییر زمان شما، مانند onTimeShiftResume() توسط سیستم است. اگر محتوای شما از قبل در فضای ابری ذخیره شده است و برنامه شما میتواند ضبطهای تغییر زمان را در فضای ابری مدیریت کند، میتوانید به جای فضای ذخیرهسازی برنامه از فضای ذخیرهسازی ابری استفاده کنید.
اگر محتوای شما از محتوای محافظتشده استفاده میکند، سرویس ورودی تلویزیون شما مسئول رمزگذاری صحیح محتوای ضبطشده و رمزگشایی محتوا در حین پخش است.
از آنجایی که محتوای ویدیوی ضبط شده میتواند به حجم زیادی از فضای ذخیرهسازی نیاز داشته باشد، باید محتوای ضبط شده را در طول پخش جلسه به دقت مدیریت کنید. اگر زمان جلسه پخش از مدت زمانی که میتوانید برای تغییر زمان ضبط و ذخیره کنید، بیشتر شد، ضبط تغییر زمان خود را طوری تنظیم کنید که بافر فعلی حفظ شود اما مطمئن شوید که زمان فعلی ضبط شده است. به عنوان مثال، اگر کاربر به مدت ۳۱ دقیقه محتوا پخش کرده است و حداکثر اندازه ضبط تغییر زمان شما ۳۰ دقیقه است، زمان ضبط و شروع خود را طوری تنظیم کنید که شامل محتوا از دقیقه ۱ تا دقیقه ۳۱ باشد.
اگر سرویس ورودی تلویزیون شما به دلیل کمبود فضای ذخیرهسازی نمیتواند از تغییر زمان پشتیبانی کند، باید به سیستم اطلاع دهید. برای جزئیات بیشتر در مورد نحوه اطلاعرسانی به سیستم در مورد محدودیتهای پشتیبانی از تغییر زمان، به بخش «به سیستم در مورد وضعیت تغییر زمان اطلاع دهید» مراجعه کنید.
وقتی کاربر به کانال دیگری تغییر مسیر میدهد یا به هر نحوی پخش خود را پایان میدهد، دادههای ضبطشدهی مربوط به تغییر زمان را حذف کنید.
سیستم را از وضعیت تغییر زمان مطلع کنید
اگر سرویس ورودی تلویزیون شما از تغییر زمان پشتیبانی میکند، وقتی کاربر روی یک کانال تنظیم میکند، در پیادهسازی onTune() خود notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_AVAILABLE) را فراخوانی کنید.
برای اطلاعرسانی به سیستم در صورت تغییر قابلیتهای تغییر زمان سرویس ورودی خود، notifyTimeShiftStatusChanged(int) استفاده کنید. برای مثال، اگر سرویس ورودی تلویزیون شما به دلیل محدودیت فضای ذخیرهسازی یا دلایل دیگر نمیتواند از تغییر زمان پشتیبانی کند، notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNAVAILABLE) را فراخوانی کنید.
اگر سرویس ورودی تلویزیون شما به هیچ وجه نمیتواند از تغییر زمان پشتیبانی کند، هنگام ایجاد یک جلسه پخش، notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNSUPPORTED) را فراخوانی کنید. سیستم با هر سرویس ورودی که هرگز notifyTimeShiftStatusChanged() را فراخوانی نکند، به عنوان یک سرویس ورودی که نمیتواند از تغییر زمان پشتیبانی کند، رفتار میکند. این شامل سرویسهای ورودی با استفاده از API سطح ۲۲ و قبل از آن میشود.
زمان پخش آهنگ
موقعیت شروع ضبط با تغییر زمان، اولین موقعیت زمانی مطلق، بر حسب میلیثانیه از زمان شروع، است که کاربر میتواند آن را جستجو کند. این معمولاً زمانی است که پخش ویدیو پس از onTune() شروع میشود. با این حال، هنگامی که کاربر مقدار محتوایی را تماشا میکند که از آنچه برنامه شما میتواند ضبط کند، بیشتر است، باید ضبط یک بخش جدید برای تغییر زمان را شروع کنید و زمان شروع خود را بر این اساس بهروزرسانی کنید.
The current position of a time-shifting recording is the current playback position, in milliseconds since the epoch. This position changes continuously during playback. Typically, you can use your playback engine to determine this value, as shown in the following example:
کاتلین
override fun onTimeShiftGetCurrentPosition(): Long = tvPlayer?.run { currentProgram?.let { program -> currentPosition + program.startTimeUtcMillis } } ?: TvInputManager.TIME_SHIFT_INVALID_TIME
جاوا
@Override public long onTimeShiftGetCurrentPosition() { if (getTvPlayer() != null && currentProgram != null) { return getTvPlayer().getCurrentPosition() + currentProgram.getStartTimeUtcMillis(); } return TvInputManager.TIME_SHIFT_INVALID_TIME; }
Ensure that the start time you provide when the system calls your onTimeShiftGetStartPosition() is never greater than the current time position you provide in onTimeShiftGetCurrentPosition() . The system uses these calls to update the time-shifting duration in the playback controls UI.
Support playback parameters
To change playback speed during time-shifting, the system uses playback parameters. For example, if the user decides to rewind the current playback, new playback parameters are passed to your app with a negative playback speed. Time-shifting also supports several different levels, 2x or 3x, of playback speed for rewinding or fast-forwarding.
The system calls your onTimeShiftSetPlaybackParams(PlaybackParams) method with a PlaybackParams object that contains parameters for the current session. Use this information to configure your media playback engine appropriately.
If your playback engine does not support a parameter, emulate the expected behavior as best you can. For example, if your playback engine doesn't support 2x speed, use repeated seek operations on your playback engine to achieve an approximately double playback speed.
After the parameters are set, don't change the settings unless the user either issues a playback command that requires a different parameter or switches to a new channel.