Cast 프레임워크는 MediaQueueItem
인스턴스 목록 생성을 지원하는 큐 클래스를 제공합니다. 이 목록은 동영상 또는 오디오 스트림과 같은 MediaInfo
인스턴스에서 빌드하여 수신기에서 순차적으로 재생할 수 있습니다. 이 콘텐츠 항목 대기열은 수정, 재정렬, 업데이트 등의 작업이 가능합니다.
대기열에 현재 활성 항목 (재생 중 또는 일시중지됨)이 하나 이상 있는 한 수신기 SDK는 대기열을 유지하고 대기열의 작업에 응답합니다. 발신자는 세션에 참여하고 항목을 대기열에 추가할 수 있습니다. 수신자는 마지막 항목이 재생을 완료하거나, 발신자가 재생을 중지하고 세션을 종료할 때까지 또는 발신자가 수신자에 새 대기열을 로드할 때까지 대기열 항목의 세션을 유지합니다. 수신자는 기본적으로 종료된 큐에 대한 어떠한 정보도 유지하지 않습니다. 대기열의 마지막 항목이 완료되면 미디어 세션이 종료되고 대기열이 사라집니다.
미디어 대기열 항목 만들기 및 로드
미디어 큐 항목은 Cast 프레임워크에서 MediaQueueItem
인스턴스로 표시됩니다.
적응형 콘텐츠와 함께 미디어 플레이어 라이브러리를 사용 중인 경우 미디어 대기열 항목을 만들 때 미리 로드 시간을 설정하여 플레이어가 대기열에서 앞서 있는 항목의 재생이 완료되기 전에 미디어 대기열 항목의 버퍼링을 시작할 수 있도록 할 수 있습니다. 항목의 자동재생 속성을 true로 설정하면 수신자가 항목을 자동으로 재생할 수 있습니다. 예를 들어 다음과 같이 빌더 패턴을 사용하여 미디어 대기열 항목을 만들 수 있습니다.
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()
메서드 - 지정된 색인에서 캐시된 항목을 반환합니다. 항목이 캐시되지 않으면MediaQueue
는null
를 반환하고 항목을 가져오도록 예약합니다. 항목을 가져오면MediaQueue.Callback#itemsUpdatedAtIndexes()
가 호출되고 동일한 ID로getItemAtIndex()
를 다시 호출하면 항목이 반환됩니다.fetchMoteItemsRelativeToIndex()
는 사용자가 큐 UI를 상단이나 하단으로 스크롤할 때 앱이 클라우드에서 더 많은 항목을 가져오려고 할 때 사용됩니다.
이러한 메서드를 다른 미디어 상태 메서드와 함께 사용하여 큐의 상태와 큐의 항목을 앱에 알립니다. 수신기의 미디어 상태 업데이트 외에도 앱은 RemoteMediaClient.Callback
및 MediaQueue.Callback
를 구현하여 큐의 변경사항을 수신 대기할 수 있습니다.
또한 Cast SDK는 대기열에 추가할 UI를 만드는 두 가지 유틸리티 클래스를 제공합니다.
MediaQueueRecyclerViewAdapter
:RecyclerView
의 데이터를 지원합니다.MediaQueueListAdapter
:ListAdapter
의 데이터를 지원합니다.
예를 들어 MediaQueueRecyclerViewAdapter
를 사용하여 RecyclerView
를 만들려면 다음을 실행합니다.
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
알고리즘 변경), 큐에서 항목을 삭제하고 큐의 항목을 재정렬할 수 있습니다.