อยู่ในคิว

เฟรมเวิร์ก Cast มีคลาสการจัดคิวที่รองรับการสร้างรายการ ของ MediaQueueItem อินสแตนซ์ ซึ่งสร้างจาก MediaInfo อินสแตนซ์ เช่น สตรีมวิดีโอหรือเสียง เพื่อเล่นตามลำดับในเครื่องรับ คุณสามารถแก้ไข จัดลำดับใหม่ อัปเดต และอื่นๆ กับคิวรายการเนื้อหานี้ได้

Receiver SDK จะดูแลคิวและตอบสนองต่อการดำเนินการในคิวตราบใดที่คิวมีรายการที่ใช้งานอยู่ (กำลังเล่นหรือหยุดชั่วคราว) อย่างน้อย 1 รายการ ผู้ส่งสามารถเข้าร่วมเซสชันและเพิ่มรายการลงในคิวได้ เครื่องรับจะดูแลเซสชันสำหรับรายการในคิวจนกว่ารายการสุดท้ายจะเล่นจบหรือผู้ส่งหยุดเล่นและสิ้นสุดเซสชัน หรือจนกว่าผู้ส่งจะโหลดคิวใหม่ในเครื่องรับ โดยค่าเริ่มต้น เครื่องรับจะไม่เก็บข้อมูลเกี่ยวกับคิวที่สิ้นสุดแล้ว เมื่อรายการสุดท้ายในคิวเล่นจบ เซสชันสื่อจะสิ้นสุดลงและคิวจะหายไป

สร้างและโหลดรายการในคิวสื่อ

รายการในคิวสื่อจะแสดงในเฟรมเวิร์ก Cast เป็น MediaQueueItem อินสแตนซ์ เมื่อสร้างรายการในคิวสื่อ หากคุณใช้ไลบรารี มีเดียเพลเยอร์กับเนื้อหาแบบปรับได้ คุณสามารถตั้ง เวลาโหลดล่วงหน้าเพื่อให้เพลเยอร์เริ่มบัฟเฟอร์รายการในคิวสื่อก่อนที่ รายการที่อยู่ข้างหน้าในคิวจะเล่นจบ การตั้งค่าแอตทริบิวต์การเล่นอัตโนมัติของรายการเป็น "จริง" จะช่วยให้เครื่องรับเล่นรายการนั้นโดยอัตโนมัติ ตัวอย่างเช่น คุณสามารถใช้รูปแบบ Builder เพื่อสร้างรายการในคิวสื่อได้ดังนี้

Kotlin
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo)
    .setAutoplay(true)
    .setPreloadTime(20.0)
    .build()
Java
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 สำหรับการจัดคิว

ตัวอย่างเช่น หากต้องการสร้าง RecyclerView โดยใช้ MediaQueueRecyclerViewAdapter ให้ทำดังนี้

Kotlin
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
}
Java
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 ที่เลือกรายการถัดไป) นำรายการออกจากคิว และจัดลำดับรายการในคิวใหม่