چارچوب ورودی تلویزیون

نماد HAL Android TV

چارچوب ورودی Android TV (TIF) تحویل محتوای زنده به Android TV را ساده می کند. Android TIF یک API استاندارد برای تولیدکنندگان فراهم می‌کند تا ماژول‌های ورودی را برای کنترل Android TV ایجاد کنند و جستجوی زنده تلویزیون و توصیه‌ها را از طریق ابرداده منتشر شده توسط ورودی تلویزیون فعال می‌کند.

این چارچوب به دنبال اجرای استانداردهای تلویزیون یا الزامات منطقه ای نیست، اما تولید کنندگان دستگاه را آسان تر می کند تا استانداردهای پخش تلویزیون دیجیتال منطقه ای را بدون پیاده سازی مجدد برآورده کنند. مستندات این بخش ممکن است برای توسعه دهندگان برنامه های شخص ثالث که می خواهند ورودی های تلویزیون سفارشی ایجاد کنند نیز مفید باشد.

اجزاء

اجرای Android TV Input Framework شامل یک مدیر ورودی تلویزیون است. TIF با برنامه TV کار می کند، یک برنامه سیستمی که نمی توان آن را با یک برنامه شخص ثالث جایگزین کرد تا به کانال های تیونر داخلی و IP دسترسی پیدا کند. برنامه تلویزیون با ماژول‌های ورودی تلویزیون که توسط سازنده دستگاه یا سایر طرف‌ها از طریق مدیر ورودی تلویزیون ارائه شده است، ارتباط برقرار می‌کند.

چارچوب ورودی تلویزیون شامل موارد زیر است:

  • ارائه دهنده تلویزیون ( com.android.providers.tv.TvProvider ): پایگاه داده ای از کانال ها، برنامه ها و مجوزهای مرتبط
  • برنامه تلویزیون ( com.android.tv.TvActivity ): برنامه ای که تعامل کاربر را مدیریت می کند
  • مدیریت ورودی تلویزیون ( android.media.tv.TvInputManager ): به ورودی های تلویزیون اجازه می دهد تا با برنامه تلویزیون ارتباط برقرار کنند.
  • ورودی تلویزیون: برنامه ای که تیونرها و پورت های ورودی فیزیکی یا مجازی را نشان می دهد
  • HAL ورودی تلویزیون (ماژول tv_input ): یک تعریف سخت افزاری که به ورودی های تلویزیون سیستم اجازه می دهد در هنگام اجرا به سخت افزار خاص تلویزیون دسترسی داشته باشند.
  • کنترل والدین: فناوری برای مسدود کردن کانال‌ها و برنامه‌ها
  • HDMI-CEC: فناوری برای کنترل از راه دور دستگاه های مختلف از طریق HDMI
  • چارچوب تیونر: چارچوبی برای ورودی تلویزیون داخلی تیونر
  • MediaCas: چارچوبی برای دسترسی مشروط
  • Tuner Resource Manager: سرویسی برای مدیریت منابع سخت افزاری ورودی تلویزیون، MediaCas و ورودی تیونر داخلی

در زیر به جزئیات این اجزا پرداخته شده است. برای مشاهده جزئیات معماری چارچوب ورودی Android TV به نمودار زیر مراجعه کنید.

مروری بر معماری TIF اندروید
شکل 1. معماری چارچوب ورودی Android TV (TIF).

جریان

در اینجا نحوه اجرای معماری آمده است:

  1. کاربر برنامه TV را می بیند و با آن تعامل دارد، یک برنامه سیستمی که نمی تواند با یک برنامه شخص ثالث جایگزین شود.
  2. برنامه TV محتوای AV را از ورودی تلویزیون نمایش می دهد.
  3. برنامه تلویزیون نمی‌تواند مستقیماً با ورودی‌های تلویزیون صحبت کند. مدیر ورودی تلویزیون وضعیت ورودی های تلویزیون را برای برنامه تلویزیون شناسایی می کند. برای جزئیات بیشتر در مورد این محدودیت‌ها، به مدیر ورودی تلویزیون در زیر مراجعه کنید.

مجوزها

  • فقط ورودی‌های تلویزیون signatureOrSystem و برنامه تلویزیون دسترسی کامل به پایگاه داده ارائه‌دهنده تلویزیون دارند و می‌توانند رویدادهای کلیدی را دریافت کنند.
  • فقط ورودی های تلویزیون سیستم می توانند از طریق سرویس مدیریت ورودی تلویزیون به HAL ورودی تلویزیون دسترسی داشته باشند. ورودی های تلویزیون از طریق جلسات مدیریت ورودی تلویزیون یک به یک قابل دسترسی هستند.
  • ورودی‌های تلویزیون شخص ثالث به پایگاه داده ارائه‌دهنده تلویزیون دسترسی بسته‌شده دارند و فقط برای ردیف‌های بسته منطبق می‌توانند بخوانند/نوشتن کنند.
  • ورودی‌های تلویزیون شخص ثالث می‌توانند محتوا یا محتوای خود را از ورودی‌های تلویزیون عبوری سازنده دستگاه مانند HDMI1 نمایش دهند. آن‌ها نمی‌توانند محتوا را از ورودی‌های تلویزیون غیرقابل عبور، مانند تیونر داخلی یا IPTV، نمایش دهند.
  • مجوز TV_INPUT_HARDWARE برای برنامه ورودی تلویزیون سخت‌افزاری، به سرویس مدیریت ورودی تلویزیون سیگنال می‌دهد تا به سرویس ورودی تلویزیون در هنگام راه‌اندازی اطلاع دهد تا با سرویس مدیریت ورودی تلویزیون تماس بگیرد و ورودی‌های تلویزیون آن را اضافه کند. این مجوز به یک برنامه ورودی تلویزیون سخت افزاری اجازه می دهد از چندین ورودی تلویزیون در هر سرویس ورودی تلویزیون پشتیبانی کند و همچنین بتواند ورودی های تلویزیون پشتیبانی شده خود را به صورت پویا اضافه و حذف کند.

ارائه دهنده تلویزیون

پایگاه داده TV Provider کانال ها و برنامه ها را از ورودی های تلویزیون ذخیره می کند. ارائه‌دهنده تلویزیون همچنین مجوزهای مرتبط را منتشر و مدیریت می‌کند تا ورودی‌های تلویزیون فقط رکوردهای خودشان را ببینند. به عنوان مثال، یک ورودی تلویزیون خاص فقط می‌تواند کانال‌ها و برنامه‌هایی را که عرضه کرده است ببیند و دسترسی به کانال‌ها و برنامه‌های ورودی تلویزیون دیگر ممنوع است.

ارائه دهنده تلویزیون "ژانر پخش" را به "ژانر متعارف" به صورت داخلی نگاشت می کند. ورودی‌های تلویزیون مسئول پر کردن «ژانر پخش» با مقدار استاندارد پخش اصلی هستند و قسمت «ژانر متعارف» به طور خودکار با ژانر مرتبط صحیح از android.provider.TvContract.Genres پر می‌شود. به عنوان مثال، با استاندارد پخش ATSC A/65 و برنامه با ژانر 0x25 (به معنی "ورزشی")، ورودی تلویزیون "ژانر پخش" را با رشته "ورزشی" پر می کند و ارائه دهنده تلویزیون فیلد "ژانر متعارف" را پر می کند. مقدار ترسیم شده android.provider.TvContract.Genres.SPORTS .

برای مشاهده جزئیات ارائه دهنده تلویزیون، نمودار زیر را ببینید.

ارائه دهنده Android TV
شکل 2. ارائه دهنده Android TV

فقط برنامه های موجود در پارتیشن سیستم ممتاز می توانند کل پایگاه داده ارائه دهنده تلویزیون را بخوانند.

ورودی های تلویزیون عبوری کانال ها و برنامه ها را ذخیره نمی کنند.

علاوه بر فیلدهای استاندارد برای کانال‌ها و برنامه‌ها، پایگاه داده ارائه‌دهنده تلویزیون همچنین یک فیلد نوع 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 : فقط برای برنامه های سیستم قابل مشاهده است. محدود کردن کانال برای مشاهده توسط حساب های نامعتبر بدون وارد کردن کد پین. COLUMN_LOCKED = 1 به این معنی است که کانال باید توسط کنترل والدین محافظت شود.

