Zaman kaydırmayı destekleme

Kullanıcıların hizmet kanallarınızdaki canlı programları duraklatmasına, geri sarmasına ve ileri sarmasına olanak tanımak için TV girişi hizmetinizde zaman kaydırma API'lerini kullanın. Uygulamanız zaman kaydırma özelliğini destekliyorsa, kullanıcılar içeriğinizi izleme biçimleri konusunda esneklik kazanırlar:

  • Kullanıcılar kısa süreli bir kesinti sırasında programları duraklatabilir, böylece önemli anları asla kaçırmazlar.
  • Kullanıcılar, daha önce gördükleri veya ilgilenmedikleri içerikleri hızlıca ileri sarabilir.
  • Kullanıcılar program içeriklerindeki favori anları geri sarıp tekrar izleyebilirler.
Şekil 1. Android TV'de zaman kaydırma için kullanılan oynatma kontrolleri.

Zaman kaydırma, canlı programların tekrar oynatılabilmesini sağlamak için program verilerinin kısa, geçici, kaydedilmiş bölümlerini kullanır. Kullanıcılar, bu zaman kaydırmalı kayıtları mevcut oynatma oturumunun dışında oynatamaz. Bu nedenle, programı duraklatıp ertesi gün izlemek veya farklı bir kanala geçerken programı duraklatıp daha sonra izlemek için zaman kaydırma özelliğini kullanamazlar.

Kullanıcılarınızın program içeriğini mevcut oynatma oturumunun dışında izlemek üzere kaydetmelerini istiyorsanız, TV kayıt API'lerini kullanın.

Zaman kaydırma desteği ekleyin

TV giriş hizmetinize zaman kaydırma desteği eklemek için TvInputService.Session sınıfınızda zaman kaydırma API'lerini uygulamanız, uygulamanızda zaman kaydırma kayıtlarının kaydedilmesini ve oynatılmasını yönetmeniz ve giriş hizmetinizin zaman kaydırma desteği sağladığını sisteme bildirmeniz gerekir.

Uygulayacağınız TvInputService.Session yöntemler şunlardır:

Giriş hizmetinizin zaman kaydırma özelliğini desteklediğini sisteme bildirme hakkında daha fazla bilgi için Sistemi zaman kaydırma durumu hakkında bilgilendirme bölümüne bakın.

TvInputService.Session sınıfınızı uygulamak için TIF Companion Library'yi kullanıyorsanız ExoPlayer'ı kullanan bir zaman kaydırma uygulaması otomatik olarak sağlanır. Bu uygulamayı kullanabilir veya BaseTvInputService.Session içindeki zaman kaydırma API yöntemlerini geçersiz kılıp kendi uygulamanızı sağlayabilirsiniz. TIF Companion Library'yi kullanma hakkında daha fazla bilgi için TIF Companion Library'yi kullanarak TV giriş hizmeti oluşturma başlıklı makaleyi inceleyin.

Oturum başladığında içeriği kaydetme

Kullanıcılar, kanala ait oynatma kontrollerine erişerek program içeriklerini duraklatabilir, geri sarabilir ve ileri sarabilir. Bunun için içerik izlerken Seç'e basıp oynatma kontrollerine gidebilir veya uzak cihazdaki özel oynatma kontrollerini kullanabilir.

Kullanıcı program içeriğini izlerken dilediği zaman zaman kaydırma özelliğini kullanabildiği için, TV giriş servisiniz, kullanıcının onTune() uygulamanızdaki bir kanala geçmesiyle birlikte zaman kaydırmalı içeriği kaydetmeye başlamalıdır. Ayrıca, Sistemi zaman kaydırma durumu hakkında bilgilendirme bölümünde açıklandığı gibi notifyTimeShiftStatusChanged(int) işlevini çağırarak sisteme kayıt yapabildiğinizi bildirmeniz gerekir.

Kaydedilen içerik depolamasını yönetin

TV giriş hizmetiniz, zaman kaydırma kayıtlarını uygulamanızın özel uygulama depolama alanında saklamaktan ve sistem, onTimeShiftResume() gibi zaman kaydırma yöntemlerinizi çağırdığında içeriği oynatmaktan sorumludur. İçeriğiniz zaten bulutta depolanıyorsa ve uygulamanız buluttaki zaman kaydırmalı kayıtları yönetebiliyorsa uygulama depolama alanı yerine bulut depolama alanını kullanabilirsiniz.

İçeriğinizde korumalı içerik kullanılıyorsa kaydedilen içeriğin uygun şekilde şifrelenmesi ve oynatma sırasında içeriğin şifresinin çözülmesi TV giriş hizmetinizin sorumluluğundadır.

