Sıra oluşturuluyor

Cast çerçevesi, alıcıda sırayla oynatılacak MediaQueueItem örneklerinin listelerinin oluşturulmasını destekleyen sıralama sınıfları sağlar. Bu listeler, video veya ses akışları gibi MediaInfo örneklerinden oluşturulabilir. Bu içerik öğeleri sırası düzenlenebilir, yeniden sıralanabilir, güncellenebilir vb.

Alıcı SDK, kuyrukta şu anda etkin (çalan veya duraklatılmış) en az bir öğe olduğu sürece kuyruğu korur ve kuyruktaki işlemlere yanıt verir. Gönderenler oturuma katılabilir ve sıraya öğe ekleyebilir. Alıcı, son öğe oynatmayı tamamlayana, gönderen oynatmayı durdurup oturumu sonlandırana veya gönderen alıcıya yeni bir sıra yükleyene kadar sıradaki öğeler için bir oturum sürdürür. Alıcı, varsayılan olarak sonlandırılan kuyruklarla ilgili herhangi bir bilgiyi saklamaz. Kuyruktaki son öğe tamamlandığında medya oturumu sona erer ve kuyruk kaybolur.

Medya kuyruğu öğeleri oluşturma ve yükleme

Bir medya sırası öğesi, Cast çerçevesinde MediaQueueItem örneği olarak gösterilir. Bir medya sırası öğesi oluşturduğunuzda, uyarlanabilir içerikle Medya Oynatıcı Library'yi kullanıyorsanız oynatıcının, sıradaki öğe oynatmayı bitirmeden önce medya sırası öğesini arabelleğe almaya başlaması için önceden yükleme süresini ayarlayabilirsiniz. Öğenin otomatik oynatma özelliğini doğru olarak ayarlarsanız alıcı, öğeyi otomatik olarak oynatabilir. Örneğin, medya sırası öğenizi aşağıdaki gibi oluşturmak için bir oluşturucu kalıbı kullanabilirsiniz:

Kotlin
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo)
    .setAutoplay(true)
    .setPreloadTime(20.0)
    .build()
Java
MediaQueueItem queueItem = new MediaQueueItem.Builder(mediaInfo)
  .setAutoplay(true)
  .setPreloadTime(20)
  .build();

RemoteMediaClient yönteminin uygun queueLoad yöntemini kullanarak kuyruğa bir dizi medya kuyruğu öğesi yükleyin.

Medya kuyruğu durumu güncellemelerini alma

Alıcı, bir medya sırası öğesini yüklediğinde öğeye oturum süresi (ve sıranın ömrü) boyunca geçerli olacak benzersiz bir kimlik atar. Uygulamanız, hangi öğenin şu anda yüklendiği (oynatılmıyor olabilir), yüklendiği veya önceden yüklendiğiyle ilgili olarak sıranın durumunu öğrenebilir. MediaStatus sınıfı şu durum bilgilerini sağlar:

  • getPreloadedItemId() method: Bir sonraki öğe önceden yüklenmişse önceden yüklenmiş öğe kimliğini döndürür.
  • getLoadingItemId() method: Alıcıda şu anda yüklenen (ancak kuyrukta etkin olmayan) öğenin öğe kimliğini döndürür.
  • getCurrentItemId() method: Medya durumu değişikliği gerçekleştiğinde kuyrukta etkin olan öğenin öğe kimliğini döndürür (çalınmıyor olabilir).
  • getQueueItems() (Kullanımdan kaldırıldı, bunun yerine MediaQueue kullanın) yöntemi: MediaQueueItem örneklerinin listesini değiştirilemez bir liste olarak döndürür.