برای فهرست جامع‌تر فیلدها، android/frameworks/base/media/java/android/media/tv/TvContract.java ببینید.

مجوزها و کنترل دسترسی

همه فیلدها برای هر کسی که به ردیف مربوطه دسترسی دارد قابل مشاهده است. هیچ فیلدی مستقیماً در دسترس کاربران نیست. آنها فقط آنچه را که برنامه تلویزیون، برنامه های سیستم یا ورودی های تلویزیون ظاهر می شود، می بینند.

  • هر ردیف دارای PACKAGE_NAME است، بسته (برنامه) که صاحب آن ردیف است، که در Query، Insert، Update از طریق TvProvider.java بررسی شده است. یک ورودی تلویزیون ممکن است فقط به اطلاعاتی که نوشته است دسترسی داشته باشد و از اطلاعات ارائه شده توسط سایر ورودی های تلویزیون محصور شده است.
  • مجوزهای READ, WRITE از طریق AndroidManifest.xml (نیاز به رضایت کاربر) برای تعیین کانال های موجود.
  • فقط برنامه های signatureOrSystem می توانند مجوز ACCESS_ALL_EPG_DATA را برای دسترسی به کل پایگاه داده کسب کنند.

مدیر ورودی تلویزیون

مدیر ورودی تلویزیون یک API سیستم مرکزی را به چارچوب کلی ورودی تلویزیون Android ارائه می دهد. تعامل بین برنامه ها و ورودی های تلویزیون را داوری می کند و عملکرد کنترل والدین را فراهم می کند. جلسات مدیریت ورودی تلویزیون باید یک به یک با ورودی های تلویزیون ایجاد شود. مدیر ورودی تلویزیون اجازه دسترسی به ورودی های تلویزیون نصب شده را می دهد تا برنامه ها ممکن است:

  • ورودی های تلویزیون را فهرست کنید و وضعیت آنها را بررسی کنید
  • جلسات ایجاد کنید و شنوندگان را مدیریت کنید

برای جلسات، یک ورودی تلویزیون را می‌توان توسط برنامه تلویزیونی فقط به URIهایی که به پایگاه داده ارائه‌دهنده تلویزیون اضافه کرده است تنظیم کرد، به جز ورودی‌های تلویزیونی گذرا که می‌توانند با استفاده از TvContract.buildChannelUriForPassthroughInput() تنظیم شوند. یک ورودی تلویزیون نیز ممکن است دارای تنظیم صدا باشد. ورودی های تلویزیون ارائه شده و امضا شده توسط سازنده دستگاه (برنامه های امضا) یا سایر برنامه های نصب شده در پارتیشن سیستم به کل پایگاه داده ارائه دهنده تلویزیون دسترسی خواهند داشت. از این دسترسی می توان برای ساخت برنامه هایی برای مرور و جستجو در همه کانال ها و برنامه های تلویزیونی موجود استفاده کرد.

یک برنامه ممکن است یک TvInputCallback با android.media.tv.TvInputManager ایجاد و ثبت کند تا با تغییر وضعیت ورودی تلویزیون یا افزودن یا حذف ورودی تلویزیون دوباره فراخوانی شود. به عنوان مثال، یک برنامه تلویزیونی می‌تواند وقتی ورودی تلویزیون قطع می‌شود، با نمایش آن به عنوان قطع شده و جلوگیری از انتخاب آن واکنش نشان دهد.

مدیر ورودی تلویزیون ارتباط بین برنامه تلویزیون و ورودی های تلویزیون را خلاصه می کند. رابط استاندارد مدیریت ورودی تلویزیون و ورودی تلویزیون به چندین سازنده دستگاه اجازه می دهد تا برنامه های تلویزیونی خود را ایجاد کنند و در عین حال به همه ورودی های تلویزیون شخص ثالث کمک می کند تا روی همه برنامه های تلویزیون کار کنند.

ورودی های تلویزیون

ورودی‌های تلویزیون برنامه‌های Android هستند، به این معنا که دارای AndroidManifest.xml هستند و نصب می‌شوند (از طریق Play، از پیش نصب‌شده یا بارگذاری‌شده جانبی). Android TV از برنامه های از پیش نصب شده سیستم، برنامه های امضا شده توسط سازنده دستگاه و ورودی های تلویزیون شخص ثالث پشتیبانی می کند.

برخی از ورودی‌ها، مانند ورودی HDMI یا ورودی تیونر داخلی، فقط توسط سازنده قابل ارائه هستند زیرا مستقیماً با سخت‌افزار زیرین صحبت می‌کنند. موارد دیگر، مانند IPTV، جابجایی مکان، و STB خارجی، می توانند توسط اشخاص ثالث به عنوان APK در فروشگاه Google Play عرضه شوند. پس از دانلود و نصب، ورودی جدید را می توان در برنامه تلویزیون انتخاب کرد.

نمونه ورودی عبوری

ورودی سیستم Android TV
شکل 3. ورودی سیستم Android TV

در این مثال، ورودی تلویزیون ارائه شده توسط سازنده دستگاه قابل اعتماد است و دسترسی کامل به ارائه دهنده تلویزیون دارد. به عنوان یک ورودی تلویزیونی گذرا، هیچ کانال یا برنامه ای را در ارائه دهنده تلویزیون ثبت نمی کند. برای به دست آوردن URI مورد استفاده برای ارجاع به ورودی عبور، از روش ابزار android.media.tv.TvContract buildChannelUriForPassthroughInput(String inputId) استفاده کنید. برنامه تلویزیون با مدیر ورودی تلویزیون ارتباط برقرار می کند تا به ورودی تلویزیون HDMI برسد.

نمونه تیونر داخلی

ورودی تیونر داخلی Android TV
شکل 4. ورودی تیونر داخلی Android TV

در این مثال، ورودی تلویزیون تیونر داخلی ارائه شده توسط سازنده دستگاه قابل اعتماد است و به ارائه دهنده تلویزیون دسترسی کامل دارد.

نمونه ورودی شخص ثالث

ورودی شخص ثالث Android TV
شکل 5. ورودی شخص ثالث Android TV

در این مثال، ورودی تلویزیون STB خارجی توسط شخص ثالث ارائه شده است. از آنجایی که ورودی تلویزیون نمی تواند مستقیماً به فید ویدیوی HDMI ورودی دسترسی پیدا کند، باید از طریق مدیر ورودی تلویزیون رفته و از ورودی تلویزیون HDMI ارائه شده توسط سازنده دستگاه استفاده کند.

از طریق مدیر ورودی تلویزیون، ورودی تلویزیون STB خارجی می تواند با ورودی تلویزیون HDMI صحبت کند و از آن بخواهد که ویدیو را در HDMI1 نشان دهد. بنابراین ورودی تلویزیون STB می تواند تلویزیون را کنترل کند در حالی که ورودی تلویزیون HDMI ارائه شده توسط سازنده فیلم را رندر می کند.

مثال تصویر در تصویر (PIP).

رویدادهای کلیدی Android TV
شکل 6. رویدادهای کلیدی Android TV

نمودار بالا نشان می دهد که چگونه دکمه های یک کنترل از راه دور برای نمایش تصویر در تصویر (PIP) به ورودی تلویزیون خاص منتقل می شوند. این فشارهای دکمه توسط درایور سخت‌افزار ارائه‌شده توسط سازنده دستگاه تفسیر می‌شوند و اسکن‌کدهای سخت‌افزاری را به کدهای کلید اندروید تبدیل می‌کنند و آنها را به عملکردهای InputReader و InputDispatcher به عنوان KeyEvents به خط لوله ورودی استاندارد Android منتقل می‌کنند. اینها به نوبه خود باعث ایجاد رویدادها در برنامه تلویزیونی می شوند اگر در فوکوس باشد.

فقط ورودی‌های تلویزیون سیستم واجد شرایط دریافت InputEvents هستند و فقط در صورتی که مجوز سیستم RECEIVE_INPUT_EVENT را داشته باشند. ورودی تلویزیون مسئول تعیین InputEvents برای مصرف است و باید به برنامه TV اجازه دهد تا کلیدهایی را که نیازی به مصرف ندارد کنترل کند.

