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();

RemoteMediaClient의 적절한 queueLoad 메서드를 사용하여 대기열에 미디어 대기열 항목의 배열을 로드합니다.

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

수신기는 미디어 큐 항목을 로드할 때 세션 및 큐의 수명 동안 지속되는 고유 ID를 항목에 할당합니다. 앱은 현재 로드된 항목(재생 중이지 않을 수 있음), 로드 중 또는 미리 로드된 항목과 관련하여 큐의 상태를 알 수 있습니다. MediaStatus 클래스는 다음 상태 정보를 제공합니다.

  • getPreloadedItemId() 메서드 - 다음 항목이 미리 로드되면 미리 로드된 항목 ID를 반환합니다.
  • getLoadingItemId() 메서드: 수신자에서 현재 로드 중이지만 큐에서는 활성 상태가 아닌 항목의 항목 ID를 반환합니다.
  • getCurrentItemId() 메서드: 미디어 상태 변경이 발생했을 때 대기열에서 활성 상태였던 항목 (재생 중이지 않을 수 있음)의 항목 ID를 반환합니다.
  • getQueueItems()(지원 중단됨, 대신 MediaQueue 사용) 메서드 - MediaQueueItem 인스턴스 목록을 수정 불가능한 목록으로 반환합니다.

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

  • getItemIds() 메서드 - 모든 항목 ID 목록을 순서대로 반환합니다.
  • getItemAtIndex() 메서드 - 지정된 색인의 캐시된 항목을 반환합니다. 항목이 캐시되지 않으면 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 알고리즘 변경), 큐에서 항목을 삭제하고, 큐의 항목 순서를 변경할 수 있습니다.