กรอบอินพุตทีวี

ไอคอน Android TV HAL

Android TV Input Framework (TIF) ช่วยลดความยุ่งยากในการส่งเนื้อหาสดไปยัง Android TV Android TIF มี API มาตรฐานสำหรับผู้ผลิตเพื่อสร้างโมดูลอินพุตสำหรับควบคุม Android TV และเปิดใช้งานการค้นหารายการสดทางทีวีและคำแนะนำผ่านข้อมูลเมตาที่เผยแพร่โดยอินพุตทีวี

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

ส่วนประกอบ

การใช้งาน Android TV Input Framework รวมถึง TV Input Manager TIF ทำงานร่วมกับแอป TV ซึ่งเป็นแอประบบที่ไม่สามารถแทนที่ด้วยแอปของบุคคลที่สาม เพื่อเข้าถึงช่องรับสัญญาณในตัวและ IP แอพ TV สื่อสารกับโมดูลอินพุตทีวีที่จัดทำโดยผู้ผลิตอุปกรณ์หรือฝ่ายอื่น ๆ ผ่าน TV Input Manager

กรอบการป้อนข้อมูลทีวีประกอบด้วย:

  • ผู้ให้บริการทีวี ( com.android.providers.tv.TvProvider ): ฐานข้อมูลของช่อง โปรแกรม และการอนุญาตที่เกี่ยวข้อง
  • แอพ TV ( com.android.tv.TvActivity ): แอพที่จัดการการโต้ตอบกับผู้ใช้
  • ตัวจัดการอินพุตทีวี ( android.media.tv.TvInputManager ): อนุญาตให้อินพุตทีวีสื่อสารกับแอป TV
  • อินพุตทีวี: แอปที่แสดงถึงเครื่องรับสัญญาณจริงหรือเสมือนและพอร์ตอินพุต
  • อินพุตทีวี HAL (โมดูล tv_input ): คำจำกัดความของฮาร์ดแวร์ที่อนุญาตให้อินพุตทีวีระบบเข้าถึงฮาร์ดแวร์เฉพาะของทีวีเมื่อใช้งาน
  • การควบคุมโดยผู้ปกครอง: เทคโนโลยีที่อนุญาตให้บล็อกช่องและโปรแกรม
  • HDMI-CEC: เทคโนโลยีที่ช่วยให้การควบคุมระยะไกลของอุปกรณ์ต่างๆ ผ่าน HDMI
  • Tuner Framework: กรอบงานสำหรับอินพุตทีวีจูนเนอร์ในตัว
  • MediaCas: เฟรมเวิร์กสำหรับการเข้าถึงแบบมีเงื่อนไข
  • Tuner Resource Manager: บริการเพื่อจัดการทรัพยากรฮาร์ดแวร์สำหรับอินพุตทีวี, MediaCas และอินพุตจูนเนอร์ในตัว

ส่วนประกอบเหล่านี้มีรายละเอียดอยู่ด้านล่าง ดูไดอะแกรมต่อไปนี้สำหรับมุมมองโดยละเอียดของสถาปัตยกรรม Android TV Input Framework

ภาพรวมของสถาปัตยกรรม Android TIF
รูปที่ 1. สถาปัตยกรรม Android TV Input Framework (TIF)

ไหล

นี่คือวิธีการใช้สถาปัตยกรรม:

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

สิทธิ์

  • เฉพาะอินพุตทีวี signatureOrSystem และแอพ TV เท่านั้นที่มีสิทธิ์เข้าถึงฐานข้อมูลผู้ให้บริการทีวีอย่างสมบูรณ์และสามารถรับ KeyEvents ได้
  • เฉพาะอินพุตทีวีของระบบเท่านั้นที่สามารถเข้าถึง TV Input HAL ผ่านบริการ TV Input Manager อินพุตทีวีเข้าถึงได้แบบตัวต่อตัวผ่านเซสชันตัวจัดการอินพุตทีวี
  • อินพุตทีวีของบริษัทอื่นมีการเข้าถึงฐานข้อมูลผู้ให้บริการทีวีแบบล็อกแพ็กเกจ และสามารถอ่าน/เขียนได้เฉพาะกับแถวแพ็กเกจที่ตรงกันเท่านั้น
  • อินพุตทีวีของบริษัทอื่นสามารถแสดงเนื้อหาของตนเองหรือเนื้อหาจากอินพุตทีวีแบบพาสทรูของผู้ผลิตอุปกรณ์ เช่น HDMI1 พวกเขาไม่สามารถแสดงเนื้อหาจากอินพุตทีวีแบบ non-passthrough เช่น จูนเนอร์ในตัวหรือ IPTV
  • การอนุญาต TV_INPUT_HARDWARE สำหรับแอพ TV Input ของฮาร์ดแวร์ส่งสัญญาณ TV Input Manager Service เพื่อแจ้งบริการ TV Input Manager เมื่อบู๊ตเพื่อเรียกใช้บริการ TV Input Manager และเพิ่มอินพุตทีวี การอนุญาตนี้อนุญาตให้แอปฮาร์ดแวร์อินพุตทีวีรองรับอินพุตทีวีหลายรายการต่อบริการอินพุตทีวีรวมถึงสามารถเพิ่มและลบอินพุตทีวีที่รองรับแบบไดนามิกได้

ผู้ให้บริการทีวี

