전송의 현재 재생목록 모델은 MediaSession
의 현재 재생목록 모델과 다릅니다.
Cast Connect 라이브러리는 MediaSession
에서 제공하는 큐 읽기를 지원하지 않습니다.
대기열 로드 및 대기열 정보 설정 처리
대기열 로드는 인텐트로 활동을 시작하는 방식으로 단일 항목을 로드하는 것과 동일한 방식으로 실행됩니다. Google 클라이언트 라이브러리를 사용하여 인텐트를 MediaLoadRequestData
로 파싱해야 합니다.
MediaQueueData
필드에는 로드할 큐 정보가 포함됩니다.
fun handleCastLoad(requestData: MediaLoadRequestData?) { if (requestData.getQueueData()) { // If MediaQueueData is specified, this is a queue load request. myPlayer.load( requestData.getQueueData().getItems().get(0)) // Set media status. castReceiverContext.getMediaManager() .setDataFromLoad(requestData) // This clears all status overrides. // The queue information is updated with // the MediaQueueData in the request. ... mediaSession.setPlaybackState(...) } }
private void handleCastLoad(MediaLoadRequestData requestData) { if (requestData.getQueueData()) { // If MediaQueueData is specified, this is a queue load request. myPlayer.load( requestData.getQueueData().getItems().get(0)); // Set media status. castReceiverContext.getMediaManager() .setDataFromLoad(requestData) // This clears all status overrides. // The queue information is updated with // the MediaQueueData in the request. ...; mediaSession.setPlaybackState(...); } }
현재 재생목록 변경
큐에 변경사항이 있으면 (예: queueInsert()
에서) MediaQueueManager
를 사용하여 큐를 업데이트할 수 있습니다. 새 대기열 항목을 만드는 경우 빌더에서 MediaQueueManager.autoGenerateItemId()
를 사용하여 항목 ID를 생성하는 setItemId()
를 호출하여 항목 ID를 설정해야 합니다. setDataFromLoad()
를 통해 로드된 대기열의 항목에는 이미 항목 ID가 설정되어 있습니다.
val mediaManager: MediaManager = castReceiverContext.getMediaManager() val mediaQueueManager = mediaManager.getMediaQueueManager() mediaQueueManager.getQueueItems().add( /* position= */index, mediaQueueItem) mediaManager.broadcastMediaStatus()
MediaManager mediaManager = castReceiverContext.getMediaManager(); MediaQueueManager mediaQueueManager = mediaManager.getMediaQueueManager(); mediaQueueManager.getQueueItems().add(/* position= */ index, mediaQueueItem); mediaManager.broadcastMediaStatus();
Android TV 앱은 onQueueUpdate()
콜백도 처리하여 현재 재생목록 항목으로 이동하고 다음/이전 건너뛰기를 지원합니다.
class MyMediaCommandCallback : MediaCommandCallback() { override fun onQueueUpdate( queueUpdateRequestData: QueueUpdateRequestData ): Task{ ... var newItemId = MediaQueueItem.INVALID_ITEM_ID if (queueUpdateRequestData.getJump() != null) { newItemId = myGetRelativeItemId(queueUpdateRequestData.getJump()) } else if (queueUpdateRequestData.getCurrentItemId() != null) { newItemId = queueUpdateRequestData.getCurrentItemId() } if (newItemId != MediaQueueItem.INVALID_ITEM_ID) { castReceiverContext.getMediaManager().getMediaQueueManager() .setCurrentItemId(newItemId) castReceiverContext.getMediaManager().broadcastMediaStatus() } } } val mediaManager = CastReceiverContext.getInstance().getMediaQueueManager() mediaManager.setMediaCommandCallback(MyMediaCommandCallback())
public class MyMediaCommandCallback extends MediaCommandCallback { @Override public TaskonQueueUpdate( QueueUpdateRequestData queueUpdateRequestData) { ... int newItemId = MediaQueueItem.INVALID_ITEM_ID; if (queueUpdateRequestData.getJump() != null) { newItemId = myGetRelativeItemId(queueUpdateRequestData.getJump()); } else if (queueUpdateRequestData.getCurrentItemId() != null) { newItemId = queueUpdateRequestData.getCurrentItemId(); } if (newItemId != MediaQueueItem.INVALID_ITEM_ID) { castReceiverContext.getMediaManager().getMediaQueueManager() .setCurrentItemId(newItemId); castReceiverContext.getMediaManager().broadcastMediaStatus(); } } MediaManager mediaManager = CastReceiverContext.getInstance().getMediaManager(); mediaManager.setMediaCommandCallback(new MyMediaCommandCallback());
대기열 관련 전송 제어 처리
onSkipToNext()
, onSkipToPrevious()
, onSkipToQueueItem()
와 같은 대기열 관련 전송 제어 콜백을 구현하는 것도 좋습니다.
class MyMediaSessionCallback : MediaSessionCompat.Callback() { override fun onSkipToNext() { // Skip to next item in queue ... } override fun onSkipToPrevious() { // Skip to previous item in queue ... } override fun onSkipToQueueItem(pos: Long) { // Skip to specified queue item ... } ... } mediaSession.setCallback(MyMediaSessionCallback())
public class MyMediaSessionCallback extends MediaSessionCompat.Callback { @Override public void onSkipToNext() { // Skip to next item in queue ... } @Override public void onSkipToPrevious() { // Skip to previous item in queue ... } @Override public void onSkipToQueueItem (long pos) { // Skip to specified queue item ... } ... } mediaSession.setCallback(new MyMediaSessionCallback());