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:
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20.0) .build()
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 yerineMediaQueuekullanı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ışsaMediaQueue,nulldeğerini döndürür ve öğeyi getirmeyi planlar. Öğe getirildiğindeMediaQueue.Callback#itemsUpdatedAtIndexes()çağrılır vegetItemAtIndex()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.
MediaQueueRecyclerViewAdapter,RecyclerViewverilerini yedeklediğiniz içinMediaQueueListAdapter,ListAdapterverilerini yedeklediğiniz için teşekkür ederiz.
Örneğin, MediaQueueRecyclerViewAdapter kullanarak RecyclerView oluşturmak için:
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 }
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.