Cast 프레임워크는 동영상 또는 오디오
스트림과 같은 MediaInfo 인스턴스에서 빌드할 수 있는 MediaQueueItem
인스턴스 목록 생성을 지원하는 대기열 클래스를 제공하여 수신기에서 순차적으로 재생합니다. 이 콘텐츠 항목 대기열은 수정, 재정렬, 업데이트 등이 가능합니다.
수신기 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 알고리즘 변경), 대기열에서 항목을 삭제하고, 대기열의 항목을 재정렬할 수 있습니다.