เฟรมเวิร์ก Cast มีคลาสการจัดคิวที่รองรับการสร้างรายการ
ของ MediaQueueItem
อินสแตนซ์ ซึ่งสร้างจาก MediaInfo อินสแตนซ์ เช่น สตรีมวิดีโอหรือเสียง
เพื่อเล่นตามลำดับในเครื่องรับ คุณสามารถแก้ไข จัดลำดับใหม่ อัปเดต และอื่นๆ กับคิวรายการเนื้อหานี้ได้
Receiver SDK จะดูแลคิวและตอบสนองต่อการดำเนินการในคิวตราบใดที่คิวมีรายการที่ใช้งานอยู่ (กำลังเล่นหรือหยุดชั่วคราว) อย่างน้อย 1 รายการ ผู้ส่งสามารถเข้าร่วมเซสชันและเพิ่มรายการลงในคิวได้ เครื่องรับจะดูแลเซสชันสำหรับรายการในคิวจนกว่ารายการสุดท้ายจะเล่นจบหรือผู้ส่งหยุดเล่นและสิ้นสุดเซสชัน หรือจนกว่าผู้ส่งจะโหลดคิวใหม่ในเครื่องรับ โดยค่าเริ่มต้น เครื่องรับจะไม่เก็บข้อมูลเกี่ยวกับคิวที่สิ้นสุดแล้ว เมื่อรายการสุดท้ายในคิวเล่นจบ เซสชันสื่อจะสิ้นสุดลงและคิวจะหายไป
สร้างและโหลดรายการในคิวสื่อ
รายการในคิวสื่อจะแสดงในเฟรมเวิร์ก Cast เป็น
MediaQueueItem
อินสแตนซ์
เมื่อสร้างรายการในคิวสื่อ หากคุณใช้ไลบรารี มีเดียเพลเยอร์กับเนื้อหาแบบปรับได้ คุณสามารถตั้ง เวลาโหลดล่วงหน้าเพื่อให้เพลเยอร์เริ่มบัฟเฟอร์รายการในคิวสื่อก่อนที่ รายการที่อยู่ข้างหน้าในคิวจะเล่นจบ การตั้งค่าแอตทริบิวต์การเล่นอัตโนมัติของรายการเป็น "จริง" จะช่วยให้เครื่องรับเล่นรายการนั้นโดยอัตโนมัติ ตัวอย่างเช่น คุณสามารถใช้รูปแบบ Builder เพื่อสร้างรายการในคิวสื่อได้ดังนี้
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
รับข้อมูลอัปเดตสถานะคิวสื่อ
เมื่อเครื่องรับโหลดรายการในคิวสื่อ เครื่องรับจะกำหนดรหัสที่ไม่ซ้ำกันให้กับรายการ ซึ่งจะคงอยู่ตลอดระยะเวลาของเซสชัน (และอายุการใช้งานของคิว) แอปของคุณสามารถทราบสถานะของคิวได้ว่ารายการใดกำลังโหลด (อาจไม่ได้เล่น) กำลังโหลด หรือโหลดล่วงหน้า คลาส
MediaStatus
ให้ข้อมูลสถานะนี้
getPreloadedItemId()เมธอด - หากโหลดรายการถัดไปล่วงหน้าแล้ว เมธอดนี้จะแสดงรหัสสินค้าที่โหลดล่วงหน้าgetLoadingItemId()เมธอด - แสดงรหัสสินค้าของรายการที่กำลังโหลด (แต่ไม่ได้ ใช้งานอยู่ในคิว) ในเครื่องรับgetCurrentItemId()เมธอด - แสดงรหัสรายการของรายการที่ใช้งานอยู่ในคิว (อาจไม่ได้เล่น) ในขณะที่สถานะสื่อมีการเปลี่ยนแปลงgetQueueItems()(เลิกใช้งานแล้ว ให้ใช้MediaQueueแทน) เมธอด - แสดงรายการอินสแตนซ์MediaQueueItemเป็นรายการที่แก้ไขไม่ได้
นอกจากนี้ แอปของคุณยังรับรายการรายการได้โดยใช้
MediaQueue
คลาส คลาสนี้เป็นโมเดลข้อมูลแบบกระจัดกระจายของคิวสื่อ โดยจะเก็บรายการรหัสรายการในคิว ซึ่งจะซิงค์กับเครื่องรับโดยอัตโนมัติ
MediaQueue จะไม่เก็บ
MediaQueueItem
ทั้งหมดไว้เนื่องจากจะใช้หน่วยความจำมากเกินไปเมื่อคิวยาวมาก แต่จะดึงข้อมูลรายการตามความต้องการและเก็บ LruCache ของ
รายการที่เข้าถึงล่าสุดไว้ คุณสามารถใช้วิธีการต่อไปนี้เพื่อเข้าถึงคิวสื่อ
getItemIds()เมธอด - แสดงรายการรหัสรายการทั้งหมดตามลำดับgetItemAtIndex()เมธอด - แสดงรายการที่แคชไว้ที่ดัชนีที่ระบุ หากรายการไม่ได้แคชไว้MediaQueueจะแสดงnullและกำหนดเวลาที่จะดึงข้อมูลรายการ เมื่อดึงข้อมูลรายการแล้ว ระบบจะเรียกMediaQueue.Callback#itemsUpdatedAtIndexes()และการเรียกgetItemAtIndex()ด้วยรหัสเดิมอีกครั้งจะแสดงรายการfetchMoteItemsRelativeToIndex()จะใช้เมื่อผู้ใช้เลื่อน UI ของคิวไปที่ด้านบนหรือด้านล่าง และแอปของคุณต้องการดึงข้อมูลรายการเพิ่มเติมจากระบบคลาวด์
ใช้วิธีการเหล่านี้ร่วมกับวิธีการอื่นๆ ของสถานะสื่อเพื่อแจ้งให้แอปของคุณทราบเกี่ยวกับสถานะของคิวและรายการในคิว นอกจากการอัปเดตสถานะสื่อจากเครื่องรับแล้ว แอปของคุณยังสามารถรับฟังการเปลี่ยนแปลงในคิวได้โดยใช้
RemoteMediaClient.Callback
และ
MediaQueue.Callback
นอกจากนี้ Cast SDK ยังมีคลาสยูทิลิตี 2 คลาสเพื่อสร้าง UI สำหรับการจัดคิว
MediaQueueRecyclerViewAdapter, สำหรับการสำรองข้อมูลของRecyclerViewMediaQueueListAdapter, สำหรับการสำรองข้อมูลของListAdapter.
ตัวอย่างเช่น หากต้องการสร้าง RecyclerView โดยใช้ MediaQueueRecyclerViewAdapter ให้ทำดังนี้
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 ที่เลือกรายการถัดไป) นำรายการออกจากคิว และจัดลำดับรายการในคิวใหม่