برنامه TV مسئول دانستن اینکه کدام سیستم ورودی تلویزیون فعال است، یعنی توسط کاربر انتخاب شده است، و ابهام زدایی از KeyEvents ورودی و هدایت آنها به جلسه مدیریت ورودی تلویزیون صحیح، فراخوانی dispatchInputEvent() برای انتقال رویداد به ورودی تلویزیون مرتبط است. .

نمونه ورودی MHEG-5

نمودار زیر نمای دقیق تری از نحوه مسیریابی KeyEvents از طریق TIF اندروید را نشان می دهد.

مثال دکمه قرمز Android TV
شکل 7. مثال دکمه قرمز تلویزیون Android

این جریان یک برنامه دکمه قرمز را به تصویر می‌کشد که در اروپا رایج است و به کاربران اجازه می‌دهد به برنامه‌های تعاملی روی تلویزیون خود دسترسی داشته باشند. یک برنامه را می توان از طریق این جریان حمل و نقل تحویل داد. هنگامی که دکمه کلیک می شود، به کاربران امکان می دهد با این برنامه های پخش ارتباط برقرار کنند. به عنوان مثال، ممکن است از این برنامه های پخش برای دسترسی به صفحات وب مرتبط یا امتیازات ورزشی استفاده کنید.

برای آشنایی با نحوه تعامل برنامه‌های پخش با برنامه تلویزیون، بخش برنامه پخش را ببینید.

در این مثال:

  1. برنامه تلویزیون در فوکوس است و همه کلیدها را دریافت می کند.
  2. KeyEvents (به عنوان مثال دکمه قرمز) به عنوان InputEvents.
  3. ورودی تلویزیون سیستم با پشته MHEG-5 ادغام می شود و دارای مجوز سیستم RECEIVE_INPUT_EVENT است.
  4. با دریافت کد کلید فعال سازی (به عنوان مثال دکمه قرمز)، ورودی تلویزیون برنامه پخش را فعال می کند.
  5. ورودی تلویزیون KeyEvents به‌عنوان InputEvents مصرف می‌کند و برنامه پخش تمرکز دارد و InputEvents تا زمانی که رد شود مدیریت می‌کند.

توجه : ورودی های تلویزیون شخص ثالث هرگز کلید را دریافت نمی کنند.

ورودی تلویزیون HAL

ورودی تلویزیون HAL به توسعه ورودی های تلویزیون برای دسترسی به سخت افزار خاص تلویزیون کمک می کند. همانند سایر HAL های اندروید، HAL ورودی تلویزیون ( tv_input ) در درخت منبع AOSP موجود است و فروشنده اجرای آن را توسعه می دهد.

برنامه تلویزیون

برنامه TV سیستم محتوای تلویزیون زنده را به کاربر ارائه می دهد. یک برنامه تلویزیونی مرجع (تلویزیون زنده) در کنار پلتفرم اندروید ارائه شده است که می‌تواند به‌صورت همان‌طور که هست، سفارشی‌سازی شده، توسعه‌یافته یا توسط سازندگان دستگاه جایگزین شود. کد منبع در پروژه متن باز اندروید موجود است و می توانید در مقاله برنامه Reference TV با آن شروع کنید.

سازندگان دستگاه ممکن است برنامه‌های تلویزیون خود را برای پیاده‌سازی ویژگی‌های سازنده دستگاه یا کشور توسعه دهند، اما این در محدوده TIF یا برنامه تلویزیون مرجع نیست.

حداقل، برنامه تلویزیون سیستم باید وظایف زیر را انجام دهد:

راه اندازی و پیکربندی

  • تشخیص خودکار ورودی های تلویزیون
  • اجازه دهید ورودی‌های تلویزیون راه‌اندازی کانال را آغاز کنند
  • تنظیمات والدین را کنترل کنید
  • ویرایش کانال ها

در حال مشاهده

  • به همه کانال های تلویزیونی دسترسی داشته باشید و پیمایش کنید
  • دسترسی به نوار اطلاعات برنامه تلویزیونی
  • نمایش داده های راهنمای برنامه نویسی الکترونیکی (EPG).
  • پشتیبانی از چندین آهنگ صوتی و زیرنویس
  • چالش پین کنترل والدین را ارائه کنید
  • اجازه روکش رابط کاربری ورودی تلویزیون برای استاندارد تلویزیون (HbbTV و غیره)
  • نتایج جستجو را برای کانال‌ها و برنامه‌های تلویزیونی پر کنید
  • نمایش کارت های پیوند برنامه
  • پشتیبانی از API های تغییر زمان
  • عملکرد DVR را مدیریت کنید و از APIهای ضبط تلویزیون پشتیبانی کنید

این مجموعه ویژگی مطابق با نسخه‌های جدید اندرویدی که پلتفرم APIهای TIF گسترش یافته است، افزایش می‌یابد. CTS Verifier پوشش تست سازگاری را فراهم می کند.

پشتیبانی از ورودی های تلویزیون شخص ثالث

Android TV API های توسعه دهنده را برای ورودی های تلویزیون شخص ثالث فراهم می کند و برنامه های نصب شده را قادر می سازد کانال های نرم افزاری را به تجربه تلویزیون زنده ارائه دهند. برای اطمینان از اجرای سازگار دستگاه Android، برنامه TV سیستم برخی از مسئولیت‌ها را در رابطه با قرار دادن ورودی‌ها و کانال‌های تلویزیون شخص ثالث برای کاربر دارد. برنامه تلویزیون زنده مرجع یک پیاده سازی سازگار را ارائه می دهد. در صورت جایگزینی برنامه تلویزیون سیستم، سازندگان دستگاه باید اطمینان حاصل کنند که برنامه های خودشان سازگاری مشابهی را ارائه می دهند تا انتظارات توسعه دهندگان را در همه دستگاه های Android TV برآورده کنند.

برنامه تلویزیون سیستم باید ورودی های شخص ثالث را در کنار سرویس تلویزیون زنده پیش فرض دستگاه قرار دهد. وعده API های توسعه دهنده این است که کاربران می توانند کانال ها را (پس از نصب) در تجربه تلویزیونی استاندارد خود پیدا کنند.

تمایز بصری بین کانال های داخلی و کانال های شخص ثالث مجاز است، همانطور که در بخش برنامه تلویزیونی CDD Android تعریف شده است.

بخش‌های زیر نشان می‌دهد که چگونه برنامه تلویزیون زنده الزامات CDD را برآورده می‌کند.

راه اندازی کانال جدید

افزودن ورودی‌ها/کانال‌های شخص ثالث جدید با یافتن و نصب ورودی تلویزیون از یک فروشگاه برنامه، مانند Google Play، توسط کاربر آغاز می‌شود.

برخی از ورودی های تلویزیون شخص ثالث به طور خودکار کانال ها را به پایگاه داده TvProvider اضافه می کنند. با این حال اکثر آنها یک فعالیت راه اندازی را ارائه می دهند تا کاربر را قادر سازد کانال های خود را راه اندازی کند، جزئیات ورود به سیستم و سایر اقدامات را ارائه دهد. برنامه تلویزیون سیستم باید اطمینان حاصل کند که کاربر می‌تواند این فعالیت راه‌اندازی را فعال کند، به همین دلیل است که CDD به ورودی‌های شخص ثالث نیاز دارد که حداقل اقدامات ناوبری را از برنامه تلویزیون اصلی دور کنند.

برنامه تلویزیون زنده مرجع منوی منابع کانال را برای دسترسی به ورودی ها فراهم می کند.

به تنظیمات بروید
شکل 8. به تنظیمات بروید.

در تنظیمات به منبع کانال بروید
شکل 9. در تنظیمات به منابع کانال بروید.

منبع خود را از لیست انتخاب کنید.
شکل 10. منبع خود را از لیست انتخاب کنید.

کانال ها را از منبع خود اضافه کنید
شکل 11. کانال ها را از منبع خود اضافه کنید.

علاوه بر این، پس از نصب TvInput جدید، یک کارت اعلان در بالای منوی برنامه تلویزیون نشان داده می‌شود تا کاربر را مستقیماً به تنظیمات هدایت کند:

