Zaman kaydırmayı destekleme

Kullanıcıların hizmet kanallarınızdaki canlı programları duraklatma, geri sarma ve hızlı ileri sarma özelliklerini etkinleştirmek için TV giriş hizmetinizde zaman değiştirme API'lerini kullanın. Uygulamanız zaman değiştirme özelliğini destekliyorsa kullanıcılar içeriğinizi izleme konusunda esnekliğe sahip olur:

  • Kullanıcılar kısa süreli kesintilerle programları duraklatarak önemli anları hiçbir zaman kaçırmazlar.
  • Kullanıcılar önceden gördükleri veya ilgilerini çekmeyen içerikleri hızlı ileri sarabilir.
  • Kullanıcılar program içeriğinde en sevdikleri anları geri sarabilir ve tekrar izleyebilir.

Şekil 1. Zaman kaydırma için kullanılan Android TV oynatma kontrolleri.

Zaman kaydırma, canlı programları oynatma yeteneğini uygulamak için program verilerinin kısa, geçici, kayıtlı segmentlerini kullanır. Kullanıcılar, bu zaman değiştirme kayıtlarını mevcut oynatma oturumunun dışında oynatamazlar. Bu, bir programı ertesi gün izlemek üzere duraklatmak veya farklı bir kanala geçerken daha sonra izlemek için bir programı duraklatmak için zaman kaydırmayı kullanamayacakları anlamına gelir.

Kullanıcılarınızın mevcut oynatma oturumunun dışında izlemek üzere program içeriklerini kaydetmesine izin vermek için TV kayıt API'lerini kullanın.

Zaman kaydırma desteği ekle

TV giriş hizmetinize zaman değiştirme desteği eklemek için TvInputService.Session sınıfınızda zaman değiştirme API'lerini uygulamanız, uygulamanızdaki zaman değiştirme kayıtlarının kaydedilmesini ve oynatılmasını işlemeniz ve giriş hizmetinizin zaman değiştirme desteği sunduğunu sisteme bildirmeniz gerekir.

Uyguladığınız TvInputService.Session yöntemleri şunlardır:

Giriş hizmetinizin zaman kaydırmayı desteklediği konusunda sistemi nasıl bilgilendireceğiniz hakkında daha fazla bilgi için Sistemi zaman değiştirme durumu hakkında bilgilendirme bölümüne göz atın.

TvInputService.Session sınıfınızı uygulamak için TIF Tamamlayıcı Kitaplığı'nı kullanıyorsanız otomatik olarak ExoPlayer kullanan bir zaman değiştirme uygulaması elde edersiniz. Bu uygulamayı kullanabilir veya BaseTvInputService.Session içindeki zaman değiştirme API yöntemlerini geçersiz kılarak kendi uygulamanızı sağlayabilirsiniz. TIF Tamamlayıcı Kitaplığı'nı kullanma hakkında daha fazla bilgi için TIF Tamamlayıcı Kitaplığı'nı kullanarak TV giriş hizmeti oluşturma bölümüne bakın.

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

Kullanıcılar, içerik izlerken Seç'e basıp oynatma kontrollerine giderek veya uzak bir cihazda özel oynatma kontrollerini kullanarak kanalın oynatma kontrollerine erişerek program içeriğini duraklatabilir, geri alabilir ve ileri sarabilir.

Kullanıcılar, program içeriğini izlerken istedikleri zaman zaman değiştirme özelliğini kullanabildiğinden, onTune(). Ayrıca, Zaman değiştirme durumu hakkında sistemi bilgilendirme bölümünde açıklandığı gibi, notifyTimeShiftStatusChanged(int) yöntemini çağırarak sisteme kayıt yapabildiğinizi bildirmeniz gerekir.

Kayıtlı içerik depolama alanını yönetin

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

İçeriğinizde korumalı içerik kullanılıyorsa TV giriş hizmetiniz, oynatma sırasında kaydedilen içeriğin doğru şekilde şifrelenmesinden ve içeriğin şifresinin çözülmesinden sorumludur.

