เฟรมเวิร์กอินพุต Android TV (TIF) ช่วยให้การส่งเนื้อหาสดไปยัง Android TV ง่ายขึ้น Android TIF มี API มาตรฐานสำหรับผู้ผลิตในการสร้างข้อบังคับของอินพุตสำหรับควบคุม Android TV และเปิดใช้การค้นหาและคำแนะนำรายการทีวีสดผ่านข้อมูลเมตาที่เผยแพร่โดยอินพุตทีวี
เฟรมเวิร์กนี้ไม่ได้มีจุดประสงค์เพื่อนำมาตรฐานทีวีหรือข้อกำหนดระดับภูมิภาคมาใช้ แต่ช่วยให้ผู้ผลิตอุปกรณ์ปฏิบัติตามมาตรฐานการออกอากาศทีวีดิจิทัลระดับภูมิภาคได้ง่ายขึ้นโดยไม่ต้องติดตั้งใช้งานใหม่ เอกสารประกอบในส่วนนี้อาจเป็นประโยชน์ต่อนักพัฒนาแอปบุคคลที่สามที่ต้องการสร้างอินพุตทีวีที่กำหนดเองด้วย
คอมโพเนนต์
การใช้งานเฟรมเวิร์กอินพุต Android TV ประกอบด้วยเครื่องมือจัดการอินพุตทีวี TIF ใช้งานได้กับแอปทีวี ซึ่งเป็นแอประบบที่ไม่สามารถแทนที่ด้วยแอปของบุคคลที่สามได้ เพื่อเข้าถึงช่องในตัวและช่องจากเครื่องรับสัญญาณ IP แอปทีวีจะสื่อสารกับโมดูลอินพุตทีวีที่ผู้ผลิตอุปกรณ์หรือบุคคลอื่นจัดหาให้ผ่านตัวจัดการอินพุตทีวี
เฟรมเวิร์กอินพุตทีวีประกอบด้วยสิ่งต่อไปนี้
- ผู้ให้บริการทีวี (
com.android.providers.tv.TvProvider
): ฐานข้อมูลของช่อง รายการ และสิทธิ์ที่เกี่ยวข้อง - แอปทีวี (
com.android.tv.TvActivity
): แอปที่จัดการการโต้ตอบของผู้ใช้ - ตัวจัดการอินพุตทีวี (
android.media.tv.TvInputManager
): อนุญาตให้อินพุตทีวีสื่อสารกับแอปทีวี - อินพุตทีวี: แอปที่แสดงตัวรับสัญญาณและพอร์ตอินพุตจริงหรือเสมือน
- HAL ของอินพุตทีวี (
tv_input
โมดูล): การกําหนดฮาร์ดแวร์ที่อนุญาตให้อินพุตทีวีของระบบเข้าถึงฮาร์ดแวร์เฉพาะของทีวีเมื่อติดตั้งใช้งาน - การควบคุมโดยผู้ปกครอง: เทคโนโลยีที่อนุญาตให้บล็อกช่องและรายการ
- HDMI-CEC: เทคโนโลยีที่ช่วยให้ควบคุมอุปกรณ์ต่างๆ ผ่าน HDMI จากระยะไกลได้
- เฟรมเวิร์กตัวรับสัญญาณ: เฟรมเวิร์กสำหรับอินพุตทีวีในตัว
- MediaCas: เฟรมเวิร์กสำหรับการเข้าถึงแบบมีเงื่อนไข
- ตัวจัดการทรัพยากรตัวรับสัญญาณ: บริการสำหรับจัดการทรัพยากรฮาร์ดแวร์สำหรับอินพุตทีวี, MediaCas และอินพุตตัวรับสัญญาณในตัว
คอมโพเนนต์เหล่านี้มีรายละเอียดอยู่ด้านล่าง ดูภาพรายละเอียดของสถาปัตยกรรมเฟรมเวิร์กอินพุต Android TV ได้ในแผนภาพต่อไปนี้
น้ำไหล
วิธีการทํางานของสถาปัตยกรรมมีดังนี้
- ผู้ใช้จะเห็นและโต้ตอบกับแอปทีวี ซึ่งเป็นแอประบบที่แอปของบุคคลที่สามไม่สามารถแทนที่
- แอปทีวีจะแสดงเนื้อหา AV จากอินพุตทีวี
- แอปทีวีไม่สามารถสื่อสารกับอินพุตทีวีโดยตรง เครื่องมือจัดการอินพุตทีวีจะระบุสถานะของอินพุตทีวีสำหรับแอปทีวี โปรดดูรายละเอียดเพิ่มเติมเกี่ยวกับข้อจำกัดเหล่านี้ที่เครื่องมือจัดการอินพุตทีวีด้านล่าง
สิทธิ์
- เฉพาะ
signatureOrSystem
อินพุตทีวีและแอปทีวีเท่านั้นที่มีสิทธิ์เข้าถึงฐานข้อมูลของผู้ให้บริการทีวีอย่างเต็มรูปแบบและสามารถรับ KeyEvent ได้ - เฉพาะอินพุตทีวีของระบบเท่านั้นที่เข้าถึง HAL ของอินพุตทีวีผ่านบริการตัวจัดการอินพุตทีวีได้ อินพุตทีวีจะมีการเข้าถึงแบบหนึ่งต่อหนึ่งผ่านเซสชันโปรแกรมจัดการอินพุตทีวี
- อินพุตทีวีของบุคคลที่สามมีสิทธิ์เข้าถึงฐานข้อมูลผู้ให้บริการทีวีแบบล็อกแพ็กเกจ และจะอ่าน/เขียนได้เฉพาะแถวแพ็กเกจที่ตรงกันเท่านั้น
- อินพุตทีวีของบุคคลที่สามอาจแสดงเนื้อหาของตนเองหรือเนื้อหาจากอินพุตทีวี Passthrough ของผู้ผลิตอุปกรณ์ เช่น HDMI1 แต่จะแสดงเนื้อหาจากอินพุตทีวีที่ไม่ใช่การส่งผ่านไม่ได้ เช่น กล่องรับสัญญาณในตัวหรือ IPTV
- สิทธิ์
TV_INPUT_HARDWARE
สําหรับแอปอินพุตทีวีฮาร์ดแวร์ จะส่งสัญญาณให้บริการจัดการอินพุตทีวีแจ้งบริการอินพุตทีวีเมื่อบูตเพื่อเรียกบริการจัดการอินพุตทีวีและเพิ่มอินพุตทีวี สิทธิ์นี้ช่วยให้แอปอินพุตทีวีแบบฮาร์ดแวร์รองรับอินพุตทีวีหลายรายการต่อบริการอินพุตทีวี รวมถึงสามารถเพิ่มและนำอินพุตทีวีที่รองรับออกแบบไดนามิก
ผู้ให้บริการทีวี
ฐานข้อมูลของผู้ให้บริการทีวีจะจัดเก็บช่องและรายการจากอินพุตทีวี นอกจากนี้ ผู้ให้บริการทีวียังเผยแพร่และจัดการสิทธิ์ที่เกี่ยวข้องเพื่อให้ TV Input เห็นเฉพาะระเบียนของตนเอง ตัวอย่างเช่น อินพุตทีวีหนึ่งๆ จะดูได้เฉพาะช่องและรายการที่อินพุตนั้นให้ไว้ และไม่ได้รับอนุญาตให้เข้าถึงช่องและรายการของอินพุตทีวีอื่นๆ
ผู้ให้บริการทีวีจะแมป "ประเภทการออกอากาศ" กับ "ประเภทตามหลักเกณฑ์" ภายใน อินพุตของทีวีมีหน้าที่ป้อนข้อมูล "ประเภทการออกอากาศ" ด้วยค่าในมาตรฐานการออกอากาศที่เกี่ยวข้อง และช่อง "ประเภท Canonical" จะมีการเติมประเภทที่เกี่ยวข้องที่ถูกต้องจาก android.provider.TvContract.Genres
โดยอัตโนมัติ เช่น สำหรับการออกอากาศแบบมาตรฐาน ATSC A/65 และรายการที่เป็นประเภท 0x25 (หมายถึง "กีฬา") อินพุตทีวีจะป้อนข้อมูล "ประเภทการออกอากาศ" ด้วยสตริง "กีฬา" และผู้ให้บริการทีวีจะป้อนข้อมูลในช่อง "ประเภท Canonical" ด้วยค่า android.provider.TvContract.Genres.SPORTS
ที่แมปไว้
ดูแผนภาพด้านล่างเพื่อดูมุมมองโดยละเอียดของผู้ให้บริการทีวี
มีเพียงแอปในพาร์ติชันระบบที่มีสิทธิ์เท่านั้นที่อ่านฐานข้อมูลผู้ให้บริการทีวีได้ทั้งหมด
อินพุตทีวีแบบ Passthrough จะไม่จัดเก็บช่องและรายการ
นอกจากช่องมาตรฐานและรายการแล้ว ฐานข้อมูลของผู้ให้บริการทีวียังมีฟิลด์ประเภท BLOB COLUMN_INTERNAL_PROVIDER_DATA
ในแต่ละตารางที่อินพุตทีวีอาจใช้เพื่อจัดเก็บข้อมูลตามต้องการ ข้อมูล BLOB ดังกล่าวอาจมีข้อมูลที่กําหนดเอง เช่น ความถี่ของจูนเนอร์ที่เชื่อมโยง และอาจระบุไว้ในบัฟเฟอร์โปรโตคอลหรือรูปแบบอื่น ช่องที่ค้นหาได้มีไว้เพื่อทำให้บางช่องไม่สามารถใช้งานในการค้นหาได้ (เช่น เพื่อให้เป็นไปตามข้อกำหนดเฉพาะของแต่ละประเทศสำหรับการปกป้องเนื้อหา)
ตัวอย่างช่องฐานข้อมูล
ผู้ให้บริการทีวีรองรับข้อมูลที่มีโครงสร้างในตารางช่อง (android.provider.TvContract.Channels
) และรายการ (android.provider.TvContract.Programs
) ตารางเหล่านี้ป้อนข้อมูลและเข้าถึงโดยอินพุตทีวีและแอประบบ เช่น แอป TV ตารางเหล่านี้มีช่อง 4 ประเภทดังนี้
- การแสดงผล: ช่องแสดงผลมีข้อมูลที่แอป
อาจต้องการให้ผู้ใช้เห็น เช่น ชื่อ
(
COLUMN_DISPLAY_NAME
) หรือหมายเลข (COLUMN_DISPLAY_NUMBER
) หรือชื่อรายการที่กำลังดูอยู่ - ข้อมูลเมตา: มีช่อง 3 ช่องสำหรับระบุเนื้อหาตามมาตรฐานที่เกี่ยวข้อง เช่น รหัสสตรีมการขนส่งของช่อง (
COLUMN_TRANSPORT_STREAM_ID
) รหัสเครือข่ายต้นทาง (COLUMN_ORIGINAL_NETWORK_ID
) และรหัสบริการ (COLUMN_SERVICE_ID
) - ข้อมูลภายใน: ฟิลด์สำหรับการใช้งานที่กำหนดเองของข้อมูลทีวี
ช่องบางช่อง เช่นCOLUMN_INTERNAL_PROVIDER_DATA
เป็นช่องที่ปรับแต่งได้ ซึ่งเป็นช่อง BLOB ที่อินพุตทีวีสามารถจัดเก็บข้อมูลเมตาที่กำหนดเองเกี่ยวกับช่องหรือรายการได้ - แจ้งว่าไม่เหมาะสม: ช่องควรถูกจำกัดไม่ให้แสดงในการค้นหา เรียกดู หรือดูหรือไม่ การตั้งค่านี้ทำได้ที่ระดับช่องเท่านั้น โปรแกรมทั้งหมดจะเป็นไปตามการตั้งค่าในช่อง
COLUMN_SEARCHABLE
: การจำกัดการค้นหาจากบางช่องอาจเป็นสิ่งที่จําเป็นในบางภูมิภาคCOLUMN_SEARCHABLE = 0
หมายความว่าช่องไม่ควรแสดงในผลการค้นหาCOLUMN_BROWSABLE
: มองเห็นได้เฉพาะแอปพลิเคชันของระบบเท่านั้น การจํากัดไม่ให้แอปพลิเคชันเรียกดูแชแนลCOLUMN_BROWSABLE = 0
หมายความว่าไม่ควรรวมช่องนั้นไว้ในรายการช่องCOLUMN_LOCKED
: มองเห็นได้เฉพาะแอปพลิเคชันของระบบเท่านั้น การจำกัดไม่ให้บัญชีที่ไม่ถูกต้องดูช่องได้โดยไม่ต้องป้อนรหัส PINCOLUMN_LOCKED = 1
หมายความว่าช่องควรได้รับการปกป้องโดยการควบคุมโดยผู้ปกครอง
ดูรายการช่องแบบละเอียดได้ที่
android/frameworks/base/media/java/android/media/tv/TvContract.java
สิทธิ์และการควบคุมการเข้าถึง
ทุกคนที่มีสิทธิ์เข้าถึงแถวที่เกี่ยวข้องจะเห็นช่องทั้งหมด ผู้ใช้จะเข้าถึงช่องใดๆ ไม่ได้โดยตรง โดยจะเห็นเฉพาะสิ่งที่แอปทีวี แอประบบ หรืออินพุตทีวีแสดง
- แต่ละแถวจะมี
PACKAGE_NAME
ซึ่งก็คือแพ็กเกจ (แอป) ที่เป็นเจ้าของแถวนั้น ซึ่งตรวจสอบใน Query, Insert, Update ผ่าน TvProvider.java อินพุตทีวีอาจเข้าถึงเฉพาะข้อมูลที่เขียนไว้และปิดการเข้าถึงข้อมูลจากอินพุตอื่นๆ ของทีวี - สิทธิ์การอ่านและเขียนผ่าน AndroidManifest.xml (ต้องได้รับความยินยอมจากผู้ใช้) เพื่อระบุแชแนลที่ใช้ได้
- เฉพาะแอป
signatureOrSystem
เท่านั้นที่จะได้รับสิทธิ์ACCESS_ALL_EPG_DATA
เพื่อเข้าถึงทั้งฐานข้อมูล
เครื่องมือจัดการอินพุตทีวี
TV Input Manager มี API ระบบส่วนกลางสําหรับเฟรมเวิร์กอินพุตของ Android TV โดยรวม โดยทำหน้าที่เป็นสื่อกลางในการโต้ตอบระหว่างแอปกับอินพุตทีวี รวมถึงมีฟังก์ชันการควบคุมโดยผู้ปกครอง คุณต้องสร้างเซสชันตัวจัดการอินพุตทีวีแบบ 1:1 กับอินพุตทีวี เครื่องมือจัดการอินพุตทีวีจะอนุญาตให้เข้าถึงอินพุตทีวีที่ติดตั้งไว้เพื่อให้แอปดำเนินการต่อไปนี้ได้
- แสดงรายการอินพุตของทีวีและตรวจสอบสถานะ
- สร้างเซสชันและจัดการผู้ฟัง
สำหรับเซสชัน แอปทีวีอาจปรับแต่งอินพุตทีวีเป็น URI ที่เพิ่มลงในฐานข้อมูลของผู้ให้บริการทีวีเท่านั้น ยกเว้นอินพุตทีวีที่ส่งผ่านซึ่งปรับแต่งได้โดยใช้ TvContract.buildChannelUriForPassthroughInput()
อินพุตของทีวีอาจตั้งค่าระดับเสียงเอาไว้ด้วย อินพุตทีวีที่ให้บริการและรับรองโดยผู้ผลิตอุปกรณ์ (แอปลายเซ็น) หรือแอปอื่นๆ ที่ติดตั้งในพาร์ติชันระบบจะมีสิทธิ์เข้าถึงฐานข้อมูลของผู้ให้บริการทีวีทั้งหมด สิทธิ์เข้าถึงนี้สามารถใช้ในการสร้างแอปเพื่อเรียกดูและค้นหาช่องและรายการทีวีทั้งหมดที่มีให้บริการ
แอปอาจสร้างและลงทะเบียน TvInputCallback
กับ android.media.tv.TvInputManager
เพื่อให้ระบบเรียกกลับเมื่ออินพุตทีวีมีการเปลี่ยนแปลงสถานะ หรือเมื่อมีการเพิ่มหรือนำอินพุตทีวีออก ตัวอย่างเช่น แอปทีวีสามารถตอบสนองได้เมื่ออินพุตทีวีถูกตัดการเชื่อมต่อ โดยแสดงสถานะว่ายกเลิกการเชื่อมต่อและป้องกันไม่ให้เลือก
เครื่องมือจัดการอินพุตทีวีจะจัดการการสื่อสารระหว่างแอปทีวีกับอินพุตทีวี อินเทอร์เฟซมาตรฐานของเครื่องมือจัดการอินพุตทีวีและอินพุตทีวีช่วยให้ผู้ผลิตอุปกรณ์หลายรายสร้างแอปทีวีของตนเองได้ ทั้งยังช่วยให้อินพุตทีวีของบุคคลที่สามทั้งหมดทำงานในแอปทีวีทั้งหมดได้
อินพุตทีวี
อินพุตทีวีเป็นแอป Android ในแง่ที่มีไฟล์ AndroidManifest.xml และติดตั้งแล้ว (ผ่าน Play, ติดตั้งไว้ล่วงหน้า หรือโหลดจากแหล่งที่ไม่รู้จัก) Android TV รองรับแอประบบที่ติดตั้งไว้ล่วงหน้า แอปที่รับรองโดยผู้ผลิตอุปกรณ์ และอินพุตทีวีของบุคคลที่สาม
อินพุตบางรายการ เช่น อินพุต HDMI หรืออินพุตของจูนเนอร์ในตัว จะต้องมาจากผู้ผลิตเท่านั้น เนื่องจากอินพุตเหล่านี้จะสื่อสารกับฮาร์ดแวร์ที่เกี่ยวข้องโดยตรง ส่วนแอปอื่นๆ เช่น IPTV, การจำลองสถานที่ และ STB ภายนอก บุคคลที่สามสามารถจัดหาแอปเหล่านี้เป็น APK ใน Google Play Store ได้ เมื่อดาวน์โหลดและติดตั้งแล้ว คุณสามารถเลือกอินพุตใหม่ภายในแอป TV ได้
ตัวอย่างอินพุตการส่งผ่าน
ในตัวอย่างนี้ อินพุตทีวีที่ผู้ผลิตอุปกรณ์ให้ไว้เชื่อถือได้และเข้าถึงผู้ให้บริการทีวีได้อย่างเต็มที่ ในฐานะอินพุตทีวีแบบส่งผ่าน อุปกรณ์นี้จะไม่ลงทะเบียนช่องหรือรายการใดๆ กับผู้ให้บริการทีวี หากต้องการรับ URI ที่ใช้อ้างอิงอินพุต Passthrough ให้ใช้android.media.tv.TvContract
วิธียูทิลิตีbuildChannelUriForPassthroughInput(String inputId)
แอปทีวีจะสื่อสารกับตัวจัดการอินพุตทีวีเพื่อเข้าถึงอินพุต HDMI ของทีวี
ตัวอย่างเครื่องรับสัญญาณในตัว
ในตัวอย่างนี้ อินพุตทีวีจากจูนเนอร์ในตัวที่ผู้ผลิตอุปกรณ์ให้ไว้เชื่อถือได้และมีสิทธิ์เข้าถึงผู้ให้บริการทีวีอย่างเต็มรูปแบบ
ตัวอย่างอินพุตของบุคคลที่สาม
ในตัวอย่างนี้ อินพุตทีวี STB ภายนอกมาจากบุคคลที่สาม เนื่องจากอินพุตทีวีดังกล่าวเข้าถึงฟีดวิดีโอ HDMI ที่เข้ามาโดยตรงไม่ได้ จึงต้องผ่านตัวจัดการอินพุตทีวีและใช้อินพุต HDMI ของทีวีที่ผู้ผลิตอุปกรณ์ให้มา
อินพุตทีวี STB ภายนอกสามารถสื่อสารกับอินพุต HDMI ของทีวีผ่านตัวจัดการอินพุตทีวีและขอให้แสดงวิดีโอบน HDMI1 ดังนั้นอินพุตทีวี STB จึงควบคุมทีวีได้ ในขณะที่อินพุตทีวี HDMI ที่ผู้ผลิตกำหนดให้แสดงผลวิดีโอ
ตัวอย่างการแสดงภาพซ้อนภาพ (PIP)
แผนภาพด้านบนแสดงวิธีที่ระบบส่งปุ่มบนรีโมตคอนโทรลไปยังอินพุตทีวีที่เจาะจงสำหรับการแสดงภาพซ้อนภาพ (PIP) การกดปุ่มเหล่านั้นจะได้รับการตีความโดยไดรเวอร์ฮาร์ดแวร์ที่ผู้ผลิตอุปกรณ์ให้มา โดยแปลงสแกนครื่องฮาร์ดแวร์เป็นคีย์โค้ด Android และส่งไปยังไปป์ไลน์อินพุตมาตรฐานของ Android ฟังก์ชัน InputReader
และ InputDispatcher
จะทำงานเป็น KeyEvents
ซึ่งจะทริกเกอร์เหตุการณ์ในแอปทีวีหากอยู่ในโฟกัส
เฉพาะอินพุตทีวีของระบบเท่านั้นที่มีสิทธิ์ได้รับ InputEvents
และก็ต่อเมื่อมีสิทธิ์ของระบบ RECEIVE_INPUT_EVENT
อินพุตทีวีมีหน้าที่รับผิดชอบในการพิจารณาว่าจะใช้ InputEvents ใด และควรอนุญาตให้แอปทีวีจัดการคีย์ที่ไม่จำเป็นต้องใช้
แอปทีวีมีหน้าที่รับผิดชอบในการทราบว่าอินพุตทีวีของระบบใดที่ใช้งานอยู่ ซึ่งหมายความว่าผู้ใช้เป็นผู้เลือก และเพื่อแยกแยะ KeyEvents
ที่เข้ามาและส่งไปยังเซสชันตัวจัดการอินพุตทีวีที่ถูกต้อง โดยเรียกใช้ dispatchInputEvent()
เพื่อส่งต่อเหตุการณ์ไปยังอินพุตทีวีที่เชื่อมโยง
ตัวอย่างอินพุต MHEG-5
แผนภาพต่อไปนี้แสดงมุมมองโดยละเอียดมากขึ้นเกี่ยวกับวิธีกำหนดเส้นทาง KeyEvents
ผ่าน TIF ของ Android
รูปภาพแสดงขั้นตอนของแอปปุ่มสีแดง ซึ่งเป็นแอปที่พบได้ทั่วไปในยุโรปสำหรับให้ผู้ใช้เข้าถึงแอปแบบอินเทอร์แอกทีฟบนทีวี ระบบสามารถส่งแอปผ่านสตรีมการนำส่งนี้ได้ เมื่อคลิกปุ่ม ก็จะสามารถโต้ตอบกับแอป ประกาศเหล่านี้ ตัวอย่างเช่น คุณอาจใช้แอปออกอากาศเหล่านี้เพื่อเข้าถึงหน้าเว็บหรือคะแนนการแข่งขันที่เกี่ยวข้อง
ดูส่วนแอปออกอากาศเพื่อดูวิธีที่แอปออกอากาศโต้ตอบกับแอปทีวี
ในตัวอย่างนี้
- แอปทีวีอยู่ในโฟกัสและได้รับคีย์ทั้งหมด
KeyEvents
(เช่น ปุ่มสีแดง) ส่งไปยังทีวีที่ใช้งานอยู่ ป้อนเป็นInputEvents.
- อินพุตทีวีของระบบผสานรวมกับสแต็ก MHEG-5 และมีสิทธิ์
ของระบบ
RECEIVE_INPUT_EVENT
- เมื่อได้รับรหัสคีย์เปิดใช้งาน (เช่น ปุ่มสีแดง) อินพุตทีวีจะเปิดใช้งานแอปออกอากาศ
- อินพุตทีวีใช้
KeyEvents
เป็นInputEvents
และแอปออกอากาศเป็นโฟกัสและจัดการInputEvents
จนกว่าจะปิด
หมายเหตุ: อินพุตทีวีของบุคคลที่สามจะไม่ได้รับคีย์
HAL อินพุตทีวี
HAL อินพุตทีวีจะช่วยพัฒนาอินพุตทีวีเพื่อเข้าถึงฮาร์ดแวร์เฉพาะสำหรับทีวี
เช่นเดียวกับ HAL อื่นๆ ของ Android TV Input HAL (tv_input
) จะอยู่ในซอร์สทรีของ AOSP และผู้ให้บริการจะเป็นผู้พัฒนาการใช้งาน
หมายเหตุ: ตั้งแต่ Android 14 เป็นต้นไป ระบบจะกำหนดอินเทอร์เฟซ HAL ของอินพุตทีวีโดยใช้ AIDL
แอปทีวี
แอป System TV นำเสนอเนื้อหารายการทีวีสดแก่ผู้ใช้ แอปทีวีอ้างอิง (Live TV) มีให้ใช้งานพร้อมกับแพลตฟอร์ม Android ซึ่งผู้ผลิตอุปกรณ์สามารถใช้แอปนี้ตามที่เป็นอยู่ ปรับแต่ง ขยาย หรือแทนที่ ซอร์สโค้ดมีอยู่ในโครงการโอเพนซอร์ส Android และคุณเริ่มต้นใช้งานได้ในบทความแอป Reference TV
ผู้ผลิตอุปกรณ์อาจขยายการให้บริการแอปทีวีของตนเพื่อใช้ฟีเจอร์สำหรับผู้ผลิตอุปกรณ์หรือฟีเจอร์เฉพาะประเทศ แต่ก็ไม่ได้อยู่ในขอบเขตของ TIF หรือแอปทีวีอ้างอิง
แอปทีวีของระบบต้องจัดการงานต่อไปนี้เป็นอย่างน้อย
การตั้งค่าและการกำหนดค่า
- ตรวจหาอินพุตทีวีโดยอัตโนมัติ
- ให้อินพุตทีวีเริ่มการตั้งค่าช่อง
- ควบคุมการตั้งค่าโดยผู้ปกครอง
- แก้ไขช่อง
การดู
- เข้าถึงและไปยังส่วนต่างๆ ของช่องทีวีทั้งหมด
- เข้าถึงแถบข้อมูลรายการทีวี
- แสดงข้อมูลคู่มือโปรแกรมอิเล็กทรอนิกส์ (EPG)
- รองรับแทร็กเสียงและคำบรรยายหลายแทร็ก
- มอบการทดสอบ PIN สำหรับการควบคุมโดยผู้ปกครอง
- อนุญาตให้วางซ้อน UI อินพุตทีวีสำหรับมาตรฐานทีวี (HbbTV ฯลฯ)
- แสดงข้อมูลในผลการค้นหาสำหรับช่องและรายการทีวี
- แสดงการ์ดการลิงก์แอป
- รองรับ API การเปลี่ยนเวลา
- จัดการฟังก์ชัน DVR และรองรับ API การบันทึกทีวี
ชุดฟีเจอร์นี้จะเพิ่มขึ้นตามเวอร์ชัน Android ใหม่ที่มีการขยาย TIF API ของแพลตฟอร์ม CTS Verifier มอบการครอบคลุมการทดสอบความเข้ากันได้
การรองรับอินพุตทีวีของบุคคลที่สาม
Android TV มี API สําหรับนักพัฒนาแอปสําหรับอินพุตทีวีของบุคคลที่สาม ซึ่งช่วยให้แอปที่ติดตั้งไว้สามารถส่งช่องซอฟต์แวร์ไปยังประสบการณ์การรับชมรายการทีวีสดได้ แอป System TV มีหน้าที่รับผิดชอบบางอย่างเกี่ยวกับการแสดงอินพุตและช่องทีวีของบุคคลที่สามให้ผู้ใช้เห็นเพื่อให้สามารถใช้งานอุปกรณ์ Android ที่เข้ากันได้ แอปทีวีสดอ้างอิงมีการใช้งานที่เข้ากันได้ หากต้องการแทนที่แอปทีวีของระบบ ผู้ผลิตอุปกรณ์ต้องตรวจสอบว่าแอปของตัวเองมีความเข้ากันได้ในลักษณะเดียวกัน เพื่อให้เป็นไปตามความคาดหวังของนักพัฒนาแอปในอุปกรณ์ Android TV ทั้งหมด
แอปทีวีของระบบต้องแสดงอินพุตของบุคคลที่สามควบคู่ไปกับบริการทีวีสดเริ่มต้นของอุปกรณ์ ประโยชน์ของ API สําหรับนักพัฒนาแอปคือผู้ใช้จะค้นหาช่องได้ (เมื่อติดตั้งแล้ว) ผ่านประสบการณ์การใช้งานทีวีแบบมาตรฐาน
อนุญาตให้แยกความแตกต่างของรูปลักษณ์ระหว่างช่องในตัวกับช่องของบุคคลที่สาม ตามที่ระบุไว้ในส่วนแอปทีวีของ CDD ของ Android
ส่วนต่อไปนี้จะแสดงวิธีที่แอปพลิเคชัน Live TV ปฏิบัติตามข้อกำหนดของ CDD
การตั้งค่าช่องใหม่
การเพิ่มอินพุต/ช่องของบุคคลที่สามใหม่เริ่มต้นด้วยผู้ใช้ค้นหาและติดตั้งอินพุตทีวีจาก App Store เช่น Google Play
อินพุตทีวีของบุคคลที่สามบางรายการจะเพิ่มช่องลงในฐานข้อมูล TvProvider โดยอัตโนมัติ แต่ส่วนใหญ่จะมีกิจกรรมการตั้งค่าเพื่อให้ผู้ใช้ตั้งค่าแชแนล ระบุรายละเอียดการเข้าสู่ระบบ และดำเนินการอื่นๆ ได้ แอป TV ของระบบต้องตรวจสอบว่าผู้ใช้เปิดใช้งานกิจกรรมการตั้งค่านี้ได้ ซึ่งเป็นเหตุผลที่ CDD กำหนดให้อินพุตของบุคคลที่สามทำให้การนำทางออกจากแอปทีวีหลักน้อยที่สุด
แอปรายการทีวีสดอ้างอิงจะมีเมนูแหล่งที่มาของช่องสำหรับการเข้าถึงอินพุต
นอกจากนี้ จะมีการ์ดการแจ้งเตือนแสดงที่ด้านบนของเมนูแอป TV หลังจากติดตั้ง TvInput ใหม่แล้ว เพื่อนำผู้ใช้ไปยังการตั้งค่าโดยตรง โดยทำดังนี้
หากผู้ใช้ดำเนินการผ่านข้อความแจ้ง ผู้ใช้สามารถเลือกตั้งค่าแหล่งที่มาได้ดังที่แสดงในรูปที่ 10
ดูกำหนดบริการอินพุตทีวีเพื่อดูสิ่งที่นักพัฒนาแอปคาดหวังในส่วนนี้
ปรับแต่งรายการช่อง
ผู้ผลิตอุปกรณ์อาจให้บริการ UI เพื่อซ่อนบางช่องและอนุญาตให้ผู้ใช้จัดการ EPG ของตนเอง รายการทีวีสดมีบริการดังกล่าวด้วย
EPG
นักพัฒนาอินพุตบุคคลที่สามต้องมั่นใจว่าผู้ใช้สามารถไปยังช่องของตนได้อย่างง่ายดายในระหว่างการใช้งานทั่วไปในอุปกรณ์ Android TV ที่เข้ากันได้ทั้งหมด
ช่องจากอินพุตของบุคคลที่สามต้องแสดงเป็นส่วนหนึ่งของ EPG ประสบการณ์การรับชมรายการสดแบบมาตรฐานของอุปกรณ์ คุณใช้การแยกภาพหรือแยกหมวดหมู่สำหรับช่องของบุคคลที่สามได้ (ดูส่วนแอปทีวีของ CDD ของ Android) โดยสิ่งสำคัญคือผู้ใช้ต้องค้นหาช่องที่ติดตั้งไว้ได้
ค้นหา
ผู้ผลิตต้องใช้แอป TV เพื่อรวมผลการค้นหาสำหรับคำขอการค้นหาทั่วโลกเพื่อให้ผู้ใช้ได้รับประสบการณ์ที่ดีที่สุด รายการทีวีสดมีการใช้งาน (ดู ซึ่งให้ผลลัพธ์จากอินพุตของบุคคลที่สาม (จําเป็นสําหรับความเข้ากันได้ของแพลตฟอร์ม) รวมถึงอินพุตในตัว
การเลื่อนเวลา
สำหรับอุปกรณ์ที่ใช้ Android 6.0 ขึ้นไป แอปทีวีต้องรองรับ API การเปลี่ยนเวลาของเฟรมเวิร์ก Android นอกจากนี้ ผู้ผลิตยังต้องใช้การควบคุมการเล่นในแอปทีวี ซึ่งช่วยให้ผู้ใช้หยุดชั่วคราว เล่นต่อ กรอกลับ และกรอไปข้างหน้าได้
สำหรับอินพุตทีวีที่รองรับการเปลี่ยนเวลา แอปทีวีจะต้องแสดงตัวควบคุมการเล่น
DVR
สำหรับอุปกรณ์ที่ใช้ Android 7.0 ขึ้นไป แอปทีวีต้องรองรับ TV recording API ของเฟรมเวิร์ก Android เพื่อรองรับ แสดงรายการ และเล่นรายการที่บันทึกไว้
ซึ่งช่วยให้ผู้ผลิตอุปกรณ์สามารถเสียบระบบย่อย DVR เข้ากับ TIF และลดความพยายามในการผสานรวมที่จำเป็นในการเปิดใช้หรือผสานรวมฟังก์ชันการทำงานของ DVR ในอุปกรณ์ทีวีได้อย่างมาก นอกจากนี้ ยังช่วยให้บุคคลที่สามสามารถจัดหาระบบ DVR หลังการขายที่เสียบเข้ากับอุปกรณ์ Android TV ได้
นอกจากการบันทึกเนื้อหาสดแล้ว แอปทีวียังจัดการทรัพยากรที่ทับซ้อนกันด้วย เช่น หากอุปกรณ์มีตัวรับสัญญาณ 2 ตัว ก็จะบันทึกรายการทีวีได้ 2 รายการพร้อมกัน หากผู้ใช้ขอให้บันทึก 3 รายการ แอปทีวีต้องจัดการกับความขัดแย้งและควรแสดงการแจ้งเตือนหรือขอให้ผู้ใช้กำหนดลำดับความสำคัญของคำขอเหล่านี้
แอปทีวียังใช้ตรรกะที่ซับซ้อนมากขึ้นได้ด้วย เช่น เมื่อผู้ใช้ขอบันทึกตอนหนึ่ง แอปจะถามว่าผู้ใช้ต้องการบันทึกตอนที่เหลือทั้งหมดของซีรีส์ไหม
ดูภาพรวมการใช้งาน DVR ที่เป็นไปได้ใน Android TV ได้จากแผนภาพต่อไปนี้
- บริการอินพุตทีวีจะบอกแอปทีวีว่ามีตัวรับสัญญาณกี่ตัวเพื่อให้แอปทีวีจัดการกับทรัพยากรที่อาจเกิดข้อขัดแย้งได้
- แอปทีวีได้รับคําขอที่ผู้ใช้เริ่มบันทึกรายการทีวี
- แอป TV จะจัดเก็บกำหนดการบันทึกไว้ในฐานข้อมูลภายใน
- เมื่อถึงเวลาบันทึก แอป TV จะส่งคำขอให้ปรับจูนไปยังช่องที่เชื่อมโยงกับการบันทึก
- บริการอินพุตทีวีจะรับคําขอนี้ ตอบกลับว่ามีทรัพยากรที่เหมาะสมหรือไม่ และปรับช่อง
- จากนั้นแอปทีวีจะส่งคําขอเริ่มบันทึกไปยังตัวจัดการอินพุตทีวี
- บริการอินพุตทีวีจะรับคําขอนี้และเริ่มบันทึก
- บริการอินพุตทีวีจะจัดเก็บข้อมูลวิดีโอจริงไว้ในพื้นที่เก็บข้อมูล ซึ่งอาจเป็นพื้นที่เก็บข้อมูลภายนอกหรือพื้นที่เก็บข้อมูลระบบคลาวด์
- เมื่อถึงเวลาสิ้นสุดการบันทึก แอปทีวีจะส่งคําขอหยุดบันทึกไปยังตัวจัดการอินพุตทีวี
- เมื่อบริการอินพุตทีวีได้รับคำขอ บริการจะหยุดการบันทึกและเพิ่มข้อมูลเมตาที่เกี่ยวข้องไปยังผู้ให้บริการทีวีเพื่อให้แอปทีวีแสดงการบันทึกแก่ผู้ใช้เมื่อได้รับคำขอ
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ฟีเจอร์การบันทึกในบริการอินพุตทีวีได้ที่บทความการบันทึกทีวีนี้
แหล่งข้อมูลที่มีประโยชน์
- Android CDD และ API สำหรับนักพัฒนาซอฟต์แวร์ที่บันทึกไว้ในเอกสารประกอบเป็นข้อมูลอ้างอิงที่สมบูรณ์
- CTS Verifier จะทดสอบ API เป็นส่วนหนึ่งของโปรแกรมการทดสอบความเข้ากันได้ การใช้ฟีเจอร์นี้กับรายการทีวีสดอาจเป็นวิธีที่มีประโยชน์ในการดู EPG, การค้นหา, การควบคุมโดยผู้ปกครอง และข้อกำหนดอื่นๆ ในบริบทของอินพุตของบุคคลที่สาม
- ดูกำหนดบริการอินพุตทีวีเพื่อดูสิ่งที่นักพัฒนาแอปคาดหวังในส่วนนี้
การควบคุมโดยผู้ปกครอง
การควบคุมโดยผู้ปกครองให้ผู้ใช้บล็อกช่องและโปรแกรมที่ไม่พึงประสงค์ได้ แต่จะข้ามการบล็อกได้ด้วยการป้อนรหัส PIN
ความรับผิดชอบต่อฟังก์ชันการควบคุมโดยผู้ปกครองแชร์กันระหว่างแอปทีวี บริการเครื่องมือจัดการอินพุตทีวี ผู้ให้บริการทีวี และอินพุตทีวี
การควบคุมโดยผู้ปกครองเป็นสิ่งจำเป็นและอยู่ภายใต้ CTS Verifier
หลายประเทศได้กำหนดระบบการจัดประเภทที่อินพุตทีวีสามารถใช้ผ่าน TVContentRating API นอกจากนี้ อินพุตทีวียังลงทะเบียนระบบการจัดประเภทที่กำหนดเองได้ ซึ่งเห็นได้จากการทดสอบของ CTS Verifier ซึ่งช่วยแนะนำการจัดประเภท "ปลอม" สำหรับประเทศที่มีระบบการจัดประเภทมาตรฐาน เราขอแนะนำให้ผู้ผลิตอุปกรณ์รวมการควบคุมโดยผู้ปกครองของเฟรมเวิร์กอินพุตทีวีเข้ากับกลไกอื่นๆ ที่อาจรวมไว้ด้วย
ผู้ให้บริการโทรทัศน์
แถวช่องแต่ละแถวจะมีช่อง COLUMN_LOCKED
ที่ใช้ล็อกช่องใดช่องหนึ่งไม่ให้ดูได้โดยไม่ต้องป้อนรหัส PIN ช่องโปรแกรม
COLUMN_CONTENT_RATING
มีไว้สำหรับแสดงผลและไม่ได้ใช้ในการบังคับใช้การควบคุมโดยผู้ปกครอง
เครื่องมือจัดการอินพุตทีวี
TV Input Manager จะจัดเก็บ TvContentRating
ที่ถูกบล็อกทุกรายการและตอบสนองต่อ isRatingBlocked()
เพื่อแนะนำว่าควรบล็อกเนื้อหาที่มีการจัดประเภทที่ระบุหรือไม่
อินพุตทีวี
อินพุตทีวีจะตรวจสอบว่าควรบล็อกเนื้อหาปัจจุบันหรือไม่โดยเรียกใช้ isRatingBlocked()
ในเครื่องมือจัดการอินพุตทีวีเมื่อการจัดประเภทของเนื้อหาที่แสดงมีการเปลี่ยนแปลง (เมื่อเปลี่ยนรายการหรือช่อง) หรือการตั้งค่าการควบคุมโดยผู้ปกครองมีการเปลี่ยนแปลง (ใน ACTION_BLOCKED_RATINGS_CHANGED
และ ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED
) หากควรบล็อกเนื้อหา อินพุตทีวีจะปิดใช้เสียงและวิดีโอ และแจ้งให้แอปทีวีทราบว่าเนื้อหาปัจจุบันถูกบล็อกโดยเรียกใช้ notifyContentBlocked(TvContentRating)
หากเนื้อหาไม่ควรถูกบล็อก อินพุตทีวีจะเปิดใช้เสียงและวิดีโอ และแจ้งให้แอปทีวีทราบว่าเนื้อหาปัจจุบันได้รับอนุญาตโดยเรียกใช้ notifyContentAllowed()
แอปทีวี
แอป TV ของระบบต้องมีวิธีให้ผู้ใช้จัดการการควบคุมโดยผู้ปกครองได้ ซึ่งรวมถึงการจัดประเภทแบบกำหนดเองที่ลงทะเบียนโดยแอปใดแอปหนึ่ง เพื่อให้เป็นไปตามข้อกำหนด API การควบคุมโดยผู้ปกครอง และสร้างแพลตฟอร์มที่เข้ากันได้
แอปทีวีจะแสดง UI รหัส PIN เมื่ออินพุตทีวีแจ้งว่าเนื้อหาปัจจุบันถูกบล็อก หรือเมื่อผู้ใช้พยายามดูช่องที่บล็อก
แอปทีวีไม่ได้จัดเก็บการตั้งค่าการควบคุมโดยผู้ปกครองโดยตรง เมื่อผู้ใช้เปลี่ยนการตั้งค่าการควบคุมโดยผู้ปกครอง TvContentRating
ที่ถูกบล็อกทั้งหมดจะจัดเก็บโดยเครื่องมือจัดการอินพุตทีวี และช่องที่ถูกบล็อกจะจัดเก็บโดยผู้ให้บริการทีวี
แอปทีวีต้องประกาศสิทธิ์ android.permission.MODIFY_PARENTAL_CONTROLS
เพื่อเปลี่ยนการตั้งค่าการควบคุมโดยผู้ปกครอง
เราขอแนะนำให้ผู้ผลิตอุปกรณ์ดำเนินการต่อไปนี้
- ทดสอบการควบคุมโดยผู้ปกครองของ CTS Verifier กับแอปพลิเคชันรายการทีวีสดอ้างอิงเพื่อสาธิตข้อกำหนดด้านความเข้ากันได้
- ใช้แอปทีวีสดเป็นข้อมูลอ้างอิงสำหรับแอปทีวีของตนเอง โดยเฉพาะอย่างยิ่งดูแหล่งที่มาของ ContentRatingsManager และ RatingSystemsFragment รวมถึงวิธีที่แอปจัดการการจัดประเภทที่กำหนดเอง
HDMI-CEC
HDMI-CEC ช่วยให้อุปกรณ์หนึ่งควบคุมอุปกรณ์อีกเครื่องหนึ่งได้ จึงใช้รีโมตตัวเดียวควบคุมเครื่องใช้ไฟฟ้าหลายเครื่องในโฮมเธียเตอร์ได้ Android TV ใช้เพื่อเร่งการตั้งค่าและอนุญาตให้ควบคุมอินพุตทีวีต่างๆ จากระยะไกลผ่านแอปทีวีส่วนกลาง เช่น อาจสลับอินพุต เปิดหรือปิดอุปกรณ์ และอื่นๆ
TIF ของ Android ใช้ HDMI-CEC เป็นบริการควบคุม HDMI เพื่อให้ผู้ผลิตอุปกรณ์ไม่ต้องพัฒนาไดรเวอร์ระดับต่ำที่โต้ตอบกับ HAL ของ Android TV น้ำหนักเบา โดยข้ามตรรกะทางธุรกิจที่ซับซ้อนกว่าไป Android พยายามลดปัญหาความเข้ากันได้โดยลดการใช้งานแบบแยกส่วนและการสนับสนุนฟีเจอร์เฉพาะด้าน เพื่อให้มีการติดตั้งใช้งานตามมาตรฐาน บริการควบคุม HDMI ใช้บริการที่มีอยู่ของ Android ซึ่งรวมถึงอินพุตและการเปิด/ปิด
ซึ่งหมายความว่าการใช้งาน HDMI-CEC ที่มีอยู่จะต้องได้รับการออกแบบใหม่เพื่อให้ทำงานร่วมกับ TIF ของ Android ได้ เราขอแนะนำให้แพลตฟอร์มฮาร์ดแวร์มีไมโครโปรเซสเซอร์เพื่อรับคำสั่งเปิด CEC และคำสั่งอื่นๆ
- โดยบัส CEC จะได้รับคำสั่งจากแหล่งที่มาที่ใช้งานอยู่ในปัจจุบันให้เปลี่ยนไปใช้แหล่งที่มาอื่น
- โปรแกรมควบคุมจะส่งคำสั่งไปยัง HAL ของ HDMI-CEC
- HAL จะแจ้ง
ActiveSourceChangeListeners
ทั้งหมด - บริการควบคุม HDMI ได้รับการแจ้งเตือนเกี่ยวกับการเปลี่ยนแปลงแหล่งที่มาผ่าน
ActiveSourceChangeListener
- บริการตัวจัดการอินพุตทีวีจะสร้าง Intent เพื่อให้แอปทีวีเปลี่ยนแหล่งที่มา
- จากนั้นแอปทีวีจะสร้างเซสชันตัวจัดการอินพุตทีวีสำหรับอินพุตทีวีที่กำลังเปลี่ยนไปใช้ และเรียกใช้
setMain
ในเซสชันนั้น - เซสชันตัวจัดการอินพุตทีวีจะส่งต่อข้อมูลนี้ไปยังอินพุต HDMI ของทีวี
- อินพุต HDMI ของทีวีขอตั้งค่าพื้นผิวย่านความถี่ข้าง
- บริการโปรแกรมจัดการอินพุตทีวีจะสร้างคำสั่งควบคุมการกำหนดเส้นทางที่เกี่ยวข้องกลับไปยังบริการควบคุม HDMI เมื่อตั้งค่าพื้นผิวแล้ว
หลักเกณฑ์การผสานรวมทีวี
แอปออกอากาศ
เนื่องจากแต่ละประเทศมีข้อกำหนดเฉพาะสำหรับการออกอากาศ (MHEG, Teletext, HbbTV และอื่นๆ) ผู้ผลิตจึงควรจัดหาโซลูชันของตนเองสำหรับแอปการออกอากาศ เช่น
- MHEG: สแต็กแบบเนทีฟ
- เทเลเท็กซ์: สแต็กเนทีฟ
- HbbTV: โซลูชัน HbbTV จาก Vewd Software
ในรุ่น Android L นั้น Android TV คาดหวังให้ผู้ผลิตอุปกรณ์ใช้ผู้ผสานรวมระบบหรือโซลูชัน Android สำหรับสแต็กทีวีระดับภูมิภาค ส่งผ่านแพลตฟอร์มไปยังสแต็กซอฟต์แวร์ทีวี หรือส่งรหัสคีย์ที่จำเป็นเพื่อโต้ตอบกับสแต็กเดิม
ต่อไปนี้คือวิธีที่แอปออกอากาศและแอปทีวีทำงานร่วมกัน
- แอปทีวีอยู่ในโฟกัส โดยรับแป้นพิมพ์ทั้งหมด
- แอปทีวีจะส่งคีย์ (เช่น ปุ่มสีแดง) ไปยังอุปกรณ์อินพุตของทีวี
- อุปกรณ์อินพุตทีวีจะผสานรวมกับชุดทีวีเดิมเป็นการภายใน
- เมื่อได้รับรหัสคีย์การเปิดใช้งาน (เช่น ปุ่มสีแดง) อุปกรณ์อินพุตทีวีจะเปิดใช้งานแอปออกอากาศ
- แอปออกอากาศจะเป็นผู้รับโฟกัสในแอปทีวีและจัดการการดำเนินการของผู้ใช้
สําหรับการค้นหา/คําแนะนําด้วยเสียง แอปการออกอากาศอาจรองรับการค้นหาในแอปสําหรับการค้นหาด้วยเสียง