اعلانی که نشان می دهد منابع کانال جدید در دسترس هستند.
شکل 12. اطلاعیه ای که نشان می دهد منابع کانال جدید در دسترس هستند.

اگر کاربر از طریق اعلان اقدام کند، می‌تواند منابع خود را همانطور که در شکل 10 مشاهده می‌شود تنظیم کند.

برای انتظارات توسعه دهندگان در این زمینه، به Define Your TV Input Service مراجعه کنید.

لیست کانال را سفارشی کنید

سازندگان دستگاه ممکن است یک رابط کاربری برای مخفی کردن کانال‌های خاص ارائه دهند و کاربران را قادر به مدیریت EPG‌های خود کنند. تلویزیون زنده شامل این امکانات است.

لیست کانال را در تنظیمات باز کنید.
شکل 13. لیست کانال را در تنظیمات باز کنید.

لیست کانال خود را سفارشی کنید
شکل 14. لیست کانال خود را سفارشی کنید.

EPG

توسعه دهندگان ورودی شخص ثالث باید اطمینان داشته باشند که کاربران می توانند به راحتی در طول استفاده عمومی، در همه دستگاه های Android TV سازگار به کانال های خود پیمایش کنند.

کانال‌های ورودی‌های شخص ثالث باید به عنوان بخشی از EPG تجربه تلویزیون زنده استاندارد دستگاه ارائه شوند. می‌توان از جداسازی بصری یا دسته‌های جداگانه برای کانال‌های شخص ثالث استفاده کرد (به بخش برنامه تلویزیونی CDD Android مراجعه کنید) - نکته کلیدی این است که کاربران می‌توانند کانال‌هایی را که نصب کرده‌اند پیدا کنند.