ฐานข้อมูลผู้ให้บริการทีวีจัดเก็บช่องและโปรแกรมจากอินพุตทีวี ผู้ให้บริการทีวียังเผยแพร่และจัดการสิทธิ์ที่เกี่ยวข้องเพื่อให้อินพุตทีวีสามารถดูได้เฉพาะบันทึกของตนเองเท่านั้น ตัวอย่างเช่น อินพุตทีวีเฉพาะสามารถดูได้เฉพาะช่องและโปรแกรมที่ให้มา และห้ามมิให้เข้าถึงช่องและโปรแกรมอื่นๆ ของอินพุตทีวี

ผู้ให้บริการทีวีจับคู่ "ประเภทการออกอากาศ" กับ "ประเภทตามรูปแบบบัญญัติ" ภายใน อินพุตทีวีมีหน้าที่เติม "ประเภทการออกอากาศ" ด้วยค่าในมาตรฐานการออกอากาศพื้นฐาน และฟิลด์ "ประเภทตามรูปแบบบัญญัติ" จะถูกเติมโดยอัตโนมัติด้วยประเภทที่เกี่ยวข้องที่ถูกต้องจาก android.provider.TvContract.Genres ตัวอย่างเช่น ด้วยมาตรฐานการออกอากาศ ATSC A/65 และรายการประเภท 0x25 (หมายถึง "กีฬา") อินพุตทีวีจะเติม "ประเภทการออกอากาศ" ด้วยสตริง "กีฬา" และผู้ให้บริการทีวีจะเติมฟิลด์ "ประเภทตามรูปแบบบัญญัติ" ด้วย ค่าที่แม android.provider.TvContract.Genres.SPORTS

ดูแผนภาพด้านล่างสำหรับมุมมองโดยละเอียดของผู้ให้บริการทีวี

ผู้ให้บริการ Android TV
รูปที่ 2 ผู้ให้บริการ Android TV

เฉพาะแอพในพาร์ติชันระบบที่มีสิทธิ์เท่านั้นที่สามารถอ่านฐานข้อมูลผู้ให้บริการทีวีทั้งหมดได้

อินพุตทีวีแบบ Passthrough ไม่ได้จัดเก็บช่องและโปรแกรม

นอกเหนือจากฟิลด์มาตรฐานสำหรับช่องและโปรแกรมต่างๆ ฐานข้อมูลผู้ให้บริการทีวียังมีฟิลด์ประเภท BLOB COLUMN_INTERNAL_PROVIDER_DATA ในแต่ละตารางที่อินพุตทีวีอาจใช้เพื่อเก็บข้อมูลโดยพลการ ข้อมูล BLOB นั้นสามารถรวมข้อมูลที่กำหนดเองได้ เช่น ความถี่ของจูนเนอร์ที่เกี่ยวข้อง และอาจมีให้ในบัฟเฟอร์โปรโตคอลหรือรูปแบบอื่น ช่องที่สามารถค้นหาได้จะทำให้ช่องบางช่องใช้งานไม่ได้ในการค้นหา (เช่น เพื่อให้เป็นไปตามข้อกำหนดเฉพาะประเทศสำหรับการปกป้องเนื้อหา)

ตัวอย่างช่องฐานข้อมูล

