ใช้ API แบบเปลี่ยนเวลาในบริการอินพุตทีวีเพื่อให้ผู้ใช้หยุดชั่วคราว กรอกลับ และ รายการสดอย่างรวดเร็วในช่องที่ให้บริการของคุณ หากแอปรองรับ ผู้ใช้มีความยืดหยุ่นในการดูเนื้อหาของคุณ ดังนี้
- ผู้ใช้สามารถหยุดโปรแกรมไว้ชั่วคราวขณะจัดการกับการหยุดชะงักในระยะสั้นได้ ดังนั้น พวกเขาจึงไม่พลาดช่วงสำคัญ
- ผู้ใช้สามารถกรอไปข้างหน้าผ่านเนื้อหาที่เคยดูแล้วหรือเนื้อหาที่ดูแล้ว ไม่สนใจ
- ผู้ใช้สามารถกรอกลับและดูช่วงเวลาโปรดอีกครั้งในเนื้อหารายการได้
![](https://developer.android.google.cn/static/images/training/tv/tif/time-shift.png?authuser=7&hl=th)
รูปที่ 1 ตัวควบคุมการเล่นของ Android TV ที่ใช้สำหรับการเปลี่ยนเวลา
การบันทึกรายการย้อนหลังจะใช้กลุ่มข้อมูลโปรแกรมที่สั้น ชั่วคราว บันทึกไว้เพื่อ ใช้ความสามารถในการเล่นรายการสด ผู้ใช้เล่นรายการย้อนหลังไม่ได้ บันทึกนอกเซสชันการเล่นปัจจุบัน ซึ่งหมายความว่าจะใช้ การเปลี่ยนเวลาเพื่อหยุดรายการไว้ชั่วคราวเพื่อดูในวันถัดไป หรือหยุดรายการไว้ชั่วคราวเพื่อ แล้วกลับมาดูช่องอื่นในภายหลัง
ใช้ API การบันทึกทีวีหากต้องการ เพื่อให้ผู้ใช้ของคุณบันทึกเนื้อหารายการเพื่อรับชมนอกเหนือการเล่นปัจจุบันได้ เซสชัน
เพิ่มการสนับสนุนการเปลี่ยนเวลา
ในการเพิ่มการสนับสนุนแบบเลื่อนเวลาให้กับบริการอินพุตทีวี คุณจำเป็นต้องใช้
API ที่เปลี่ยนเวลา
ในชั้นเรียน TvInputService.Session
ของคุณ
จัดการการบันทึกและการเล่นการบันทึกแบบเปลี่ยนเวลาในแอปของคุณ และแจ้งเตือน
ระบบที่บริการอินพุตของคุณให้การสนับสนุนแบบเปลี่ยนเวลา
วิธีการ TvInputService.Session
ที่คุณใช้คือ
ดังต่อไปนี้
onTimeShiftGetCurrentPosition()
: ที่ระบบเรียกใช้เพื่อดูเหตุการณ์ปัจจุบัน ตำแหน่งการเล่นเป็นมิลลิวินาที ดูรายละเอียดเพิ่มเติมได้ที่ ส่วนติดตามเวลาการเล่นonTimeShiftGetStartPosition()
: ที่ระบบเรียกใช้เพื่อเริ่มต้นใช้งาน ตำแหน่งของการบันทึกการเปลี่ยนเวลาปัจจุบันในหน่วยมิลลิวินาที สำหรับรายละเอียดเพิ่มเติม ให้ดูส่วนติดตามเวลาการเล่นonTimeShiftPause()
: ซึ่งถูกเรียกเมื่อผู้ใช้หยุดเล่นชั่วคราวonTimeShiftResume()
: ซึ่งเรียกเมื่อผู้ใช้เล่นต่อonTimeShiftSeekTo(long)
: เมื่อระบบต้องการ ตำแหน่งเวลาใหม่ โดยปกติแล้ว ตำแหน่งใหม่จะอยู่ระหว่าง ตำแหน่งเริ่มต้นและตำแหน่งปัจจุบันonTimeShiftSetPlaybackParams(PlaybackParams)
: ระบบเรียก เพื่อระบุพารามิเตอร์การเล่น เช่น ความเร็วในการเล่น สำหรับเซสชันปัจจุบัน ดูรายละเอียดเพิ่มเติมได้ที่ ส่วนรองรับพารามิเตอร์การเล่น
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีแจ้งระบบว่าบริการอินพุตของคุณรองรับ การบันทึกรายการ แจ้งระบบเกี่ยวกับสถานะการเปลี่ยนเวลา
หากคุณใช้ TIF Companion Library เพื่อติดตั้งใช้งาน
TvInputService.Session
ชั้นเรียน คุณจะได้รับ
การนำการบันทึกรายการเอาไว้รับชมในภายหลังโดยใช้ ExoPlayer คุณใช้
การใช้งานหรือลบล้างเมธอด API ที่เปลี่ยนเวลา
BaseTvInputService.Session
และส่งข้อมูลของคุณเอง
การใช้งานของคุณ สําหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ TIF Companion Library โปรดดูสร้างบริการอินพุตทีวีโดยใช้
TIF Companion Library
บันทึกเนื้อหาเมื่อเริ่มเซสชัน
ผู้ใช้สามารถหยุดชั่วคราว กรอกลับ และกรอเนื้อหาไปข้างหน้าได้โดยเข้าถึงแอป ตัวควบคุมการเล่นสำหรับช่อง โดยกดเลือก ดูเนื้อหา จากนั้นไปยังตัวควบคุมการเล่นหรือ ตัวควบคุมการเล่นโดยเฉพาะบนอุปกรณ์ระยะไกล
เนื่องจากผู้ใช้สามารถ
สามารถใช้การเปลี่ยนเวลาได้ทุกเมื่อขณะรับชมเนื้อหารายการทีวี ทีวีของคุณ
บริการป้อนข้อมูลต้องเริ่มบันทึกเนื้อหาที่เปลี่ยนเวลาทันทีที่ผู้ใช้
ได้รับเพลงไปยังช่องใน
onTune()
การใช้งานของคุณ คุณยังต้อง
แจ้งระบบว่าคุณบันทึกได้ด้วยการโทร
notifyTimeShiftStatusChanged(int)
,
ตามที่อธิบายไว้ใน
แจ้งระบบเกี่ยวกับสถานะการเปลี่ยนเวลา
จัดการพื้นที่เก็บข้อมูลเนื้อหาที่บันทึก
บริการอินพุตทีวีของคุณมีหน้าที่จัดเก็บการบันทึกแบบเปลี่ยนเวลาใน
พื้นที่เก็บข้อมูลส่วนตัวของแอปและการเล่นเนื้อหาเมื่อระบบเรียก
วิธีการเปลี่ยนเวลา เช่น
onTimeShiftResume()
หากเนื้อหาของคุณจัดเก็บในระบบคลาวด์อยู่แล้วและแอปของคุณสามารถจัดการได้
การบันทึกแบบเลื่อนเวลาในระบบคลาวด์ คุณสามารถใช้พื้นที่เก็บข้อมูลระบบคลาวด์แทน
ของพื้นที่เก็บข้อมูลแอป
หากเนื้อหาของคุณใช้เนื้อหาที่ได้รับการคุ้มครอง บริการอินพุตทีวีของคุณจะเป็นผู้รับผิดชอบ การเข้ารหัสที่เหมาะสมของเนื้อหาที่บันทึกไว้และการถอดรหัสเนื้อหาระหว่าง การเล่น
เนื่องจากเนื้อหาวิดีโอที่บันทึกไว้อาจต้องใช้พื้นที่เก็บข้อมูลปริมาณมาก คุณจึงต้องดำเนินการ จัดการเนื้อหาที่บันทึกไว้ในระหว่างการเล่นเซสชันอย่างระมัดระวัง หากการเล่น เวลาของเซสชันเกินกว่าระยะเวลาที่คุณสามารถบันทึกและจัดเก็บได้ การบันทึกรายการแบบไทม์ชิฟท์ ปรับการบันทึกรายการย้อนหลังเพื่อคงรักษา บัฟเฟอร์ปัจจุบัน แต่อย่าลืมบันทึกเวลาปัจจุบัน เช่น หากผู้ใช้ เล่นเนื้อหาเป็นเวลา 31 นาทีและการบันทึกแบบเปลี่ยนเวลาสูงสุด ขนาด 30 นาที โปรดปรับการบันทึกและเวลาเริ่มต้น ตั้งแต่นาทีที่ 1 จนถึงนาทีที่ 31
หากบริการอินพุตทีวีของคุณไม่รองรับการเปลี่ยนเวลาเนื่องจากไม่มี คุณต้องแจ้งให้ระบบทราบ สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีแจ้งเตือน ระบบเกี่ยวกับข้อจำกัดการสนับสนุนแบบเปลี่ยนเวลา โปรดดู แจ้งระบบเกี่ยวกับสถานะการเปลี่ยนเวลา
เมื่อผู้ใช้เปลี่ยนไปใช้ช่องอื่นหรือสิ้นสุดการเล่น ให้ลบข้อมูลการเปลี่ยนเวลาที่บันทึกไว้
แจ้งระบบเกี่ยวกับสถานะการเปลี่ยนเวลา
หากบริการอินพุตทีวีของคุณรองรับการเปลี่ยนเวลา โปรดโทร
notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_AVAILABLE)
ใน
การใช้งาน
onTune()
เมื่อผู้ใช้ทำนอง
ลงในช่อง
เพื่อแจ้งระบบหากมีความสามารถในการเปลี่ยนแปลงเวลาในบริการป้อนข้อมูลของคุณ
เปลี่ยน, ใช้
notifyTimeShiftStatusChanged(int)
ตัวอย่างเช่น หากบริการอินพุตทีวีของคุณไม่สนับสนุนการเปลี่ยนเวลา
เนื่องจากข้อจำกัดด้านพื้นที่เก็บข้อมูลหรือเหตุผลอื่นๆ โปรดโทร
notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNAVAILABLE)
หากบริการอินพุตทีวีของคุณไม่รองรับการเปลี่ยนเวลาเลย โปรดโทร
notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNSUPPORTED)
เมื่อมีการสร้างเซสชันการเล่นขึ้น ระบบจะดำเนินการกับบริการป้อนข้อมูลที่
ไม่เคยโทร
notifyTimeShiftStatusChanged()
เป็นบริการป้อนข้อมูลที่ไม่สามารถ
การสนับสนุนการเปลี่ยนเวลา ซึ่งครอบคลุมถึงบริการป้อนข้อมูลที่ใช้ API ระดับ 22 และ
ก่อนหน้านี้
ติดตามเวลาในการเล่น
ตำแหน่งเริ่มต้นของการบันทึกแบบเปลี่ยนเวลาคือเวลาสัมบูรณ์แรกสุด
ตำแหน่งเป็นมิลลิวินาทีนับตั้งแต่ Epoch ที่ผู้ใช้สามารถค้นหาได้ นี่คือ
คือเวลาที่วิดีโอเริ่มเล่นหลังจาก
โทรหา onTune()
แต่เมื่อผู้ใช้รับชมเนื้อหาปริมาณมากเกินกว่า
ที่แอปของคุณสามารถบันทึกได้
คุณจะต้องเริ่มบันทึกเซกเมนต์ใหม่
เปลี่ยนเวลาและอัปเดตเวลาเริ่มต้นให้สอดคล้องกัน
ตำแหน่งปัจจุบันของการบันทึกแบบเปลี่ยนเวลาคือการเล่นในปัจจุบัน เป็นมิลลิวินาทีที่เริ่มนับมาตั้งแต่วันที่ 1 มกราคม ค.ศ. 1970 ตำแหน่งนี้จะเปลี่ยนแปลงอย่างต่อเนื่อง ระหว่างการเล่น โดยทั่วไปแล้ว คุณสามารถใช้เครื่องมือการเล่นเพื่อระบุ ดังที่ปรากฏในตัวอย่างต่อไปนี้
Kotlin
override fun onTimeShiftGetCurrentPosition(): Long = tvPlayer?.run { currentProgram?.let { program -> currentPosition + program.startTimeUtcMillis } } ?: TvInputManager.TIME_SHIFT_INVALID_TIME
Java
@Override public long onTimeShiftGetCurrentPosition() { if (getTvPlayer() != null && currentProgram != null) { return getTvPlayer().getCurrentPosition() + currentProgram.getStartTimeUtcMillis(); } return TvInputManager.TIME_SHIFT_INVALID_TIME; }
ตรวจสอบว่าเวลาเริ่มต้นที่คุณระบุเมื่อระบบเรียก
onTimeShiftGetStartPosition()
ไม่มากกว่าตำแหน่งเวลาปัจจุบันที่คุณระบุ
onTimeShiftGetCurrentPosition()
ระบบจะใช้การเรียกเหล่านี้เพื่อ
อัปเดตระยะเวลาที่เปลี่ยนเวลาใน UI ตัวควบคุมการเล่น
รองรับพารามิเตอร์การเล่น
ระบบจะใช้พารามิเตอร์การเล่นเพื่อเปลี่ยนความเร็วในการเล่นในช่วงเปลี่ยนเวลา สำหรับ ตัวอย่างเช่น หากผู้ใช้ตัดสินใจที่จะกรอวิดีโอกลับที่เล่นอยู่ การเล่นใหม่ ระบบจะส่งพารามิเตอร์ไปยังแอปของคุณที่มีความเร็วในการเล่นเป็นลบ การเปลี่ยนเวลายังรองรับการเล่นหลายระดับ คือ 2 เท่าหรือ 3 เท่า สำหรับการกรอกลับหรือกรอไปข้างหน้า
ระบบจะเรียก
onTimeShiftSetPlaybackParams(PlaybackParams)
ที่มีออบเจ็กต์ PlaybackParams
ที่มี
สำหรับเซสชันปัจจุบัน ใช้ข้อมูลนี้เพื่อ
กำหนดค่าเครื่องมือการเล่นสื่ออย่างเหมาะสม
หากเครื่องมือการเล่นของคุณไม่รองรับพารามิเตอร์ จำลองลักษณะการทำงานที่คาดหวังไว้ให้ได้มากที่สุด ตัวอย่างเช่น หากการเล่นของคุณ เครื่องมือไม่รองรับความเร็ว 2 เท่า โปรดใช้การดำเนินการค้นหาซ้ำๆ ในการเล่น เพื่อเพิ่มความเร็วในการเล่นเป็น 2 เท่าโดยประมาณ
หลังจากตั้งค่าพารามิเตอร์แล้ว อย่าเปลี่ยนการตั้งค่า เว้นแต่ผู้ใช้ ออกคำสั่งการเล่นที่ต้องใช้พารามิเตอร์หรือสวิตช์อื่น กับช่องใหม่