تولیدکنندگان باید برنامه TV را برای گنجاندن نتایج جستجو برای درخواست‌های جستجوی جهانی اجرا کنند تا از بهترین تجربه کاربر اطمینان حاصل کنند. Live TV یک پیاده‌سازی را ارائه می‌کند (نگاه کنید به کدام یک از ورودی‌های شخص ثالث (که برای سازگاری با پلتفرم لازم است) و همچنین ورودی‌های داخلی ارائه می‌شود.

جابجایی زمان

برای دستگاه‌های اندروید 6.0 و بالاتر، برنامه تلویزیون باید از APIهای تغییر زمان چارچوب Android پشتیبانی کند. علاوه بر این، سازندگان باید کنترل‌های پخش را در برنامه تلویزیون پیاده‌سازی کنند، که به کاربران اجازه می‌دهد پخش را متوقف کنند، از سر بگیرند، به عقب برگردانند و سریع به جلو بروند.

برای ورودی‌های تلویزیونی که از تغییر زمان پشتیبانی می‌کنند، برنامه تلویزیون باید کنترل‌های پخش را نمایش دهد.

کنترل های پخش
شکل 15. کنترل های پخش

دستگاه دی وی آر

برای دستگاه‌های Android 7.0 و بالاتر، برنامه TV باید از APIهای ضبط تلویزیون چارچوب Android پشتیبانی کند تا برنامه‌های ضبط شده را پشتیبانی، فهرست و پخش کند.

این به سازندگان دستگاه اجازه می‌دهد تا زیرسیستم‌های DVR خود را به TIF متصل کنند و تلاش یکپارچه‌سازی را که برای فعال کردن یا یکپارچه‌سازی عملکرد DVR در یک دستگاه تلویزیون لازم است، به‌طور چشمگیری کاهش دهند. همچنین به اشخاص ثالث امکان می‌دهد تا سیستم‌های DVR پس از فروش را که می‌توانند به دستگاه Android TV وصل شوند، ارائه دهند.

برنامه TV علاوه بر ضبط محتوای زنده، تضاد منابع را نیز مدیریت می کند. به عنوان مثال، اگر دستگاه دارای دو تیونر باشد، می تواند دو برنامه را همزمان ضبط کند. اگر کاربر بخواهد سه مورد را ضبط کند، برنامه تلویزیون باید تضاد را مدیریت کند و باید اعلانی را ارائه کند یا درخواست کند که کاربر اولویتی را برای این درخواست‌ها زمان‌بندی کند.

برنامه‌های تلویزیونی همچنین می‌توانند منطق پیچیده‌تری را پیاده‌سازی کنند، مانند اینکه از کاربر بپرسد که آیا می‌خواهد تمام قسمت‌های آینده یک سریال را در صورت درخواست ضبط یک قسمت ضبط کند یا خیر.

نمودار زیر را برای مشاهده اجرای احتمالی DVR در Android TV مشاهده کنید.

فیلمبرداری دیجیتال در Android TV
شکل 16. ضبط ویدئوی دیجیتال در Android TV

  1. سرویس ورودی تلویزیون به برنامه تلویزیون می‌گوید چه تعداد تیونر در دسترس است تا برنامه تلویزیون بتواند تضاد احتمالی منابع را مدیریت کند.
  2. برنامه تلویزیون درخواستی برای ضبط یک برنامه تلویزیونی توسط کاربر دریافت می کند.
  3. برنامه TV برنامه ضبط را در پایگاه داده داخلی خود ذخیره می کند.
  4. وقتی زمان ضبط فرا می رسد، برنامه تلویزیون درخواستی را برای تنظیم کانال مرتبط با ضبط ارسال می کند.
  5. سرویس ورودی تلویزیون این درخواست را دریافت می کند، با وجود یا نبودن منابع مناسب پاسخ می دهد و کانال را تنظیم می کند.
  6. سپس برنامه TV درخواستی را برای شروع ضبط به مدیر ورودی تلویزیون ارسال می کند.
  7. سرویس ورودی تلویزیون این درخواست را دریافت کرده و شروع به ضبط می کند.
  8. سرویس ورودی تلویزیون داده های واقعی ویدیو را در حافظه خود ذخیره می کند که می تواند حافظه خارجی یا فضای ذخیره سازی ابری باشد.
  9. وقتی زمان اتمام ضبط فرا می رسد، برنامه TV درخواست توقف ضبط را به مدیر ورودی تلویزیون ارسال می کند.
  10. هنگامی که سرویس ورودی تلویزیون درخواست را دریافت کرد، ضبط را متوقف می‌کند و متادیتای مرتبط خود را به ارائه‌دهنده تلویزیون اضافه می‌کند تا برنامه تلویزیون بتواند در صورت درخواست، ضبط را به کاربران نشان دهد.

برای اطلاعات بیشتر در مورد اجرای ویژگی‌های ضبط در سرویس ورودی تلویزیون، به این مقاله ضبط تلویزیون مراجعه کنید.

منابع مفید

  • CDD Android و APIهای توسعه‌دهنده مستند، مرجع قطعی هستند.
  • CTS Verifier APIها را به عنوان بخشی از برنامه تست سازگاری تمرین می کند. اجرای این برنامه در مقابل تلویزیون زنده ممکن است راهی مفید برای مشاهده EPG، جستجو، کنترل والدین و سایر الزامات در زمینه ورودی‌های شخص ثالث باشد.
  • برای انتظارات توسعه دهندگان در این زمینه، به Define Your TV Input Service مراجعه کنید.

کنترل والدین

کنترل والدین به کاربر اجازه می دهد کانال ها و برنامه های ناخواسته را مسدود کند، اما با وارد کردن یک کد پین، بلوک را دور بزند.

مسئولیت عملکرد کنترل والدین بین برنامه تلویزیون، سرویس مدیریت ورودی تلویزیون، ارائه دهنده تلویزیون و ورودی تلویزیون مشترک است.

کنترل والدین اجباری است و تحت پوشش CTS Verifier است.

تعدادی از کشورها سیستم های رتبه بندی را تعریف کرده اند که ورودی های تلویزیون می توانند از طریق TVContentRating API استفاده کنند. به‌علاوه، ورودی‌های تلویزیون می‌توانند سیستم‌های رتبه‌بندی سفارشی خود را ثبت کنند، همانطور که در آزمون تأییدکننده CTS نشان داده شده است، که رتبه‌بندی «جعلی» را معرفی می‌کند. برای کشورهایی که یک سیستم رتبه‌بندی استاندارد وجود دارد، سازندگان دستگاه تشویق می‌شوند که کنترل والدین چارچوب ورودی تلویزیون را با مکانیسم‌های دیگری که ممکن است شامل شوند ترکیب کنند.

ارائه دهنده تلویزیون

هر ردیف کانال دارای یک فیلد COLUMN_LOCKED است که برای قفل کردن کانال‌های خاص از مشاهده بدون وارد کردن کد پین استفاده می‌شود. فیلد برنامه COLUMN_CONTENT_RATING برای نمایش در نظر گرفته شده است و برای اعمال کنترل والدین استفاده نمی شود.

مدیر ورودی تلویزیون

مدیر ورودی تلویزیون هر TvContentRating مسدود شده را ذخیره می کند و به isRatingBlocked() پاسخ می دهد تا توصیه کند آیا محتوای دارای رتبه بندی داده شده باید مسدود شود.

ورودی تلویزیون

ورودی تلویزیون با فراخوانی isRatingBlocked() در مدیر ورودی تلویزیون، هنگامی که رتبه بندی محتوای نمایش داده شده (در برنامه یا تغییر کانال)، یا تنظیمات کنترل والدین تغییر کرده است (در ACTION_BLOCKED_RATINGS_CHANGED و ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED ) باید محتوای فعلی مسدود شود، بررسی می کند. . اگر محتوا مسدود شود، ورودی تلویزیون صدا و تصویر را غیرفعال می‌کند و با فراخوانی notifyContentBlocked(TvContentRating) به برنامه تلویزیون اطلاع می‌دهد که محتوای فعلی مسدود شده است. اگر محتوا نباید مسدود شود، ورودی تلویزیون صدا و تصویر را فعال می‌کند و با فراخوانی notifyContentAllowed() به برنامه TV اطلاع می‌دهد که محتوای فعلی مجاز است.

برنامه تلویزیون

برای ارج نهادن به APIهای کنترل والدین، و در نتیجه ایجاد یک پلتفرم سازگار، برنامه TV سیستم باید راهی برای مدیریت کنترل والدین، از جمله برای هر رتبه بندی سفارشی ثبت شده توسط برنامه های خاص، برای کاربران فراهم کند.

برنامه تلویزیون زمانی که از طریق ورودی تلویزیون مطلع می شود که محتوای فعلی مسدود شده است یا زمانی که کاربر تلاش می کند یک کانال مسدود شده را مشاهده کند، یک UI کد پین را نشان می دهد.

برنامه تلویزیون مستقیماً تنظیمات کنترل والدین را ذخیره نمی کند. هنگامی که کاربر تنظیمات کنترل والدین را تغییر می دهد، هر TvContentRating مسدود شده توسط مدیر ورودی تلویزیون ذخیره می شود و کانال های مسدود شده توسط ارائه دهنده تلویزیون ذخیره می شوند.

برنامه TV باید مجوز android.permission.MODIFY_PARENTAL_CONTROLS برای تغییر تنظیمات کنترل والدین اعلام کند.

تولید کنندگان دستگاه تشویق می شوند:

  • آزمایش کنترل‌های والدینی CTS Verifier را در برابر برنامه تلویزیونی زنده مرجع برای نمایش الزامات سازگاری انجام دهید.
  • از برنامه Live TV به عنوان مرجع برای برنامه تلویزیونی خود استفاده کنید: به ویژه به منبع ContentRatingsManager و RatingSystemsFragment و نحوه مدیریت آنها با رتبه بندی های سفارشی مراجعه کنید.

HDMI-CEC

HDMI-CEC به یک دستگاه اجازه می دهد تا دستگاه دیگری را کنترل کند، در نتیجه یک ریموت واحد را قادر می سازد چندین دستگاه را در یک سینمای خانگی کنترل کند. Android TV برای سرعت بخشیدن به تنظیمات و امکان کنترل از راه دور بر روی ورودی های مختلف تلویزیون از طریق برنامه تلویزیون مرکزی استفاده می شود. به عنوان مثال، ممکن است ورودی‌ها را تغییر دهد، دستگاه‌ها را روشن یا خاموش کند و موارد دیگر.

Android TIF HDMI-CEC را به‌عنوان سرویس کنترل HDMI پیاده‌سازی می‌کند تا سازندگان دستگاه‌ها صرفاً نیاز به توسعه درایورهای سطح پایینی داشته باشند که با HAL سبک‌وزن Android TV تعامل داشته باشند و منطق تجاری پیچیده‌تر را نادیده بگیرند. در ارائه یک پیاده سازی استاندارد، اندروید به دنبال کاهش مشکلات سازگاری با کاهش پیاده سازی های پراکنده و پشتیبانی از ویژگی های انتخابی است. سرویس کنترل HDMI از خدمات موجود اندروید، از جمله ورودی و برق استفاده می کند.

این بدان معناست که پیاده‌سازی‌های 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 برای تنظیم سطح باند جانبی درخواست می کند.
  9. هنگامی که سطح تنظیم می شود، سرویس مدیریت ورودی تلویزیون، فرمان کنترل مسیریابی مربوطه را به سرویس کنترل HDMI ایجاد می کند.

دستورالعمل های یکپارچه سازی تلویزیون

برنامه پخش

از آنجایی که هر کشور الزامات ویژه پخش دارد (MHEG، Teletext، HbbTV و موارد دیگر)، از سازندگان انتظار می‌رود که راه‌حل‌های خود را برای برنامه پخش ارائه کنند، به عنوان مثال:

  • MHEG: پشته بومی
  • تله تکست: پشته بومی
  • HbbTV: راه حل HbbTV از Vewd Software

در نسخه Android L، Android TV از سازندگان دستگاه انتظار دارد که از یکپارچه‌کننده‌های سیستم یا راه‌حل‌های Android برای پشته‌های تلویزیون منطقه‌ای استفاده کنند، سطح را به پشته‌های نرم‌افزار تلویزیون منتقل کنند یا کد کلید لازم را برای تعامل با پشته‌های قدیمی ارسال کنند.

در اینجا نحوه تعامل برنامه پخش و برنامه تلویزیونی آمده است:

  1. برنامه تلویزیون در فوکوس است و همه کلیدها را دریافت می کند.
  2. برنامه تلویزیون کلیدها (به عنوان مثال دکمه قرمز) را به دستگاه ورودی تلویزیون منتقل می کند.
  3. دستگاه ورودی تلویزیون به صورت داخلی با پشته تلویزیون قدیمی ادغام می شود.
  4. با دریافت یک کد کلید فعال سازی (به عنوان مثال دکمه قرمز)، دستگاه ورودی تلویزیون برنامه های پخش را فعال می کند.
  5. یک برنامه پخش در برنامه تلویزیون تمرکز می کند و اقدامات کاربر را مدیریت می کند.

برای جستجوی صوتی/توصیه، برنامه پخش ممکن است از جستجوی درون برنامه ای برای جستجوی صوتی پشتیبانی کند.

، نماد HAL Android TV

چارچوب ورودی Android TV (TIF) تحویل محتوای زنده به Android TV را ساده می کند. Android TIF یک API استاندارد برای تولیدکنندگان فراهم می‌کند تا ماژول‌های ورودی را برای کنترل Android TV ایجاد کنند و جستجوی زنده تلویزیون و توصیه‌ها را از طریق ابرداده منتشر شده توسط ورودی تلویزیون فعال می‌کند.

این چارچوب به دنبال اجرای استانداردهای تلویزیون یا الزامات منطقه ای نیست، اما تولید کنندگان دستگاه را آسان تر می کند تا استانداردهای پخش تلویزیون دیجیتال منطقه ای را بدون پیاده سازی مجدد برآورده کنند. مستندات این بخش ممکن است برای توسعه دهندگان برنامه های شخص ثالث که می خواهند ورودی های تلویزیون سفارشی ایجاد کنند نیز مفید باشد.

اجزاء

اجرای Android TV Input Framework شامل یک مدیر ورودی تلویزیون است. TIF با برنامه TV کار می کند، یک برنامه سیستمی که نمی توان آن را با یک برنامه شخص ثالث جایگزین کرد تا به کانال های تیونر داخلی و IP دسترسی پیدا کند. برنامه تلویزیون با ماژول‌های ورودی تلویزیون که توسط سازنده دستگاه یا سایر طرف‌ها از طریق مدیر ورودی تلویزیون ارائه شده است، ارتباط برقرار می‌کند.

چارچوب ورودی تلویزیون شامل موارد زیر است:

  • ارائه دهنده تلویزیون ( com.android.providers.tv.TvProvider ): پایگاه داده ای از کانال ها، برنامه ها و مجوزهای مرتبط
  • برنامه تلویزیون ( com.android.tv.TvActivity ): برنامه ای که تعامل کاربر را مدیریت می کند
  • مدیریت ورودی تلویزیون ( android.media.tv.TvInputManager ): به ورودی های تلویزیون اجازه می دهد تا با برنامه تلویزیون ارتباط برقرار کنند.
  • ورودی تلویزیون: برنامه ای که تیونرها و پورت های ورودی فیزیکی یا مجازی را نشان می دهد
  • HAL ورودی تلویزیون (ماژول tv_input ): یک تعریف سخت افزاری که به ورودی های تلویزیون سیستم اجازه می دهد در هنگام اجرا به سخت افزار خاص تلویزیون دسترسی داشته باشند.
  • کنترل والدین: فناوری برای مسدود کردن کانال‌ها و برنامه‌ها
  • HDMI-CEC: فناوری برای کنترل از راه دور دستگاه های مختلف از طریق HDMI
  • چارچوب تیونر: چارچوبی برای ورودی تلویزیون داخلی تیونر
  • MediaCas: چارچوبی برای دسترسی مشروط
  • Tuner Resource Manager: سرویسی برای مدیریت منابع سخت افزاری ورودی تلویزیون، MediaCas و ورودی تیونر داخلی

در زیر به جزئیات این اجزا پرداخته شده است. برای مشاهده جزئیات معماری چارچوب ورودی Android TV به نمودار زیر مراجعه کنید.

مروری بر معماری TIF اندروید
شکل 1. معماری چارچوب ورودی Android TV (TIF).

جریان

در اینجا نحوه اجرای معماری آمده است:

  1. کاربر برنامه TV را می بیند و با آن تعامل دارد، یک برنامه سیستمی که نمی تواند با یک برنامه شخص ثالث جایگزین شود.
  2. برنامه TV محتوای AV را از ورودی تلویزیون نمایش می دهد.
  3. برنامه تلویزیون نمی‌تواند مستقیماً با ورودی‌های تلویزیون صحبت کند. مدیر ورودی تلویزیون وضعیت ورودی های تلویزیون را برای برنامه تلویزیون شناسایی می کند. برای جزئیات بیشتر در مورد این محدودیت‌ها، به مدیر ورودی تلویزیون در زیر مراجعه کنید.

مجوزها

  • فقط ورودی‌های تلویزیون signatureOrSystem و برنامه تلویزیون دسترسی کامل به پایگاه داده ارائه‌دهنده تلویزیون دارند و می‌توانند رویدادهای کلیدی را دریافت کنند.
  • فقط ورودی های تلویزیون سیستم می توانند از طریق سرویس مدیریت ورودی تلویزیون به HAL ورودی تلویزیون دسترسی داشته باشند. ورودی های تلویزیون از طریق جلسات مدیریت ورودی تلویزیون یک به یک قابل دسترسی هستند.
  • ورودی‌های تلویزیون شخص ثالث به پایگاه داده ارائه‌دهنده تلویزیون دسترسی بسته‌شده دارند و فقط برای ردیف‌های بسته منطبق می‌توانند بخوانند/نوشتن کنند.
  • ورودی‌های تلویزیون شخص ثالث می‌توانند محتوا یا محتوای خود را از ورودی‌های تلویزیون عبوری سازنده دستگاه مانند HDMI1 نمایش دهند. آن‌ها نمی‌توانند محتوا را از ورودی‌های تلویزیون غیرقابل عبور، مانند تیونر داخلی یا IPTV، نمایش دهند.
  • مجوز TV_INPUT_HARDWARE برای برنامه ورودی تلویزیون سخت‌افزاری، به سرویس مدیریت ورودی تلویزیون سیگنال می‌دهد تا به سرویس ورودی تلویزیون در هنگام راه‌اندازی اطلاع دهد تا با سرویس مدیریت ورودی تلویزیون تماس بگیرد و ورودی‌های تلویزیون آن را اضافه کند. این مجوز به یک برنامه ورودی تلویزیون سخت افزاری اجازه می دهد تا از چندین ورودی تلویزیون در هر سرویس ورودی تلویزیون پشتیبانی کند و همچنین بتواند ورودی های تلویزیون پشتیبانی شده خود را به صورت پویا اضافه و حذف کند.

ارائه دهنده تلویزیون

The TV Provider database stores the channels and programs from TV Inputs. The TV Provider also publishes and manages the associated permissions so that TV Inputs can see only their own records. For instance, a specific TV Input can see only the channels and programs it has supplied and is prohibited from accessing any other TV Inputs' channels and programs.

The TV Provider maps "broadcast genre" to "canonical genre" internally. TV Inputs are responsible for populating "broadcast genre" with the value in the underlying broadcast standard, and the "canonical genre" field will automatically be populated with the correct associated genre from android.provider.TvContract.Genres . For example, with broadcast standard ATSC A/65 and program with genre 0x25 (meaning “Sports”), the TV Input will populate the “broadcast genre” with the String “Sports” and TV Provider will populate the “canonical genre” field with the mapped value android.provider.TvContract.Genres.SPORTS .

See the diagram below for a detailed view of the TV Provider.

Android TV Provider
Figure 2. Android TV Provider

Only apps in the privileged system partition can read the entire TV Provider database.

Passthrough TV inputs do not store channels and programs.

In addition to the standard fields for channels and programs, the TV Provider database also offers a BLOB type field, COLUMN_INTERNAL_PROVIDER_DATA , in each table that TV Inputs may use to store arbitrary data. That BLOB data can include custom information, such as frequency of the associated tuner, and may be provided in a protocol buffer or another form. A Searchable field is available to make certain channels unavailable in search (such as to meet country-specific requirements for content protection).

Database field examples

The TV Provider supports structured data in channel ( android.provider.TvContract.Channels ) and program ( android.provider.TvContract.Programs ) tables. These tables are populated and accessed by TV Inputs and system apps like the TV App. These tables have four types of fields:

  • Display: Display fields contain information that apps may want to make visible to the user, like a channel's name ( COLUMN_DISPLAY_NAME ) or number ( COLUMN_DISPLAY_NUMBER ), or the title of the program being viewed.
  • Metadata: There are three fields for identifying content, according to relevant standards, like a channel's transport stream ID ( COLUMN_TRANSPORT_STREAM_ID ), original network ID ( COLUMN_ORIGINAL_NETWORK_ID ) and service id ( COLUMN_SERVICE_ID ).
  • Internal data : Fields that are for the custom use of TV Inputs.
    Some fields, like COLUMN_INTERNAL_PROVIDER_DATA , are customizable BLOB fields where a TV Input can store arbitrary metadata about their channel or program.
  • Flag: Flag fields represent whether a channel should be restricted from search, browse, or viewing. This can be set only at the channel level. All programs defer to the setting on the channel.
    • COLUMN_SEARCHABLE : Restricting search from some channels may be a requirement in certain regions. COLUMN_SEARCHABLE = 0 means the channel should not be exposed in search results.
    • COLUMN_BROWSABLE : Visible to system applications only. Restricting channel from being browsed by applications. COLUMN_BROWSABLE = 0 means the channel should not be included in the channel list.
    • COLUMN_LOCKED : Visible to system applications only. Restricting channel from being viewed by invalid accounts without entering PIN code. COLUMN_LOCKED = 1 means the channel should be protected by parental control.

For a more exhaustive list of the fields, see android/frameworks/base/media/java/android/media/tv/TvContract.java

Permissions and access control

All fields are visible to anyone with access to the corresponding row. No fields are directly accessible to users; they see only what the TV App, System apps, or TV Inputs surface.

  • Each row has PACKAGE_NAME , the package (app) that owns that row, checked on Query, Insert, Update via TvProvider.java. A TV Input may access only the information it wrote and is cordoned off from the information provided by other TV Inputs.
  • READ, WRITE permissions via AndroidManifest.xml (requires user consent) to determine available channels.
  • Only signatureOrSystem apps can acquire ACCESS_ALL_EPG_DATA permission to access the entire database.

TV Input Manager

The TV Input Manager provides a central system API to the overall Android TV Input Framework. It arbitrates interaction between apps and TV Inputs and provides parental control functionality. TV Input Manager sessions must be created one-to-one with TV Inputs. The TV Input Manager allows access to installed TV Inputs so apps may:

  • List TV inputs and check their status
  • Create sessions and manage listeners

For sessions, a TV Input may be tuned by the TV App only to URIs it has added to the TV Provider database, except for passthrough TV Inputs which can be tuned to using TvContract.buildChannelUriForPassthroughInput() . A TV Input may also have its volume set. TV Inputs provided and signed by the device manufacturer (signature apps) or other apps installed in the system partition will have access to the entire TV Provider database. This access can be used to construct apps to browse and search across all available TV channels and programs.

An app may create and register a TvInputCallback with the android.media.tv.TvInputManager to be called back on a TV Input's state change or on the addition or removal of a TV Input. For example, a TV App can react when a TV Input is disconnected by displaying it as disconnected and preventing its selection.

The TV Input Manager abstracts communication between the TV App and TV Inputs. The standard interface of TV Input Manager and TV Input allows multiple device manufacturers to create their own TV Apps while helping all third-party TV Inputs work on all TV Apps.

TV Inputs

TV Inputs are Android apps in the sense they have an AndroidManifest.xml and are installed (via Play, pre-installed, or sideloaded). Android TV supports pre-installed system apps, apps signed by the device manufacturer and third-party TV Inputs.

Some inputs, like the HDMI input or built-in tuner input, can be provided only by the manufacturer as they speak directly with the underlying hardware. Others, such as IPTV, place-shifting, and external STB, can be supplied by third parties as APKs on Google Play Store. Once downloaded and installed, the new input can be selected within the TV App.

Passthrough input example

Android TV System Input
Figure 3. Android TV System Input

In this example, the TV Input provided by the device manufacturer is trusted and has full access to the TV Provider. As a passthrough TV Input, it does not register any channels or programs with the TV Provider. To obtain the URI used to reference the passthrough input, use the android.media.tv.TvContract utility method buildChannelUriForPassthroughInput(String inputId) . The TV App communicates with the TV Input Manager to reach the HDMI TV Input.

Built-in tuner example

Android TV Built-in Tuner Input
Figure 4. Android TV Built-in Tuner Input

In this example, the Built-in Tuner TV Input provided by the device manufacturer is trusted and has full access to the TV Provider.

Third-party input example

Android TV third-party input
Figure 5. Android TV third-party input

In this example, the external STB TV Input is provided by a third party. Since that TV Input can't directly access the HDMI video feed coming in, it must go through the TV Input Manager and use the HDMI TV Input provided by the device manufacture.

Through the TV Input Manager, the external STB TV Input can speak with the HDMI TV Input and ask it to show the video on HDMI1. So the STB TV Input can control the TV while the manufacturer-provided HDMI TV Input renders the video.

Picture in picture (PIP) example

Android TV KeyEvents
Figure 6. Android TV KeyEvents

The diagram above shows how buttons on a remote control are passed to a specific TV Input for picture in picture (PIP) display. Those button presses are interpreted by the hardware driver supplied by the device manufacturer, converting hardware scancodes to Android keycodes and passing them to the standard Android input pipeline InputReader and InputDispatcher functions as KeyEvents . These in turn trigger events on the TV App if it is in focus.

Only system TV Inputs are eligible to receive InputEvents , and only if they have the RECEIVE_INPUT_EVENT system permission. The TV Input is responsible to determine which InputEvents to consume and should allow the TV App to handle the keys it does not need to consume.

The TV App is responsible for knowing which system TV Input is active, meaning selected by the user, and to disambiguate incoming KeyEvents and route them to the correct TV Input Manager session, calling dispatchInputEvent() to pass on the event to the associated TV Input.

MHEG-5 input example

The following diagram shows a more detailed view of how KeyEvents are routed through the Android TIF.

Android TV Red button example
Figure 7. Android TV Red button example

It depicts the flow of a Red button app, common in Europe for letting users access interactive apps on their televisions. An app can be delivered over this transport stream. When the button is clicked, it lets users interact with these broadcast apps. For example, you might use these broadcast apps to access related web pages or sports scores.

See the Broadcast app section to learn how broadcast apps interact with the TV App.

In this example:

  1. The TV App is in focus and receives all keys.
  2. KeyEvents (eg the Red button) is passed to the active TV Input as InputEvents.
  3. The system TV Input integrates with MHEG-5 stack and has the RECEIVE_INPUT_EVENT system permission.
  4. On receiving activation keycode (eg Red button), the TV Input activates broadcast app.
  5. TV input consumes KeyEvents as InputEvents and the broadcast app is the focus and handles InputEvents until dismissed.

Note : Third-party TV inputs never receive keys.

TV Input HAL

The TV Input HAL aids development of TV Inputs to access TV-specific hardware. As with other Android HALs, the TV Input HAL ( tv_input ) is available in the AOSP source tree and the vendor develops its implementation.

TV App

The system TV App presents live TV content to the user. A reference TV App (Live TV) is provided alongside the Android platform, which can be used as-is, customized, extended, or replaced by device manufacturers. The source code is available in the Android Open Source Project, and you can get started with it in the Reference TV app article.

Device manufacturers may extend their TV Apps to implement device manufacturer or country-specific features, however this is not in the scope of TIF or the reference TV App.

At a minimum, the system TV App needs to handle the following tasks:

Setup and configuration

  • Auto-detect TV Inputs
  • Let TV Inputs initiate channel setup
  • Control parental settings
  • Edit channels

Viewing

  • Access and navigate all TV channels
  • Access TV program information bar
  • Display Electronic Programming Guide (EPG) data
  • Support multiple audio and subtitle tracks
  • Supply parental control PIN challenge
  • Allow TV Input UI overlay for TV standard (HbbTV, etc.)
  • Populate search results for TV channels and programs
  • Display app linking cards
  • Support timeshifting APIs
  • Handle DVR functionality and support TV recording APIs

This feature set will increase in line with new Android versions where the platform TIF APIs are extended. CTS Verifier provides the compatibility test coverage.

Support for third-party TV Inputs

Android TV provides developer APIs for third-party TV inputs, enabling installed apps to deliver software channels into the live TV experience. To ensure a compatible Android device implementation, the system TV App has some responsibilities regarding surfacing third-party TV inputs and channels to the user. The reference Live TV app provides a compatible implementation; if replacing the system TV App, device manufacturers must ensure their own apps provide similar compatibility, to meet developer expectations across all Android TV devices.

The system TV App must surface third-party inputs alongside the device's default live TV service. The promise of the developer APIs is that users will be able to find channels (once installed) within their standard TV experience.

Visual differentiation between built-in channels and third-party channels is allowed, as defined in the TV App section of the Android CDD.

The following sections show how the Live TV application fulfills the CDD requirements.

New channel setup

The addition of new third-party inputs/channels begins with the user finding and installing a TV Input from an application store, such as Google Play.

Some third-party TV inputs automatically add channels to the TvProvider database. However most will provide a Setup activity to enable the user to set up their channels, provide login details, and other actions. The system TV App needs to ensure the user can activate this Setup activity, which is why the CDD requires third-party inputs be minimal navigation actions away from the main TV App.

The reference Live TV app provides the Channel Sources menu for accessing inputs.

Go to Settings
Figure 8. Go to Settings .

Go to Channel source in Settings
Figure 9. Go to Channel sources in Settings.

Select your source from the list.
Figure 10. Select your source from the list.

Add channels from your source
Figure 11. Add channels from your source.

In addition a notification card is shown at the top of the TV App menu after a new TvInput is installed, to take the user directly to the Setup:

Notification that shows new channel sources are available.
Figure 12. Notification that shows new channel sources are available.

If the user takes action through the notification, they can select to set up their sources as seen in Figure 10.

See Define Your TV Input Service for developer expectations in this area.

Customize the channel list

Device manufacturers may provide a UI to hide certain channels and enable users to manage their own EPGs. Live TV includes this facility.

Open the channel list in Settings.
Figure 13. Open the channel list in Settings .

Customize your channel list.
Figure 14. Customize your channel list.

EPG

Third-party input developers need to have confidence that users can easily navigate to their channels during general usage, across all compatible Android TV devices.

Channels from third-party inputs must be presented as part of the device's standard live TV experience EPG. Visual separation or separate categories for third-party channels can be used (see the TV App section of the Android CDD) —what's key is that users are able to find the channels they have installed.

Manufacturers must implement the TV App to include search results for global search requests in order to ensure the best user experience. Live TV provides an implementation (see which provides results from third-party inputs (required for platform compatibility) as well as built-in inputs.

Time shifting

For devices on Android 6.0 and above, the TV App must support the Android framework time shifting APIs . Additionally, manufacturers must implement playback controls in the TV App, which allow users to pause, resume, rewind, and fast forward the playback.

For TV Inputs that support time shifting, the TV App needs to display playback controls.

Playback controls
Figure 15. Playback controls

DVR

For devices on Android 7.0 and above, the TV App must support the Android framework TV recording APIs , to support, list, and play recorded programs.

This allows device manufacturers to plug their DVR subsystems into TIF and dramatically reduce the integration effort it takes to enable or integrate DVR functionality on a TV device. It also enables third parties to provide aftermarket DVR systems that can be plugged into an Android TV device.

In addition to recording live content, the TV App also handles resource conflict. For example, if the device has two tuners, it can record two programs at the same time. If the user asks to record three, the TV App must handle the conflict and should either surface a notification or request that the user schedules a priority for these requests.

TV Apps can also implement more sophisticated logic like asking a user if they'd like to record all future episodes in a series when they request to record one episode.

See the following diagram for a view into a possible DVR implementation in Android TV.

Digital video recording in Android TV
Figure 16. Digital video recording in Android TV

  1. The TV Input Service tells the TV App how many tuners are available so that the TV App can handle possible resource conflict.
  2. The TV App receives a user-initiated request to record a TV program.
  3. The TV App stores the recording schedule in its internal database.
  4. When it's time to record, the TV App passes a request to tune to the channel associated with the recording.
  5. The TV Input Service receives this request, responds with whether or not there are appropriate resources, and tunes to the channel.
  6. Then the TV App passes a request to start recording to the TV Input Manager.
  7. The TV Input Service receives this request and starts recording.
  8. The TV Input Service stores the actual video data in its storage, which can be external storage or cloud storage.
  9. When it's time to finish the recording, the TV App passes the stop recording request to the TV Input Manager.
  10. Once the TV Input Service receives the request, it stops the recording and adds its associated metadata to the TV Provider so that the TV App can show the recording to users when requested.

For more information about implementing Recording features in your TV Input service, see this TV Recording article.

Useful resources

  • The Android CDD and documented developer APIs are the definitive references.
  • CTS Verifier exercises the APIs as part of the compatibility testing program. Running this against Live TV may be a useful way to see the EPG, Search, Parental Control, and other requirements in the context of third-party inputs.
  • See Define Your TV Input Service for developer expectations in this area.

Parental control

Parental control lets a user block undesired channels and programs, but bypass the block by entering a PIN code.

Responsibility for parental control functionality is shared amongst the TV App, TV Input Manager service, TV Provider, and TV Input.

Parental control is mandatory, and is covered by CTS Verifier.

A number of countries have defined rating systems that TV Inputs can use via the TVContentRating API . Additionally, TV Inputs can register their own custom rating systems as demonstrated by the CTS Verifier test, which introduces a 'fake' rating. For countries where a standard rating system exists, device manufacturers are encouraged to combine the TV Input Framework Parental Control with any other mechanisms they may include.

TV provider

Each channel row has a COLUMN_LOCKED field that is used to lock specific channels from viewing without entering a PIN code. The program field COLUMN_CONTENT_RATING is intended for display and is not used to enforce parental control.

TV Input Manager

The TV Input Manager stores every blocked TvContentRating and responds to isRatingBlocked() to advise if content with the given rating should be blocked.

TV Input

The TV Input checks if the current content should be blocked by calling isRatingBlocked() on the TV Input Manager when the rating of the displayed content has changed (on program or channel change), or parental control settings have changed (on ACTION_BLOCKED_RATINGS_CHANGED and ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED ). If the content should be blocked, the TV Input disables the audio and video and notifies the TV app that the current content is blocked by calling notifyContentBlocked(TvContentRating) . If the content should not be blocked, the TV Input enables audio and video and notifies the TV App the current content is allowed by calling notifyContentAllowed() .

TV App

To honor the parental control APIs, and therefore create a compatible platform, the system TV App needs to provide a way for users to manage parental control, including for any custom ratings registered by specific apps.

The TV App shows a PIN code UI when it is notified by a TV Input that the current content is blocked or when the user attempts to view a blocked channel.

The TV App does not directly store the parental control settings. When the user changes the parental control settings, every blocked TvContentRating is stored by the TV Input Manager, and blocked channels are stored by the TV Provider.

The TV App needs to declare the permission android.permission.MODIFY_PARENTAL_CONTROLS in order to change the parental control settings.

Device manufacturers are encouraged to:

  • Exercise the CTS Verifier parental controls test against the reference Live TV application for a demonstration of the compatibility requirements.
  • Use the Live TV app as reference for their own TV App: in particular see ContentRatingsManager and RatingSystemsFragment source, and how they handle custom ratings.

HDMI-CEC

HDMI-CEC allows one device to control another, thereby enabling a single remote to control multiple appliances in a home theater. It is used by Android TV to speed setup and allow distant control over various TV Inputs via the central TV App. For instance, it may switch inputs, power up or down devices, and more.

The Android TIF implements HDMI-CEC as the HDMI Control Service so that device manufacturers merely need to develop low-level drivers that interact with the lightweight Android TV HAL, skipping more complex business logic. In providing a standard implementation, Android seeks to mitigate compatibility issues by reducing fragmented implementations and selective feature support. The HDMI Control Service uses the existing Android services, including input and power.

This means existing HDMI-CEC implementations will need to be redesigned to interoperate with the Android TIF. We recommend the hardware platform contain a microprocessor to receive CEC power on and other commands.

CEC integration on Android TV
Figure 17. CEC integration on Android TV

  1. The CEC bus receives a command from the currently active source to switch to a different source.
  2. The driver passes the command to the HDMI-CEC HAL.
  3. The HAL notifies all ActiveSourceChangeListeners .
  4. THe HDMI Control Service is notified of source change via ActiveSourceChangeListener .
  5. The TV Input Manager service generates an intent for the TV App to switch the source.
  6. The TV App then creates a TV Input Manager Session for the TV Input being switched to and calls setMain on that session.
  7. The TV Input Manager Session passes this information on to the HDMI TV Input.
  8. The HDMI TV input requests to set sideband surface.
  9. The TV Input Manager Service generates a corresponding routing control command back to HDMI Control Service when the surface is set.

TV integration guidelines

Broadcast app

Because each country has broadcast-specific requirements (MHEG, Teletext, HbbTV, and more), manufacturers are expected to supply their own solutions for the broadcast app, for example:

  • MHEG: native stack
  • Teletext: native stack
  • HbbTV: HbbTV solution from Vewd Software

In the Android L release, Android TV expects device manufacturers to use systems integrators or the Android solutions for regional TV stacks, pass the surface to TV software stacks, or pass the necessary key code to interact with legacy stacks.

Here's how the broadcast app and TV App interact:

  1. The TV App is in focus, receiving all keys.
  2. The TV App passes keys (eg Red button) to the TV Input device.
  3. The TV Input device internally integrates with legacy TV stack.
  4. On receiving an activation keycode (eg Red button), the TV Input device activates broadcast apps.
  5. A broadcast app takes focus in the TV App and handles user actions.

For voice search/recommendation, the broadcast app may support In-app search for voice search.