ผู้ให้บริการทีวีรองรับข้อมูลที่มีโครงสร้างในช่อง ( android.provider.TvContract.Channels ) และตารางโปรแกรม ( android.provider.TvContract.Programs ) ตารางเหล่านี้บรรจุและเข้าถึงได้โดยอินพุตทีวีและแอประบบ เช่น แอปทีวี ตารางเหล่านี้มีฟิลด์สี่ประเภท:

  • จอแสดงผล: ช่องแสดงผลประกอบด้วยข้อมูลที่แอปอาจต้องการให้ผู้ใช้มองเห็นได้ เช่น ชื่อช่อง ( COLUMN_DISPLAY_NAME ) หรือหมายเลข ( COLUMN_DISPLAY_NUMBER ) หรือชื่อรายการที่กำลังดูอยู่
  • ข้อมูลเมตา: มีสามฟิลด์สำหรับระบุเนื้อหา ตามมาตรฐานที่เกี่ยวข้อง เช่น รหัสสตรีมการขนส่งของช่อง ( 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 : ปรากฏแก่แอปพลิเคชันระบบเท่านั้น การจำกัดช่องจากการดูโดยบัญชีที่ไม่ถูกต้องโดยไม่ต้องป้อนรหัส PIN COLUMN_LOCKED = 1 หมายถึงช่องสัญญาณควรได้รับการปกป้องโดยการควบคุมโดยผู้ปกครอง

สำหรับรายการฟิลด์ที่ละเอียดยิ่งขึ้น โปรดดู android/frameworks/base/media/java/android/media/tv/TvContract.java

สิทธิ์และการควบคุมการเข้าถึง

ฟิลด์ทั้งหมดจะปรากฏแก่ทุกคนที่มีสิทธิ์เข้าถึงแถวที่เกี่ยวข้อง ผู้ใช้ไม่สามารถเข้าถึงฟิลด์ได้โดยตรง พวกเขาเห็นเฉพาะสิ่งที่แอป TV, แอประบบ หรืออินพุตทีวีปรากฏเท่านั้น

  • แต่ละแถวมี PACKAGE_NAME ซึ่งเป็นแพ็คเกจ (แอป) ที่เป็นเจ้าของแถวนั้น ตรวจสอบการสืบค้น แทรก อัปเดตผ่าน TvProvider.java อินพุตทีวีอาจเข้าถึงได้เฉพาะข้อมูลที่เขียนและปิดล้อมจากข้อมูลที่ป้อนโดยอินพุตทีวีอื่นๆ
  • อ่านเขียนสิทธิ์ผ่าน AndroidManifest.xml (ต้องได้รับความยินยอมจากผู้ใช้) เพื่อกำหนดช่องทางที่มีอยู่
  • เฉพาะแอป signatureOrSystem เท่านั้นที่สามารถรับสิทธิ์ ACCESS_ALL_EPG_DATA เพื่อเข้าถึงฐานข้อมูลทั้งหมดได้

ตัวจัดการอินพุตทีวี

TV Input Manager จัดเตรียม API ของระบบส่วนกลางให้กับ Android TV Input Framework โดยรวม มันตัดสินการโต้ตอบระหว่างแอพและอินพุตทีวีและให้ฟังก์ชันการควบคุมโดยผู้ปกครอง ต้องสร้างเซสชันตัวจัดการอินพุตทีวีแบบตัวต่อตัวด้วยอินพุตทีวี TV Input Manager อนุญาตให้เข้าถึง TV Inputs ที่ติดตั้ง ดังนั้นแอพอาจ:

  • แสดงรายการอินพุตทีวีและตรวจสอบสถานะ
  • สร้างเซสชันและจัดการผู้ฟัง

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

แอปอาจสร้างและลงทะเบียน TvInputCallback กับ android.media.tv.TvInputManager เพื่อเรียกกลับเมื่อมีการเปลี่ยนแปลงสถานะของอินพุตทีวีหรือการเพิ่มหรือลบอินพุตทีวี ตัวอย่างเช่น แอปทีวีสามารถตอบสนองได้เมื่ออินพุตทีวีถูกตัดการเชื่อมต่อโดยแสดงเป็นยกเลิกการเชื่อมต่อและป้องกันไม่ให้มีการเลือก

TV Input Manager จะสรุปการสื่อสารระหว่างแอพ TV และ TV Inputs อินเทอร์เฟซมาตรฐานของ TV Input Manager และ TV Input ช่วยให้ผู้ผลิตอุปกรณ์หลายรายสามารถสร้างแอป TV ของตนเองได้ ในขณะที่ช่วยให้ TV Inputs ของบริษัทอื่นทำงานบนแอป TV ทั้งหมดได้

อินพุตทีวี

อินพุตทีวีคือแอป Android ในแง่ที่พวกเขามี AndroidManifest.xml และติดตั้ง (ผ่าน Play ติดตั้งไว้ล่วงหน้าหรือไซด์โหลด) Android TV รองรับแอประบบที่ติดตั้งไว้ล่วงหน้า แอปที่ลงนามโดยผู้ผลิตอุปกรณ์ และอินพุตทีวีของบริษัทอื่น

อินพุตบางรายการ เช่น อินพุต HDMI หรืออินพุตจูนเนอร์ในตัว มีเพียงผู้ผลิตเท่านั้นที่จัดหาได้ เนื่องจากอินพุตเหล่านี้พูดโดยตรงกับฮาร์ดแวร์ที่เกี่ยวข้อง อื่นๆ เช่น IPTV, place-shifting และ STB ภายนอก สามารถจัดหาโดยบุคคลที่สามเป็น APK บน Google Play Store เมื่อดาวน์โหลดและติดตั้งแล้ว อินพุตใหม่จะสามารถเลือกได้ภายในแอพ TV

ตัวอย่างอินพุตแบบพาสทรู

อินพุตระบบ Android TV
รูปที่ 3 อินพุตระบบ Android TV

ในตัวอย่างนี้ อินพุตทีวีที่ได้รับจากผู้ผลิตอุปกรณ์นั้นเชื่อถือได้และมีสิทธิ์เข้าถึงผู้ให้บริการทีวีอย่างเต็มรูปแบบ ในฐานะที่เป็นอินพุตทีวีแบบพาสทรู จะไม่ลงทะเบียนช่องหรือโปรแกรมใดๆ กับผู้ให้บริการทีวี ในการรับ URI ที่ใช้อ้างอิงอินพุต passthrough ให้ใช้เมธอดยูทิลิตี้ android.media.tv.TvContract buildChannelUriForPassthroughInput(String inputId) แอพ TV สื่อสารกับ TV Input Manager เพื่อเข้าถึงอินพุต HDMI TV

ตัวอย่างจูนเนอร์ในตัว

อินพุตจูนเนอร์ในตัวทีวี Android
รูปที่ 4 อินพุตจูนเนอร์ในตัวของ Android TV

ในตัวอย่างนี้ อินพุตทีวีจูนเนอร์ในตัวที่ผู้ผลิตอุปกรณ์ให้มานั้นเชื่อถือได้และมีสิทธิ์เข้าถึงผู้ให้บริการทีวีอย่างเต็มที่

ตัวอย่างอินพุตของบุคคลที่สาม

อินพุตบุคคลที่สามของ Android TV
รูปที่ 5. อินพุตของบุคคลที่สามของ Android TV

ในตัวอย่างนี้ อินพุต STB TV ภายนอกมีให้โดยบุคคลที่สาม เนื่องจากอินพุตทีวีนั้นไม่สามารถเข้าถึงฟีดวิดีโอ HDMI ที่เข้ามาได้โดยตรง จึงต้องผ่าน TV Input Manager และใช้อินพุต HDMI TV ที่ผู้ผลิตอุปกรณ์ให้มา

ผ่านตัวจัดการอินพุตทีวี อินพุตทีวี STB ภายนอกสามารถพูดกับอินพุตทีวี HDMI และขอให้แสดงวิดีโอบน HDMI1 ดังนั้นอินพุตทีวี STB จึงสามารถควบคุมทีวีได้ในขณะที่อินพุตทีวี HDMI ที่ผู้ผลิตจัดหาให้แสดงวิดีโอ

ตัวอย่างภาพซ้อนภาพ (PIP)

Android TV KeyEvents
รูปที่ 6 KeyEvents ของ Android TV

แผนภาพด้านบนแสดงวิธีการส่งปุ่มบนรีโมทคอนโทรลไปยัง TV Input สำหรับการแสดงผลภาพซ้อนภาพ (PIP) การกดปุ่มเหล่านั้นจะถูกตีความโดยไดรเวอร์ฮาร์ดแวร์ที่จัดทำโดยผู้ผลิตอุปกรณ์ โดยจะแปลงรหัสสแกนฮาร์ดแวร์เป็นรหัสคีย์ Android และส่งผ่านไปยังฟังก์ชัน InputDispatcher และ InputReader ไปป์ไลน์อินพุต มาตรฐานของ Android เป็น KeyEvents สิ่งเหล่านี้จะทริกเกอร์เหตุการณ์บนแอพ TV หากอยู่ในโฟกัส

เฉพาะอินพุตทีวีระบบเท่านั้นที่มีสิทธิ์รับ InputEvents และเฉพาะในกรณีที่ได้รับอนุญาตจากระบบ RECEIVE_INPUT_EVENT อินพุตทีวีมีหน้าที่กำหนดว่าจะใช้ InputEvents ใดและควรอนุญาตให้แอป TV จัดการกับคีย์ที่ไม่จำเป็นต้องใช้

แอป TV มีหน้าที่ทราบว่าอินพุตทีวีระบบใดทำงานอยู่ ซึ่งหมายความว่าผู้ใช้เลือกไว้ และเพื่อแก้ความกำกวมของ KeyEvents เหตุการณ์ที่เข้ามา และกำหนดเส้นทางไปยังเซสชัน TV Input Manager ที่ถูกต้อง โดยเรียก dispatchInputEvent() เพื่อส่งต่อเหตุการณ์ไปยังอินพุตทีวีที่เกี่ยวข้อง .

ตัวอย่างอินพุต MHEG-5

ไดอะแกรมต่อไปนี้แสดงมุมมองโดยละเอียดเพิ่มเติมเกี่ยวกับวิธีการกำหนดเส้นทาง KeyEvents ผ่าน Android TIF

ตัวอย่างปุ่ม Android TV สีแดง
รูปที่ 7 ตัวอย่างปุ่ม Android TV Red

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

ดูส่วน แอพ Broadcast เพื่อเรียนรู้ว่าแอพออกอากาศโต้ตอบกับแอพ TV อย่างไร

ในตัวอย่างนี้:

  1. แอปทีวีอยู่ในโฟกัสและรับกุญแจทั้งหมด
  2. KeyEvents (เช่น ปุ่มสีแดง) จะถูกส่งไปยังอินพุตทีวีที่ใช้งานอยู่เป็น InputEvents.
  3. อินพุตทีวีของระบบทำงานร่วมกับสแต็ค MHEG-5 และได้รับอนุญาตจากระบบ RECEIVE_INPUT_EVENT
  4. เมื่อได้รับรหัสเปิดใช้งาน (เช่น ปุ่มสีแดง) อินพุตทีวีจะเปิดใช้งานแอปออกอากาศ
  5. อินพุตทีวีใช้ KeyEvents เป็น InputEvents และแอปออกอากาศเป็นจุดโฟกัสและจัดการ InputEvents จนกว่าจะถูกปิด

หมายเหตุ : อินพุตทีวีของบริษัทอื่นจะไม่ได้รับคีย์

อินพุตทีวีHAL

อินพุตทีวี HAL ช่วยพัฒนาอินพุตทีวีเพื่อเข้าถึงฮาร์ดแวร์เฉพาะของทีวี เช่นเดียวกับ Android HAL อื่นๆ TV Input HAL ( tv_input ) มีอยู่ในแผนผังซอร์ส AOSP และผู้จำหน่ายจะพัฒนาการใช้งาน

แอพทีวี

แอประบบทีวีนำเสนอเนื้อหารายการทีวีสดแก่ผู้ใช้ แอปทีวีอ้างอิง (Live TV) มีให้พร้อมกับแพลตฟอร์ม Android ซึ่งสามารถใช้งานได้ตามที่เป็น ปรับแต่ง ขยาย หรือเปลี่ยนโดยผู้ผลิตอุปกรณ์ ซอร์สโค้ดมี อยู่ใน Android Open Source Project และคุณสามารถเริ่มต้นใช้งานได้ในบทความ แอป Reference TV

ผู้ผลิตอุปกรณ์อาจขยายแอป TV เพื่อใช้งานผู้ผลิตอุปกรณ์หรือคุณสมบัติเฉพาะประเทศ อย่างไรก็ตาม สิ่งนี้ไม่อยู่ในขอบเขตของ TIF หรือแอป TV อ้างอิง

อย่างน้อยที่สุด แอประบบทีวีต้องจัดการงานต่อไปนี้:

การตั้งค่าและการกำหนดค่า

  • ตรวจหาอินพุตทีวีอัตโนมัติ
  • ให้อินพุตทีวีเริ่มต้นการตั้งค่าช่อง
  • ควบคุมการตั้งค่าโดยผู้ปกครอง
  • แก้ไขช่อง

กำลังดู

  • เข้าถึงและนำทางช่องทีวีทั้งหมด
  • เข้าถึงแถบข้อมูลรายการทีวี
  • แสดงข้อมูล Electronic Programming Guide (EPG)
  • รองรับแทร็กเสียงและคำบรรยายหลายแทร็ก
  • จัดหาความท้าทาย PIN การควบคุมโดยผู้ปกครอง
  • อนุญาตการซ้อนทับ UI ของอินพุตทีวีสำหรับมาตรฐานทีวี (HbbTV เป็นต้น)
  • เติมผลการค้นหาช่องทีวีและรายการ
  • แสดงการ์ดเชื่อมโยงแอป
  • รองรับ API ที่เปลี่ยนเวลา
  • จัดการฟังก์ชัน DVR และรองรับ API การบันทึกรายการทีวี

ชุดคุณลักษณะนี้จะเพิ่มขึ้นตามเวอร์ชัน Android ใหม่ที่ขยายแพลตฟอร์ม TIF API CTS Verifier ให้ความคุ้มครองการทดสอบความเข้ากันได้

รองรับอินพุตทีวีของบริษัทอื่น

Android TV มี API ของนักพัฒนาสำหรับอินพุตทีวีของบริษัทอื่น ทำให้แอปที่ติดตั้งเพื่อส่งช่องซอฟต์แวร์เข้าสู่ประสบการณ์การรับชมรายการทีวีสด เพื่อให้แน่ใจว่ามีการใช้งานอุปกรณ์ Android ที่เข้ากันได้ แอพ TV ของระบบมีหน้าที่รับผิดชอบบางประการเกี่ยวกับการแสดงอินพุตและช่องทีวีของบุคคลที่สามให้กับผู้ใช้ แอพ Live TV อ้างอิงมีการใช้งานที่เข้ากันได้ หากแทนที่แอป TV ของระบบ ผู้ผลิตอุปกรณ์จะต้องตรวจสอบให้แน่ใจว่าแอปของตนมีความเข้ากันได้เหมือนกัน เพื่อให้เป็นไปตามความคาดหวังของนักพัฒนาในอุปกรณ์ Android TV ทั้งหมด

แอปทีวีระบบต้องแสดงอินพุตของบุคคลที่สามควบคู่ไปกับบริการถ่ายทอดสดทางทีวีที่เป็นค่าเริ่มต้นของอุปกรณ์ คำมั่นสัญญาของ API สำหรับนักพัฒนาคือผู้ใช้จะสามารถค้นหาช่อง (เมื่อติดตั้งแล้ว) ภายในประสบการณ์ทีวีมาตรฐานของตน

อนุญาตให้มองเห็นความแตกต่างระหว่างช่องสัญญาณในตัวและช่องของบุคคลที่สามตามที่กำหนดไว้ในส่วนแอพ TV ของ Android CDD

ส่วนต่อไปนี้แสดงให้เห็นว่าแอปพลิเคชัน Live TV ปฏิบัติตามข้อกำหนด CDD อย่างไร

ตั้งค่าช่องใหม่

การเพิ่มอินพุต/ช่องสัญญาณของบุคคลที่สามใหม่เริ่มต้นด้วยการค้นหาและติดตั้ง TV Input จากร้านค้าแอปพลิเคชัน เช่น Google Play

อินพุตทีวีของบริษัทอื่นบางรายการจะเพิ่มช่องลงในฐานข้อมูล TvProvider โดยอัตโนมัติ อย่างไรก็ตาม ส่วนใหญ่จะจัดให้มีกิจกรรมการตั้งค่าเพื่อให้ผู้ใช้สามารถตั้งค่าช่องทางของตน ให้รายละเอียดการเข้าสู่ระบบ และการดำเนินการอื่นๆ แอพ TV ของระบบจำเป็นต้องตรวจสอบให้แน่ใจว่าผู้ใช้สามารถเปิดใช้งานกิจกรรมการตั้งค่านี้ได้ ซึ่งเป็นสาเหตุที่ CDD ต้องการอินพุตของบุคคลที่สามซึ่งเป็นการดำเนินการนำทางให้น้อยที่สุดจากแอพ TV หลัก

แอพ Live TV อ้างอิงมีเมนู Channel Sources สำหรับการเข้าถึงอินพุต

ไปที่การตั้งค่า
รูปที่ 8 ไปที่ การตั้งค่า

ไปที่แหล่งที่มาของช่องในการตั้งค่า
รูปที่ 9 ไปที่ แหล่งที่มาของช่อง ในการตั้งค่า

เลือกแหล่งที่มาของคุณจากรายการ
รูปที่ 10. เลือกแหล่งที่มาของคุณจากรายการ

เพิ่มช่องจากแหล่งที่มาของคุณ
รูปที่ 11 เพิ่มช่องจากแหล่งที่มาของคุณ

นอกจากนี้ การ์ดแจ้งเตือนจะแสดงที่ด้านบนของเมนูแอพ TV หลังจากติดตั้ง TvInput ใหม่ เพื่อนำผู้ใช้ไปยังการตั้งค่าโดยตรง:

มีการแจ้งเตือนที่แสดงแหล่งที่มาของช่องใหม่
รูปที่ 12. มีการแจ้งเตือนที่แสดงแหล่งที่มาของช่องใหม่

หากผู้ใช้ดำเนินการผ่านการแจ้งเตือน ผู้ใช้สามารถเลือกตั้งค่าแหล่งที่มาได้ตามที่แสดงในรูปที่ 10

ดู กำหนดบริการอินพุตทีวีของคุณ สำหรับความคาดหวังของนักพัฒนาในพื้นที่นี้

ปรับแต่งรายการช่อง

ผู้ผลิตอุปกรณ์อาจจัดเตรียม UI เพื่อซ่อนช่องสัญญาณบางช่องและให้ผู้ใช้จัดการ EPG ของตนเองได้ รายการสดทางทีวีรวมถึงสิ่งอำนวยความสะดวกนี้

เปิดรายการช่องในการตั้งค่า
รูปที่ 13 เปิดรายการช่องใน การตั้งค่า

ปรับแต่งรายการช่องของคุณ
รูปที่ 14. ปรับแต่งรายการช่องของคุณ

EPG

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

ช่องจากอินพุตของบุคคลที่สามจะต้องนำเสนอเป็นส่วนหนึ่งของ EPG ประสบการณ์รายการทีวีสดมาตรฐานของอุปกรณ์ สามารถใช้การแยกภาพหรือแยกหมวดหมู่สำหรับช่องบุคคลที่สาม (ดูส่วนแอพ TV ของ Android CDD) สิ่งสำคัญคือผู้ใช้สามารถค้นหาช่องที่พวกเขาติดตั้งได้

ผู้ผลิตต้องใช้แอป TV เพื่อรวมผลการค้นหาสำหรับคำขอค้นหาทั่วโลกเพื่อให้แน่ใจว่าผู้ใช้จะได้รับประสบการณ์ที่ดีที่สุด Live TV มีการใช้งาน (ดู com.android.tv.search.TvProviderSearch ) ซึ่งให้ผลลัพธ์จากอินพุตของบุคคลที่สาม (จำเป็นสำหรับความเข้ากันได้ของแพลตฟอร์ม) รวมถึงอินพุตในตัว

เวลาเปลี่ยน

สำหรับอุปกรณ์ที่ใช้ Android 6.0 ขึ้นไป แอพ TV ต้องรองรับ Android framework time shifting API นอกจากนี้ ผู้ผลิตต้องใช้การควบคุมการเล่นในแอพ TV ซึ่งอนุญาตให้ผู้ใช้หยุดชั่วคราว เล่นต่อ กรอกลับ และกรอไปข้างหน้าของการเล่น

สำหรับอินพุตทีวีที่รองรับการเลื่อนเวลา แอพ TV จำเป็นต้องแสดงการควบคุมการเล่น

ตัวควบคุมการเล่น
รูปที่ 15. ตัวควบคุมการเล่น

DVR

สำหรับอุปกรณ์ที่ใช้ Android 7.0 ขึ้นไป แอพ TV ต้องรองรับ Android framework TV recording APIs เพื่อรองรับ แสดงรายการ และเล่นโปรแกรมที่บันทึกไว้

ซึ่งช่วยให้ผู้ผลิตอุปกรณ์เชื่อมต่อระบบย่อย DVR ของตนเข้ากับ TIF ได้ และลดความพยายามในการรวมระบบลงอย่างมากเพื่อเปิดใช้งานหรือรวมฟังก์ชัน DVR บนอุปกรณ์ทีวี นอกจากนี้ยังช่วยให้บุคคลที่สามสามารถจัดหาระบบ DVR หลังการขายที่สามารถเสียบเข้ากับอุปกรณ์ Android TV ได้

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

แอปทีวียังสามารถใช้ตรรกะที่ซับซ้อนมากขึ้น เช่น ถามผู้ใช้ว่าต้องการบันทึกตอนในอนาคตทั้งหมดในซีรีส์หรือไม่ เมื่อพวกเขาขอบันทึกหนึ่งตอน

ดูแผนภาพต่อไปนี้เพื่อดูการใช้งาน DVR ที่เป็นไปได้ใน Android TV

บันทึกวิดีโอดิจิตอลใน Android TV
รูปที่ 16. การบันทึกวิดีโอดิจิตอลใน Android TV

  1. บริการอินพุตทีวีจะบอกแอปทีวีว่ามีเครื่องรับสัญญาณกี่เครื่อง เพื่อให้แอปทีวีสามารถจัดการกับความขัดแย้งของทรัพยากรที่อาจเกิดขึ้นได้
  2. แอปทีวีได้รับคำขอที่เริ่มต้นโดยผู้ใช้ในการบันทึกรายการทีวี
  3. แอพ TV เก็บตารางเวลาการบันทึกไว้ในฐานข้อมูลภายใน
  4. เมื่อถึงเวลาบันทึก แอพ TV จะส่งคำขอเพื่อปรับช่องที่เกี่ยวข้องกับการบันทึก
  5. บริการอินพุตทีวีได้รับคำขอนี้ ตอบกลับว่ามีทรัพยากรที่เหมาะสมหรือไม่ และปรับไปที่ช่อง
  6. จากนั้นแอพ TV จะส่งคำขอเพื่อเริ่มการบันทึกไปยัง TV Input Manager
  7. บริการอินพุตทีวีได้รับคำขอนี้และเริ่มบันทึก
  8. บริการอินพุตทีวีเก็บข้อมูลวิดีโอจริงในที่เก็บข้อมูล ซึ่งสามารถเป็นที่จัดเก็บข้อมูลภายนอกหรือที่เก็บข้อมูลบนคลาวด์
  9. เมื่อถึงเวลาสิ้นสุดการบันทึก แอพ TV จะส่งคำขอหยุดการบันทึกไปยัง TV Input Manager
  10. เมื่อบริการอินพุตทีวีได้รับคำขอแล้ว จะหยุดการบันทึกและเพิ่มข้อมูลเมตาที่เกี่ยวข้องไปยังผู้ให้บริการทีวี เพื่อให้แอปทีวีสามารถแสดงการบันทึกต่อผู้ใช้เมื่อมีการร้องขอ

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้คุณสมบัติการบันทึกในบริการอินพุตทีวีของคุณ โปรดดูบทความ การบันทึกรายการทีวี นี้

แหล่งข้อมูลที่เป็นประโยชน์

  • Android CDD และ API สำหรับนักพัฒนาที่มีเอกสารเป็นข้อมูลอ้างอิงขั้นสุดท้าย
  • CTS Verifier ใช้ APIs โดยเป็นส่วนหนึ่งของโปรแกรมทดสอบความเข้ากันได้ การเรียกใช้สิ่งนี้กับ Live TV อาจเป็นวิธีที่มีประโยชน์ในการดู EPG, การค้นหา, การควบคุมโดยผู้ปกครอง และข้อกำหนดอื่นๆ ในบริบทของอินพุตของบุคคลที่สาม
  • ดู กำหนดบริการอินพุตทีวีของคุณ สำหรับความคาดหวังของนักพัฒนาในพื้นที่นี้

การควบคุมโดยผู้ปกครอง

การควบคุมโดยผู้ปกครองอนุญาตให้ผู้ใช้บล็อกช่องและโปรแกรมที่ไม่ต้องการ แต่เลี่ยงการบล็อกด้วยการป้อนรหัส PIN

ความรับผิดชอบสำหรับฟังก์ชันการควบคุมโดยผู้ปกครองจะแชร์ระหว่างแอปทีวี บริการตัวจัดการอินพุตทีวี ผู้ให้บริการทีวี และอินพุตทีวี

การควบคุมโดยผู้ปกครองเป็นข้อบังคับ และครอบคลุมโดย CTS Verifier

หลายประเทศได้กำหนดระบบการให้คะแนนที่อินพุตทีวีสามารถใช้ได้ผ่าน TVContentRating API นอกจากนี้ อินพุตทีวียังสามารถลงทะเบียนระบบการจัดเรตที่กำหนดเองได้ ซึ่งแสดงโดยการทดสอบ CTS Verifier ซึ่งแนะนำการให้คะแนน 'ปลอม' สำหรับประเทศที่มีระบบการให้คะแนนมาตรฐาน ผู้ผลิตอุปกรณ์ควรรวมกรอบการควบคุมโดยผู้ปกครองของกรอบการป้อนข้อมูลของทีวีเข้ากับกลไกอื่นๆ ที่อาจรวมไว้

ผู้ให้บริการทีวี

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

ตัวจัดการอินพุตทีวี

TV Input Manager จะจัดเก็บ TvContentRating ถูกบล็อกทั้งหมด และตอบสนองต่อ isRatingBlocked() เพื่อแนะนำว่าควรบล็อกเนื้อหาที่มีการให้คะแนนที่กำหนดหรือไม่

อินพุตทีวี

อินพุตทีวีตรวจสอบว่าควรบล็อกเนื้อหาปัจจุบันหรือไม่โดยเรียก isRatingBlocked() บน TV Input Manager เมื่อการจัดประเภทเนื้อหาที่แสดงมีการเปลี่ยนแปลง (ในโปรแกรมหรือการเปลี่ยนช่อง) หรือการตั้งค่าการควบคุมโดยผู้ปกครองเปลี่ยนไป (ใน ACTION_BLOCKED_RATINGS_CHANGED และ ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED ) . หากเนื้อหาควรถูกบล็อก อินพุตทีวีจะปิดใช้งานเสียงและวิดีโอ และแจ้งแอปทีวีว่าเนื้อหาปัจจุบันถูกบล็อกโดยเรียก notifyContentBlocked(TvContentRating) หากไม่ควรบล็อกเนื้อหา อินพุตทีวีจะเปิดใช้งานเสียงและวิดีโอ และแจ้งให้แอปทีวีทราบถึงเนื้อหาปัจจุบันที่ได้รับอนุญาตโดยการเรียก notifyContentAllowed()

แอพทีวี

เพื่อเป็นเกียรติแก่ API การควบคุมโดยผู้ปกครอง และด้วยเหตุนี้จึงสร้างแพลตฟอร์มที่เข้ากันได้ แอพ TV ของระบบจำเป็นต้องจัดเตรียมวิธีให้ผู้ใช้จัดการการควบคุมโดยผู้ปกครอง รวมถึงการให้คะแนนแบบกำหนดเองใดๆ ที่ลงทะเบียนโดยแอพเฉพาะ

แอปทีวีแสดง UI รหัส PIN เมื่อได้รับแจ้งจากอินพุตทีวีว่าเนื้อหาปัจจุบันถูกบล็อกหรือเมื่อผู้ใช้พยายามดูช่องที่ถูกบล็อก

แอพ TV ไม่ได้จัดเก็บการตั้งค่าการควบคุมโดยผู้ปกครองโดยตรง เมื่อผู้ใช้เปลี่ยนการตั้งค่าการควบคุมโดยผู้ปกครอง ทุก TvContentRating ที่ถูกบล็อกจะถูกจัดเก็บโดย TV Input Manager และผู้ให้บริการทีวีจะจัดเก็บช่องที่ถูกบล็อกไว้

แอปทีวีจำเป็นต้องประกาศการอนุญาต android.permission.MODIFY_PARENTAL_CONTROLS เพื่อเปลี่ยนการตั้งค่าการควบคุมโดยผู้ปกครอง

ผู้ผลิตอุปกรณ์ได้รับการสนับสนุนให้:

  • ใช้การทดสอบการควบคุมโดยผู้ปกครองของ CTS Verifier กับแอปพลิเคชัน Live TV อ้างอิงสำหรับการสาธิตข้อกำหนดความเข้ากันได้
  • ใช้แอป Live TV เป็นข้อมูลอ้างอิงสำหรับแอป TV ของพวกเขาเอง โดยเฉพาะอย่างยิ่งโปรดดูแหล่งที่มาของ ContentRatingsManager และ RatingSystemsFragment และวิธีที่พวกเขาจัดการการให้คะแนนที่กำหนดเอง

HDMI-CEC

HDMI-CEC อนุญาตให้อุปกรณ์หนึ่งควบคุมอีกอุปกรณ์หนึ่ง ดังนั้นจึงทำให้รีโมทเดียวสามารถควบคุมอุปกรณ์หลายเครื่องในโฮมเธียเตอร์ได้ Android TV ใช้เพื่อเพิ่มความเร็วในการตั้งค่าและอนุญาตให้ควบคุมอินพุตทีวีต่างๆ จากระยะไกลผ่านแอป TV ส่วนกลาง ตัวอย่างเช่น อาจสลับอินพุต เปิดเครื่องหรือปิดเครื่องอุปกรณ์ และอื่นๆ

Android TIF ใช้ HDMI-CEC เป็นบริการควบคุม HDMI เพื่อให้ผู้ผลิตอุปกรณ์จำเป็นต้องพัฒนาไดรเวอร์ระดับต่ำที่โต้ตอบกับ Android TV HAL ที่มีน้ำหนักเบา โดยข้ามตรรกะทางธุรกิจที่ซับซ้อนมากขึ้น ในการให้บริการมาตรฐาน Android พยายามที่จะลดปัญหาความเข้ากันได้โดยลดการใช้งานที่กระจัดกระจายและการสนับสนุนคุณสมบัติที่เลือก บริการควบคุม HDMI ใช้บริการ Android ที่มีอยู่ รวมทั้งอินพุตและพลังงาน

ซึ่งหมายความว่าการใช้งาน HDMI-CEC ที่มีอยู่จะต้องได้รับการออกแบบใหม่เพื่อทำงานร่วมกับ Android TIF เราขอแนะนำแพลตฟอร์มฮาร์ดแวร์ที่มีไมโครโปรเซสเซอร์เพื่อรับการเปิดเครื่อง CEC และคำสั่งอื่นๆ

การรวม CEC บน Android TV
รูปที่ 17. การรวม CEC บน Android TV

  1. บัส CEC ได้รับคำสั่งจากแหล่งที่ใช้งานอยู่ในปัจจุบันเพื่อสลับไปยังแหล่งอื่น
  2. ไดรเวอร์ส่งคำสั่งไปยัง HDMI-CEC HAL
  3. HAL จะแจ้ง ActiveSourceChangeListeners ทั้งหมด
  4. บริการควบคุม HDMI ได้รับแจ้งถึงการเปลี่ยนแปลงแหล่งที่มาผ่าน ActiveSourceChangeListener
  5. บริการ TV Input Manager สร้างเจตนาให้แอพ TV เปลี่ยนแหล่งที่มา
  6. แอพ TV จะสร้างเซสชันตัวจัดการอินพุตทีวีสำหรับอินพุตทีวีที่เปลี่ยนไปใช้และเรียก setMain ในเซสชันนั้น
  7. เซสชันตัวจัดการอินพุตทีวีจะส่งข้อมูลนี้ไปยังอินพุตทีวี HDMI
  8. อินพุต HDMI TV ร้องขอการตั้งค่าพื้นผิวไซด์แบนด์
  9. บริการ TV Input Manager จะสร้างคำสั่งควบคุมการกำหนดเส้นทางที่สอดคล้องกันกลับไปที่ HDMI Control Service เมื่อตั้งค่าพื้นผิว

แนวทางการรวมทีวี

แอปออกอากาศ

เนื่องจากแต่ละประเทศมีข้อกำหนดเฉพาะสำหรับการออกอากาศ (MHEG, Teletext, HbbTV และอื่นๆ) ผู้ผลิตจึงควรจัดหาโซลูชันของตนเองสำหรับแอปออกอากาศ เช่น

  • MHEG: สแต็กดั้งเดิม
  • เทเลเท็กซ์: native stack
  • HbbTV: โซลูชัน HbbTV จาก Vewd Software

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

นี่คือวิธีที่แอปออกอากาศและแอป TV โต้ตอบ:

  1. แอปทีวีอยู่ในโฟกัส รับคีย์ทั้งหมด
  2. แอพ TV ส่งคีย์ (เช่น ปุ่มสีแดง) ไปยังอุปกรณ์อินพุตทีวี
  3. อุปกรณ์อินพุตทีวีผสานรวมกับสแต็กทีวีรุ่นเก่าภายใน
  4. เมื่อได้รับรหัสเปิดใช้งาน (เช่น ปุ่มสีแดง) อุปกรณ์อินพุตทีวีจะเปิดใช้งานแอปที่ออกอากาศ
  5. แอพออกอากาศโฟกัสในแอพ TV และจัดการการกระทำของผู้ใช้

สำหรับการค้นหา/แนะนำด้วยเสียง แอปออกอากาศอาจรองรับการค้นหาในแอปสำหรับการค้นหาด้วยเสียง