Kaydedilen video içeriği büyük miktarda depolama alanı gerektirebileceğinden, oturum oynatırken kaydedilen içeriği dikkatli bir şekilde yönetmeniz gerekir. Oynatma oturumu süresi, zaman değiştirme için kaydedip saklayabileceğiniz süreyi aşarsa mevcut arabelleği korumak için zaman değiştirme kaydınızı ayarlayın ancak geçerli zamanın yakalandığından emin olun. Örneğin, kullanıcı 31 dakika boyunca içerik oynatıyorsa ve maksimum zaman değiştirme kayıt boyutu 30 dakikaysa kaydınızı ve başlangıç zamanını 1 ile 31 dakika arasındaki içeriği içerecek şekilde ayarlayın.

TV giriş hizmetiniz, depolama alanı olmadığı için zaman kaydırmayı desteklemiyorsa sistemi bilgilendirmeniz gerekir. Zaman kaydırma destek kısıtlamaları hakkında sistemi nasıl bilgilendireceğiniz hakkında daha fazla bilgi için Sistemi zaman değiştirme 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, kayıtlı zaman değiştirme verilerinizi silin.

Zaman kaydırma durumunu sisteme bildir

TV giriş hizmetiniz zaman kaydırmayı destekliyorsa bir kullanıcı bir kanala ayarlandığında onTune() uygulamanızda notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_AVAILABLE) çağrısı yapın.

Giriş hizmetinizin zaman değiştirme özellikleri değişirse sistemi bildirmek için notifyTimeShiftStatusChanged(int) özelliğini kullanın. Örneğin, TV giriş hizmetiniz depolama alanı kısıtlamaları veya başka nedenlerden dolayı zaman kaydırmayı desteklemiyorsa notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNAVAILABLE) numaralı telefonu arayın.

TV giriş hizmetiniz zaman kaydırmayı hiç desteklemiyorsa bir oynatma oturumu oluşturulduğunda notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNSUPPORTED) numaralı telefonu arayın. Sistem, notifyTimeShiftStatusChanged() öğesini hiçbir zaman çağırmayan giriş hizmetlerini zaman kaydırmayı desteklemeyen bir giriş hizmeti 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 arayabileceği en erken mutlak zaman konumudur. Dönemden bu yana geçen süre, milisaniye cinsinden belirtilir. Bu, genellikle onTune() çağrıldıktan sonra video oynatmanın başladığı zamandır. Ancak kullanıcı, uygulamanızın kaydedebileceğinden daha fazla miktarda içerik izlediğinde zaman değiştirme 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, dönemden bu yana geçen milisaniye cinsinden mevcut oynatma konumudur. Bu konum, oynatma sırasında sürekli değişir. Genellikle bu değeri belirlemek için aşağıdaki örnekte gösterildiği gibi oynatma motorunuzu kullanabilirsiniz:

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() cihazınızı çağırdığında sağladığınız başlangıç zamanının hiçbir zaman onTimeShiftGetCurrentPosition() içinde sağladığınız geçerli zaman konumundan daha büyük olmadığından emin olun. Sistem, bu çağrıları oynatma kontrolleri kullanıcı arayüzündeki zaman kaydırma süresini güncellemek için kullanır.

Destek oynatma parametreleri

Sistem, zaman değiştirme sırasında oynatma hızını değiştirmek için oynatma parametrelerini kullanır. Örneğin, kullanıcı mevcut oynatmayı geri sarmaya karar verirse uygulamanıza yeni oynatma parametreleri negatif bir oynatma hızıyla iletilir. Zaman kaydırma, geri veya ileri sarma için farklı oynatma hızı düzeylerini (2x veya 3x) de destekler.

Sistem, onTimeShiftSetPlaybackParams(PlaybackParams) yönteminizi geçerli oturumun parametrelerini içeren bir PlaybackParams nesnesiyle çağırır. Medya oynatma motorunuzu buna uygun şekilde yapılandırmak için bu bilgileri kullanın.

Oynatma motorunuz bir parametreyi desteklemiyorsa beklenen davranışı mümkün olan en iyi şekilde emüle edin. Örneğin, oynatma motorunuz 2x hızı desteklemiyorsa oynatma motorunuzda tekrarlı arama işlemleri kullanarak yaklaşık iki kat oynatma hızı elde edin.

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.