Sıra oluşturuluyor

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

Alıcı SDK'sı, sırayı korur ve sırada şu anda etkin (oynatılan veya duraklatılan) en az bir öğe olduğu sürece sıradaki işlemlere yanıt verir. Gönderenler oturuma katılabilir ve sıraya öğe ekleyebilir. Alıcı, son öğe oynatmayı tamamlayana veya gönderen oynatmayı durdurup oturumu sonlandırana ya da gönderen alıcıya yeni bir sıra yükleyene kadar sıra öğeleri için bir oturum sürdürür. Alıcı, varsayılan olarak sonlandırılan sıralar hakkında bilgi saklamaz. Sıradaki son öğe bittiğinde medya oturumu sona erer ve sıra kaybolur.

Medya sırası öğeleri oluşturma ve yükleme

Medya sırası öğesi, Cast çerçevesinde MediaQueueItem örneği olarak temsil edilir. Bir medya sırası öğesi oluşturduğunuzda, uyarlanabilir içerikle Medya Oynatıcı Kitaplığı'nı kullanıyorsanız önceden yükleme süresini ayarlayabilirsiniz. Böylece oynatıcı, sıradaki bir önceki öğenin oynatılması tamamlanmadan önce medya sırası öğesini arabelleğe almaya başlayabilir. Öğenin autoplay özelliğini true olarak ayarlamak, alıcının öğeyi otomatik olarak oynatmasına olanak tanır. Örneğin, medya sırası öğenizi oluşturmak için aşağıdaki gibi 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 öğesinin uygun queueLoad yöntemini kullanarak sıraya bir medya sırası öğesi dizisi yükleyin.

Medya sırası durum güncellemelerini alma

Alıcı, bir medya sırası öğesi yüklediğinde öğeye benzersiz kimlik atar. Bu kimlik, oturum süresince (ve sıranın ömrü boyunca) geçerli olur. Uygulamanız, sıranın durumunu öğrenerek hangi öğenin yüklendiğini (oynatılmıyor olabilir), yüklenmekte olduğunu veya önceden yüklendiğini belirleyebilir. MediaStatus sınıfı şu durum bilgilerini sağlar:

  • getPreloadedItemId() yöntemi: Sonraki öğe önceden yüklendiyse önceden yüklenen öğe kimliğini döndürür.
  • getLoadingItemId() yöntemi: Alıcıda yüklenmekte olan (ancak sırada etkin olmayan) öğenin kimliğini döndürür.
  • getCurrentItemId() yöntemi: Medya durumu değişikliği gerçekleştiği sırada sırada etkin olan (oynatılmıyor olabilir) öğenin kimliğini döndürür.
  • getQueueItems() (Desteği sonlandırıldı, bunun yerine MediaQueue kullanın) yöntemi: MediaQueueItem örneklerinin listesini değiştirilemez bir liste olarak döndürür.

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

  • getItemIds() yöntemi: Tüm öğe kimliklerinin listesini sırayla döndürür.
  • getItemAtIndex() yöntemi: Belirli bir dizindeki önbelleğe alınmış öğeyi döndürür. Öğe önbelleğe alınmamışsa MediaQueue, null değerini döndürür ve öğeyi getirmeyi planlar. Öğe getirildiğinde MediaQueue.Callback#itemsUpdatedAtIndexes() çağrılır ve getItemAtIndex() aynı kimlikle tekrar çağrıldığında öğe döndürülür.
  • fetchMoteItemsRelativeToIndex(), kullanıcı sıra kullanıcı arayüzünü en üste veya en alta kaydırdığında ve uygulamanız buluttan daha fazla öğe getirmek istediğinde kullanılır.

Uygulamanızı sıranın ve sıradaki öğelerin durumu 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 öğelerini uygulayarak sıradaki değişiklikleri dinleyebilir.

Ayrıca Cast SDK'sı, sıraya alma için kullanıcı arayüzü oluşturmak üzere 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

Sıradaki öğeler üzerinde işlem yapmak için RemoteMediaClient sınıfının sıra yöntemlerini kullanın. Bunlar, yeni bir sıraya bir dizi öğe yüklemenize, mevcut bir sıraya öğe eklemenize, sıradaki öğelerin özelliklerini güncellemenize, bir öğenin sırada ileri veya geri atlamasını sağlamanıza, sıranın özelliklerini ayarlamanıza (örneğin, bir sonraki öğeyi seçen repeatMode algoritmasını değiştirmenize), sıradaki öğeleri kaldırmanıza ve sıradaki öğeleri yeniden sıralamanıza olanak tanır.