پشتیبانی از تغییر زمان

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

  • کاربران می توانند برنامه ها را در حین رسیدگی به یک وقفه کوتاه مدت متوقف کنند، بنابراین هرگز لحظات کلیدی را از دست نمی دهند.
  • کاربران می‌توانند از طریق محتوایی که قبلاً دیده‌اند یا محتوایی که به آن‌ها علاقه‌ای ندارد، به سرعت به جلو حرکت کنند.
  • کاربران می توانند لحظات مورد علاقه خود را در محتوای برنامه به عقب برگردانند و دوباره تماشا کنند.

شکل 1. کنترل‌های پخش Android TV که برای جابجایی زمان استفاده می‌شوند.

جابجایی زمان از بخش‌های کوتاه، موقت و ضبط‌شده داده‌های برنامه برای اجرای توانایی پخش برنامه‌های زنده استفاده می‌کند. کاربران نمی توانند این ضبط های با تغییر زمان را خارج از جلسه پخش فعلی پخش کنند. این بدان معناست که آنها نمی توانند از تغییر زمان برای توقف موقت برنامه برای تماشای روز بعد یا توقف موقت برنامه برای تماشای بعد در حالی که به کانال دیگری تغییر مکان می دهند، استفاده کنند.

اگر می‌خواهید به کاربران خود اجازه دهید محتوای برنامه را برای تماشای خارج از جلسه پخش فعلی ضبط کنند، از APIهای ضبط تلویزیون استفاده کنید.

پشتیبانی تغییر زمان را اضافه کنید

برای افزودن پشتیبانی جابجایی زمان به سرویس ورودی تلویزیون خود، باید API های تغییر زمان را در کلاس TvInputService.Session خود پیاده سازی کنید، ضبط و پخش ضبط های جابجایی زمان را در برنامه خود مدیریت کنید و به سیستمی که سرویس ورودی شما ارائه می دهد اطلاع دهید. پشتیبانی جابجایی زمان

متدهای TvInputService.Session که پیاده سازی می کنید به شرح زیر است:

برای اطلاعات بیشتر در مورد نحوه اطلاع رسانی به سیستم مبنی بر اینکه سرویس ورودی شما از جابجایی زمان پشتیبانی می کند، به بخش اطلاع رسانی سیستم درباره وضعیت تغییر زمان مراجعه کنید.

اگر از TIF Companion Library برای پیاده‌سازی کلاس TvInputService.Session خود استفاده می‌کنید، به‌طور خودکار پیاده‌سازی تغییر زمان را دریافت می‌کنید که از ExoPlayer استفاده می‌کند. می‌توانید از این پیاده‌سازی استفاده کنید یا روش‌های API تغییر زمان را در BaseTvInputService.Session لغو کنید و پیاده‌سازی خود را ارائه دهید. برای کسب اطلاعات بیشتر در مورد استفاده از کتابخانه TIF Companion، به ایجاد سرویس ورودی تلویزیون با استفاده از کتابخانه TIF Companion مراجعه کنید.

هنگام شروع جلسه، محتوا را ضبط کنید

کاربر می‌تواند با دسترسی به کنترل‌های پخش کانال، یا با فشار دادن Select در حین تماشای محتوا و سپس پیمایش به کنترل‌های پخش یا با استفاده از کنترل‌های پخش اختصاصی در یک دستگاه راه دور، محتوای برنامه را مکث، عقب و جلو بردارد.

از آنجایی که کاربر می‌تواند در هر زمانی در حین تماشای محتوای برنامه از تغییر زمان استفاده کند، سرویس ورودی تلویزیون شما باید به محض اینکه کاربر کانالی را در اجرای onTune() شما تنظیم کند، ضبط محتوای تغییر زمان را آغاز کند. همچنین باید با فراخوانی notifyTimeShiftStatusChanged(int) به سیستم اطلاع دهید که قادر به ضبط هستید، همانطور که در بخش Notify the system about time-shifting status توضیح داده شده است.

ذخیره سازی محتوای ضبط شده را مدیریت کنید

سرویس ورودی تلویزیون شما مسئول ذخیره ضبط‌های جابجایی زمان در فضای ذخیره‌سازی برنامه خصوصی برنامه شما و پخش محتوای زمانی است که سیستم از روش‌های تغییر زمان شما، مانند onTimeShiftResume() فراخوانی می‌کند. اگر محتوای شما قبلاً در ابر ذخیره شده است و برنامه شما می‌تواند ضبط‌های با تغییر زمان را در ابر مدیریت کند، می‌توانید به جای ذخیره‌سازی برنامه از فضای ذخیره‌سازی ابری استفاده کنید.

اگر محتوای شما از محتوای محافظت شده استفاده می کند، سرویس ورودی تلویزیون شما مسئول رمزگذاری مناسب محتوای ضبط شده و رمزگشایی محتوا در حین پخش است.

