ใช้ API การเลื่อนเวลาในบริการอินพุตทีวีเพื่อให้ผู้ใช้หยุดชั่วคราว กรอกลับ และกรอไปข้างหน้าโปรแกรมที่กำลังออกอากาศสดในช่องบริการของคุณได้ หากแอปของคุณรองรับการเลื่อนเวลา ผู้ใช้จะมีความยืดหยุ่นมากขึ้นในการดูเนื้อหาของคุณ ดังนี้
- ผู้ใช้สามารถหยุดโปรแกรมชั่วคราวขณะจัดการกับการหยุดชะงักระยะสั้น เพื่อไม่ให้พลาดช่วงเวลาสำคัญ
- ผู้ใช้สามารถกรอไปข้างหน้าเนื้อหาที่เคยดูแล้วหรือเนื้อหาที่ ไม่สนใจ
- ผู้ใช้สามารถกรอกลับและดูช่วงเวลาที่ชื่นชอบในเนื้อหาโปรแกรมอีกครั้ง
การเลื่อนเวลาใช้ส่วนย่อยของข้อมูลโปรแกรมที่บันทึกไว้ชั่วคราวในระยะสั้นเพื่อใช้ความสามารถในการเล่นโปรแกรมที่กำลังออกอากาศสด ผู้ใช้ไม่สามารถเล่นไฟล์บันทึกการเลื่อนเวลาเหล่านี้ภายนอกเซสชันการเล่นปัจจุบัน ซึ่งหมายความว่าผู้ใช้ไม่สามารถใช้การเลื่อนเวลาเพื่อหยุดโปรแกรมชั่วคราวเพื่อดูในวันถัดไป หรือหยุดโปรแกรมชั่วคราวเพื่อดูในภายหลังขณะเปลี่ยนไปใช้ช่องอื่น
ใช้ 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()
อย่างไรก็ตาม เมื่อผู้ใช้ดูเนื้อหาจำนวนมากเกินกว่าที่แอปของคุณจะบันทึกได้ คุณต้องเริ่มบันทึกส่วนใหม่สำหรับการเลื่อนเวลาและอัปเดตเวลาเริ่มต้นตามความเหมาะสม
ตำแหน่งปัจจุบันของไฟล์บันทึกการเลื่อนเวลาคือตำแหน่งการเล่นปัจจุบันเป็นมิลลิวินาทีตั้งแต่ Epoch ตำแหน่งนี้จะเปลี่ยนแปลงอย่างต่อเนื่องระหว่างการเล่น โดยปกติแล้วคุณสามารถใช้เครื่องมือการเล่นเพื่อกำหนดค่านี้ได้ ดังที่แสดงในตัวอย่างต่อไปนี้
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 เท่า
หลังจากตั้งค่าพารามิเตอร์แล้ว อย่าเปลี่ยนการตั้งค่าเว้นแต่ผู้ใช้จะออกคำสั่งการเล่นที่ต้องใช้พารามิเตอร์อื่นหรือเปลี่ยนไปใช้ช่องใหม่