Kaydedilen video içerikleri büyük miktarda depolama alanı gerektirebileceğinden oturum oynatma sırasında kaydedilen içerikleri dikkatli bir şekilde yönetmeniz gerekir. Oynatma oturumu süresi, zaman kaydırma için kaydedip saklayabileceğiniz süreyi aşarsa, mevcut arabelleği koruyacak ancak mevcut zamanın kaydedildiğinden emin olacak şekilde zaman kaydırma kaydınızı ayarlayın. Örneğin, kullanıcı 31 dakikadır içerik oynatıyorsa ve maksimum zaman kaydırma kayıt boyutunuz 30 dakika ise kaydınızı ve başlangıç zamanınızı 1. dakikadan 31. dakikaya kadar olan içeriği içerecek şekilde ayarlayın.

TV giriş hizmetiniz depolama alanı yetersizliği nedeniyle zaman kaydırma özelliğini desteklemiyorsa sistemi bilgilendirmeniz gerekir. Sistemi zaman kaydırma desteği kısıtlamaları hakkında nasıl bilgilendireceğinizle ilgili daha fazla bilgi için Sistemi zaman kaydırma durumu hakkında bilgilendirme bölümüne bakın.

Kullanıcı farklı bir kanala geçtiğinde veya oynatma oturumunu başka bir şekilde sonlandırdığında, kaydedilen zaman kaydırma verilerinizi silin.

Sistemi zaman kaydırma durumu hakkında bilgilendirme

TV giriş hizmetinizde zaman kaydırma destekleniyorsa kullanıcı bir kanala geçtiğinde notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_AVAILABLE) işlevini onTune() uygulamanızda çağırın.

Giriş hizmetinizin zaman kaydırma özelliklerinde değişiklik olursa sistemi bilgilendirmek için notifyTimeShiftStatusChanged(int) kullanın. Örneğin, TV giriş hizmetiniz depolama alanı kısıtlamaları veya başka nedenlerle zaman kaydırma özelliğini desteklemiyorsa notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNAVAILABLE) numaralı telefonu arayın.

TV giriş hizmetiniz zaman kaydırmayı hiç desteklemiyorsa oynatma oturumu oluşturulduğunda call notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNSUPPORTED) yapın. Sistem, notifyTimeShiftStatusChanged() işlevini hiçbir zaman çağırmayan giriş hizmetlerini, zaman kaydırma özelliğini destekleyemeyen giriş hizmetleri olarak değerlendirir. Bu, API düzeyi 22 ve önceki sürümleri kullanan giriş hizmetlerini kapsar.

Oynatma sürelerini takip etme

Zaman kaydırmalı kaydın başlangıç konumu, kullanıcının arama yapabileceği, dönemden bu yana geçen milisaniye cinsinden en erken mutlak zaman konumudur. Bu genellikle onTune() çağrıldıktan sonra video oynatmanın başladığı zamandır. Ancak kullanıcı, uygulamanızın kaydedebileceği miktardan daha fazla içerik izlediğinde, zaman kaydırma için yeni bir segment kaydetmeye başlamanız ve başlangıç zamanınızı buna göre güncellemeniz gerekir.

Zaman kaydırmalı bir kaydın mevcut konumu, epoch'tan bu yana geçen süre (milisaniye cinsinden) olarak mevcut oynatma konumudur. Bu konum, oynatma sırasında sürekli değişir. Genellikle, bu değeri belirlemek için oynatma motorunuzu kullanabilirsiniz. Aşağıdaki örnekte bu durum gösterilmektedir:

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;
}

Sistem, onTimeShiftGetStartPosition() öğenizi çağırdığında sağladığınız başlangıç zamanının, onTimeShiftGetCurrentPosition() öğesinde sağladığınız mevcut zaman konumundan asla büyük olmadığından emin olun. Sistem, oynatma kontrolleri kullanıcı arayüzündeki zaman kaydırma süresini güncellemek için bu aramaları kullanır.

Oynatma parametrelerini destekleme

Zaman kaydırma sırasında oynatma hızını değiştirmek için sistem, oynatma parametrelerini kullanır. Örneğin, kullanıcı mevcut oynatmayı geri sarmaya karar verirse, uygulamanıza negatif bir oynatma hızı içeren yeni oynatma parametreleri iletilir. Zaman kaydırma, geri sarma veya ileri sarma için oynatma hızının 2 katı ya da 3 katı gibi farklı seviyelerini de destekler.

Sistem, geçerli oturumun parametrelerini içeren bir PlaybackParams nesnesiyle onTimeShiftSetPlaybackParams(PlaybackParams) yönteminizi çağırır. Bu bilgileri kullanarak medya oynatma motorunuzu uygun şekilde yapılandırın.

Oynatma motorunuz bir parametreyi desteklemiyorsa beklenen davranışı mümkün olduğunca iyi şekilde taklit edin. Örneğin, oynatma motorunuz 2 kat hızı desteklemiyorsa oynatma motorunuzda tekrarlanan arama işlemleri yaparak oynatma hızını yaklaşık iki katına çıkarın.

Parametreler ayarlandıktan sonra, kullanıcı farklı bir parametre gerektiren bir oynatma komutu vermedikçe veya yeni bir kanala geçmedikçe ayarları değiştirmeyin.