Cast 프레임워크는 목록 생성을 지원하는 큐 클래스를 제공합니다. /MediaQueueItem 인스턴스(동영상 또는 오디오 등 MediaInfo 인스턴스에서 빌드할 수 있음) 수신기에서 순차적으로 재생됩니다. 이 콘텐츠 항목 대기열 수정, 재정렬, 업데이트 등을 할 수 있습니다.

수신기 SDK는 큐를 유지하고 있는 경우 현재 재생목록에 현재 하나 이상의 항목 (재생 중 또는 일시중지됨). 발신자는 세션에 참여하고 항목을 대기열에 추가할 수 있습니다. 수신자 마지막 항목이 재생을 완료할 때까지 또는 발신자가 재생을 중지하고 세션을 종료하거나, 또는 발신자가 수신자에 새 큐를 로드합니다. 수신자는 기본적으로 종료된 큐에 대한 정보 대기열의 마지막 항목이 완료되면 미디어 세션이 종료되고 대기열이 사라집니다.

미디어 대기열 항목 만들기 및 로드

미디어 대기열 항목은 Cast 프레임워크에서 MediaQueueItem 인스턴스를 만들 수 있습니다 미디어 대기열 항목을 만들 때 미디어 플레이어 라이브러리를 사용하는 경우 미리 로드 시간을 사용하여 플레이어가 미디어 대기열 항목 버퍼링을 시작할 수 있도록 합니다. 재생이 완료될 때까지 기다릴 필요가 없습니다. 항목의 자동재생 설정 속성을 true로 설정하면 수신자가 자동으로 재생할 수 있습니다. 예를 들어 다음과 같이 빌더 패턴을 사용하여 미디어 대기열 항목을 만들 수 있습니다.

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

적절한 queueLoad RemoteMediaClient의 메서드입니다.

미디어 대기열 상태 업데이트 수신

수신자는 미디어 대기열 항목을 로드할 때 항목에 고유 ID를 할당합니다. 세션 시간 및 큐의 수명 동안 지속됩니다. 내 앱이 현재 로드된 항목의 관점에서 대기열의 상태를 알 수 있음 로드 중 또는 미리 로드되어 있지 않을 수 있습니다. 이 MediaStatus 클래스는 다음 상태 정보를 제공합니다.

  • getPreloadedItemId() 메서드 - 다음 항목이 미리 로드되면 미리 로드된 항목 ID를 반환합니다.
  • getLoadingItemId() 메서드 - 현재 로드 중이지만 광고가 로드되고 있지 않은 항목의 항목 ID를 반환합니다. 수신될 수 있습니다.
  • getCurrentItemId() method - 대기열에서 활성 상태였던 항목 ID를 반환합니다. 표시되지 않을 수 있음)을 표시합니다.
  • getQueueItems() (지원 중단, 대신 MediaQueue 사용) 메서드: 수정할 수 없는 목록으로 표시된 MediaQueueItem 인스턴스

또한 앱은 다음을 사용하여 항목 목록을 가져올 수 있습니다. MediaQueue 클래스에 대해 자세히 알아보세요. 클래스는 미디어 대기열의 희소 데이터 모델입니다. Kubernetes는 항목 ID에 있어야 하며 이는 수신자와 자동으로 동기화됩니다. MediaQueueMediaQueueItem 큐가 매우 길면 너무 많은 메모리가 소비되기 때문입니다. 대신 요청 시 항목을 가져오고 LruCache를 유지함 최근에 액세스한 항목 다음 메서드를 사용하여 미디어 대기열에 액세스할 수 있습니다.

  • getItemIds() method - 모든 항목 ID의 목록을 순서대로 반환합니다.
  • getItemAtIndex() method - 지정된 색인에서 캐시된 항목을 반환합니다. 항목이 캐시되지 않은 경우 MediaQueuenull를 반환하고 항목을 가져오도록 예약합니다. 아이템이 가져올 수 있으며 MediaQueue.Callback#itemsUpdatedAtIndexes() 가 호출되고 동일한 ID로 getItemAtIndex()를 다시 호출하면 반품할 수 있습니다.
  • fetchMoteItemsRelativeToIndex()는 사용자가 대기열 UI를 상단 또는 하단으로 스크롤할 때 사용됩니다. 앱이 클라우드에서 더 많은 항목을 가져오려고 합니다.

이러한 메서드를 다른 미디어 상태 메서드와 함께 사용하여 앱에 대기열 상태 및 항목의 상태를 알립니다. 또한 미디어 상태 업데이트를 수신하면 앱은 인코더-디코더 아키텍처를 RemoteMediaClient.CallbackMediaQueue.Callback

또한 Cast SDK는 대기열에 추가할 UI를 만드는 두 가지 유틸리티 클래스를 제공합니다.

예를 들어 MediaQueueRecyclerViewAdapter를 사용하여 RecyclerView를 만들려면 다음을 실행합니다.

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
}
자바
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);
}

현재 재생목록 수정

대기열의 항목에 대해 작업하려면 RemoteMediaClient 클래스에 대해 자세히 알아보세요. 이렇게 하면 항목의 배열을 새 대기열에 로드하고 항목을 기존 대기열 만들기, 대기열의 항목 속성 업데이트, 항목 만들기 대기열에서 앞으로 또는 뒤로 건너뛰기, 대기열 자체의 속성 설정 예를 들어 다음 항목을 선택하는 repeatMode 알고리즘을 변경합니다. 큐에서 항목을 삭제하고 큐의 항목을 재정렬하는 것입니다.