อยู่ในคิว

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

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

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

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

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() 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 สำหรับการจัดคิวด้วย

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