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