Uygulamanız, öğe listesini MediaQueue sınıfını kullanarak da alabilir. Sınıf, medya sırasının seyrek veri modelidir. Kuyruktaki öğe kimliklerinin listesini tutar. Bu liste, alıcıyla otomatik olarak senkronize edilir. MediaQueue, kuyruk çok uzun olduğunda çok fazla bellek kullanacağı için tüm MediaQueueItem öğelerini saklamaz. Bunun yerine, öğeleri isteğe bağlı olarak getirir ve son erişilen öğelerin LruCache tutar. Medya kuyruğuna erişmek için aşağıdaki yöntemleri kullanabilirsiniz:

  • getItemIds() method - Tüm öğe kimliklerinin listesini sırayla döndürür.
  • getItemAtIndex() method - Returns the cached item at a given index. Öğe önbelleğe alınmamışsa, MediaQueue null değerini döndürür ve öğeyi getirmek için planlama yapar. Öğe getirildiğinde MediaQueue.Callback#itemsUpdatedAtIndexes() çağrılır ve aynı kimlikle getItemAtIndex()'nin tekrar çağrılması öğeyi döndürür.
  • Kullanıcı, sıra kullanıcı arayüzünü yukarı veya aşağı kaydırdığında ve uygulamanız buluttan daha fazla öğe getirmek istediğinde fetchMoteItemsRelativeToIndex() kullanılır.

Uygulamanızı sıranın durumu ve sıradaki öğeler hakkında bilgilendirmek için bu yöntemleri diğer medya durumu yöntemleriyle birlikte kullanın. Uygulamanız, alıcıdan gelen medya durumu güncellemelerinin yanı sıra RemoteMediaClient.Callback ve MediaQueue.Callback'ı uygulayarak kuyrukta yapılan değişiklikleri de dinleyebilir.

Ayrıca Cast SDK, kuyruğa alma için kullanıcı arayüzü oluşturmaya yönelik iki yardımcı sınıf sağlar.

Örneğin, MediaQueueRecyclerViewAdapter kullanarak RecyclerView oluşturmak için:

Kotlin
class MyRecyclerViewAdapter(mediaQueue: MediaQueue?) :
    MediaQueueRecyclerViewAdapter<MyViewHolder?>(mediaQueue) {
    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        val item = getItem(position)

        // Update the view using `item`.
        ...
    }
}

class MyViewHolder : RecyclerView.ViewHolder {
    // Implement your own ViewHolder.
    ...
}

fun someMethod() {
    val adapter = MyRecyclerViewAdapter(
        mCastSession.remoteMediaClient.getMediaQueue())
    val recyclerView =
        activity.findViewById(R.id.my_recycler_view_id) as RecyclerView
    recyclerView.adapter = adapter
}
Java
public class MyRecyclerViewAdapter extends MediaQueueRecyclerViewAdapter<MyViewHolder> {
    public MyRecyclerViewAdapter(MediaQueue mediaQueue) {
        super(mediaQueue);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
      MediaQueueItem item = getItem(position);

      // Update the view using `item`.
      ...
    }
}

public class MyViewHolder implements RecyclerView.ViewHolder {
  // Implement your own ViewHolder.
  ...
}

public void someMethod() {
    RecyclerView.Adapter adapter = new MyRecyclerViewAdapter(
        mCastSession.getRemoteMediaClient().getMediaQueue());
    RecyclerView recyclerView =
        (RecyclerView) getActivity().findViewById(R.id.my_recycler_view_id);
    recyclerView.setAdapter(adapter);
}

Sırayı düzenleme

Kuyruktaki öğeler üzerinde işlem yapmak için RemoteMediaClient sınıfının kuyruk yöntemlerini kullanın. Bu işlevler sayesinde yeni bir sıraya bir dizi öğe yükleyebilir, mevcut bir sıraya öğe ekleyebilir, sıradaki öğelerin özelliklerini güncelleyebilir, bir öğenin sırada ileri veya geri gitmesini sağlayabilir, sıranın özelliklerini (ör. bir sonraki öğeyi seçen repeatMode algoritmasını değiştirme) ayarlayabilir, sıradan öğe kaldırabilir ve sıradaki öğelerin sırasını değiştirebilirsiniz.