از آنجایی که محتوای ویدئویی ضبط شده می‌تواند به فضای ذخیره‌سازی زیادی نیاز داشته باشد، باید محتوای ضبط شده را در حین پخش جلسه به دقت مدیریت کنید. اگر زمان جلسه پخش بیشتر از مدت زمانی است که می توانید ضبط کنید و برای جابجایی زمان ذخیره کنید، ضبط تغییر زمان خود را برای حفظ بافر فعلی تنظیم کنید اما مطمئن شوید که زمان فعلی ضبط شده است. به عنوان مثال، اگر کاربر به مدت 31 دقیقه محتوا را پخش کرده است و حداکثر اندازه ضبط با تغییر زمان 30 دقیقه است، زمان ضبط و شروع خود را طوری تنظیم کنید که حاوی محتوا از دقیقه 1 تا دقیقه 31 باشد.

اگر سرویس ورودی تلویزیون شما به دلیل کمبود فضای ذخیره‌سازی نمی‌تواند از تغییر زمان پشتیبانی کند، باید به سیستم اطلاع دهید. برای جزئیات بیشتر در مورد نحوه اطلاع رسانی به سیستم در مورد محدودیت های پشتیبانی جابجایی زمان، به بخش اطلاع رسانی سیستم در مورد وضعیت تغییر زمان مراجعه کنید.

هنگامی که کاربر به کانال دیگری می رود یا جلسه پخش خود را به پایان می رساند، داده های تغییر زمان ضبط شده خود را حذف کنید.

سیستم را از وضعیت تغییر زمان مطلع کنید

اگر سرویس ورودی تلویزیون شما از جابجایی زمان پشتیبانی می‌کند، در اجرای onTune() با notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_AVAILABLE) تماس بگیرید.

برای اطلاع رسانی به سیستم در صورت تغییر هر گونه قابلیت تغییر زمان در سرویس ورودی شما، از notifyTimeShiftStatusChanged(int) استفاده کنید. برای مثال، اگر سرویس ورودی تلویزیون شما به دلیل محدودیت‌های فضای ذخیره‌سازی یا دلایل دیگر نمی‌تواند از تغییر زمان پشتیبانی کند، با notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNAVAILABLE) تماس بگیرید.

اگر سرویس ورودی تلویزیون شما اصلاً نمی‌تواند جابجایی زمان را پشتیبانی کند، هنگام ایجاد جلسه پخش، با notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNSUPPORTED) تماس بگیرید. سیستم با هر سرویس ورودی که هرگز notifyTimeShiftStatusChanged() را فراخوانی نمی کند به عنوان یک سرویس ورودی که نمی تواند از تغییر زمان پشتیبانی کند، برخورد می کند. این خدمات ورودی با استفاده از API سطح 22 و قبل از آن را پوشش می دهد.

زمان پخش را پیگیری کنید

موقعیت شروع یک ضبط با تغییر زمان، اولین موقعیت زمانی مطلق است که کاربر می تواند به دنبال آن باشد، در میلی ثانیه از آن دوره. معمولاً این زمانی است که پخش ویدیو پس از 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() ارائه می‌دهید بیشتر نباشد. سیستم از این تماس‌ها برای به‌روزرسانی مدت زمان جابجایی در رابط کاربری کنترل‌های پخش استفاده می‌کند.

پشتیبانی از پارامترهای پخش

برای تغییر سرعت پخش در حین جابجایی زمان، سیستم از پارامترهای پخش استفاده می کند. به عنوان مثال، اگر کاربر تصمیم بگیرد پخش فعلی را به عقب برگرداند، پارامترهای پخش جدید با سرعت پخش منفی به برنامه شما ارسال می شود. جابجایی زمان همچنین از چندین سطح مختلف، 2x یا 3x، سرعت پخش برای عقب و جلو کردن سریع پشتیبانی می کند.

سیستم متد onTimeShiftSetPlaybackParams(PlaybackParams) شما را با یک شی PlaybackParams که حاوی پارامترهای جلسه جاری است فراخوانی می کند. از این اطلاعات برای پیکربندی مناسب موتور پخش رسانه خود استفاده کنید.

اگر موتور پخش شما از پارامتری پشتیبانی نمی کند، رفتار مورد انتظار را به بهترین شکل ممکن تقلید کنید. به عنوان مثال، اگر موتور پخش شما از سرعت 2 برابر پشتیبانی نمی کند، از عملیات جستجوی مکرر در موتور پخش خود استفاده کنید تا سرعت پخش تقریباً دو برابر شود.

پس از تنظیم پارامترها، تنظیمات را تغییر ندهید، مگر اینکه کاربر دستور پخشی را صادر کند که به پارامتر دیگری نیاز دارد یا به یک کانال جدید سوئیچ کند.