TV App — স্মার্ট টেলিভিশনের জন্য একটি অ্যাপ্লিকেশন যা Apple TV (tvOS) এবং Android TV (Google TV) প্ল্যাটফর্মে কাজ করে। মোবাইল অ্যাপ্লিকেশনের বিপরীতে, TV App রিমোট কন্ট্রোল নেভিগেশন, ফোকাস ম্যানেজমেন্ট (Focus Engine) এবং বড় পর্দায় ইন্টারফেসের নির্দিষ্ট প্রয়োজনীয়তা বিবেচনা করে তৈরি করা হয়। ডেভেলপমেন্ট Apple TV-র জন্য Swift/SwiftUI এবং Android TV-র জন্য Kotlin ও Leanback Library দিয়ে করা হয়। Statista (2026)-এর তথ্য অনুযায়ী, সারা বিশ্বে 250 মিলিয়নেরও বেশি ডিভাইস এই প্ল্যাটফর্মগুলিতে কাজ করে, যা TV App-কে ডেভেলপারদের জন্য একটি সম্ভাবনাময় ক্ষেত্র করে তুলেছে। আসুন প্ল্যাটফর্ম আর্কিটেকচার, ফোকাস ম্যানেজমেন্ট, কোড উদাহরণ এবং প্রকাশনা প্রক্রিয়া দেখি।
মূল বিষয়
TV App — স্মার্ট টিভি প্ল্যাটফর্মে চালানোর জন্য ডিজাইন করা একটি অ্যাপ্লিকেশন: Apple TV (tvOS) এবং Android TV (Google TV)। মোবাইল অ্যাপ থেকে মূল পার্থক্য হলো মিথস্ক্রিয়া পদ্ধতি। ব্যবহারকারী স্ক্রিন স্পর্শ করে না, বরং রিমোট কন্ট্রোল ব্যবহার করে ইন্টারফেস নিয়ন্ত্রণ করে। সমস্ত উপাদান দিকনির্দেশক নেভিগেশনের (D-pad) মাধ্যমে অ্যাক্সেসযোগ্য হতে হবে: উপরে, নীচে, বামে, ডানে এবং নির্বাচন বোতাম।
TV App ডেভেলপমেন্টের বৈশিষ্ট্য: স্ক্রিন রেজোলিউশন Full HD (1920x1080) থেকে 4K (3840x2160) পর্যন্ত xhdpi ঘনত্ব (Android) বা @3x (Apple) সহ। কিনারা থেকে 5% নিরাপদ অঞ্চল বাধ্যতামূলক over-scan-এর ক্ষতিপূরণের জন্য (ছবির কিছু অংশ টিভি দ্বারা কেটে যেতে পারে)। কোনো টাচ স্ক্রিন নেই — সমস্ত মিথস্ক্রিয়া রিমোট বা গেমপ্যাডের মাধ্যমে। ফোকাস সবসময় সক্রিয় উপাদানকে হাইলাইট করে। শক্তি খরচ ব্যাটারি দ্বারা সীমাবদ্ধ নয়, তবে অ্যাপ্লিকেশনকে স্লিপ মোডে রূপান্তর সঠিকভাবে পরিচালনা করতে হবে। Statista (2026)-এর তথ্য অনুযায়ী, বিশ্বব্যাপী স্মার্ট টিভি বাজার নতুন টিভির 80%-এর বেশি, যেখানে Apple TV এবং Android TV 250 মিলিয়নের বেশি ডিভাইস দখল করে আছে।
TV অ্যাপ্লিকেশনের বিভাগ: ভিডিও পরিষেবা (Netflix, YouTube, Apple TV+), সঙ্গীত (Spotify, Apple Music), গেমস (Apple Arcade, Google Play Games), ফিটনেস (Apple Fitness+, Peloton), শিক্ষা, খবর, আবহাওয়া, ছবি। সবচেয়ে জনপ্রিয় বিভাগ হলো ভিডিও স্ট্রিমিং, যা স্মার্ট টিভির মোট ব্যবহারের সময়ের 70% দখল করে।
tvOS হল Apple TV সেট-টপ বক্সের জন্য Apple-এর অপারেটিং সিস্টেম, যা iOS-এর উপর ভিত্তি করে তৈরি। প্রথম রিলিজ 2015 সালে চতুর্থ প্রজন্মের Apple TV-র সাথে হয়েছিল। tvOS iOS-এর সাথে XNU কার্নেল, Foundation ফ্রেমওয়ার্ক, UIKit (অভিযোজিত সংস্করণে) এবং App Sandbox নিরাপত্তা প্রক্রিয়া ভাগ করে। ডেভেলপমেন্ট SwiftUI বা UIKit ব্যবহার করে Swift-এ করা হয়।
tvOS-এর প্রধান উপাদান:
tvOS অ্যাপ্লিকেশনের জীবনচক্র iOS-এর মতো: notRunning, foregroundActive, foregroundInactive, background। বিশেষত্ব: অ্যাপ্লিকেশনের প্রয়োজন ছাড়া ব্যাকগ্রাউন্ড অনুমতি চাওয়া উচিত নয় — সিস্টেম জোর করে ব্যাকগ্রাউন্ড প্রক্রিয়া শেষ করতে পারে। নেভিগেশন টোপোলজি UISplitViewController এবং UITabBarController-এর চারপাশে তৈরি হয় "হোম", "অনুসন্ধান", "লাইব্রেরি", "সেটিংস" ট্যাব সহ।
Android TV হল Android-এর একটি সংস্করণ যা টিভি এবং সেট-টপ বক্সের জন্য অপ্টিমাইজ করা, প্রথম 2014 সালে উপস্থাপিত হয়। 2020 সাল থেকে Google TV বিদ্যমান — একটি নতুন ইন্টারফেস সহ Android TV-র উপর একটি স্তর, তবে অ্যাপ্লিকেশন ডেভেলপমেন্ট Android TV SDK-তে করা হয়, যা Google TV-এর সাথে সামঞ্জস্যপূর্ণ। প্রধান ভাষা Kotlin, UI ফ্রেমওয়ার্ক Leanback Library (ক্লাসিক) এবং Jetpack Compose for TV (পরীক্ষামূলক)।
Android TV-র মূল উপাদান:
Android TV এবং মোবাইল Android-এর মধ্যে পার্থক্য: অ্যাপ্লিকেশনকে ম্যানিফেস্টে LEANBACK_LAUNCHER বিভাগ ঘোষণা করতে হবে; ন্যূনতম লেআউট প্রস্থ 1920dp; টাচ মিথস্ক্রিয়া D-pad নেভিগেশন দ্বারা প্রতিস্থাপিত; Leanback ফ্র্যাগমেন্ট ব্যবহার করার পরামর্শ দেওয়া হয়; হার্ডওয়্যার ত্বরণ বাধ্যতামূলক। বিল্ডে ARM64 এবং x86 আর্কিটেকচারের সমর্থন সহ APK/AAB অন্তর্ভুক্ত। 2025 থেকে আধুনিক প্রকল্পের জন্য, TvLazyColumn, TvButton, TvCard-এর মতো উপাদান সহ Jetpack Compose for TV সুপারিশ করা হয়।
ফোকাস ইঞ্জিন — যেকোনো টিভি প্ল্যাটফর্মের একটি মূল উপাদান, যা নির্ধারণ করে কোন ইন্টারফেস উপাদান সক্রিয়। tvOS-এ, ফোকাস ইঞ্জিন UIKit-এ নির্মিত এবং স্বয়ংক্রিয়ভাবে কাজ করে। যখন D-pad বাটন চাপা হয়, সিস্টেম সমস্ত ফোকাসযোগ্য উপাদানের অবস্থান বিশ্লেষণ করে, চাপের দিকের নিকটতম প্রার্থী গণনা করে এবং অ্যানিমেশন (UIFocusAnimationCoordinator) সহ ফোকাসটিকে সেখানে মসৃণভাবে স্থানান্তর করে।
ফোকাস ইঞ্জিনের নিয়ম: সিস্টেম গতির অক্ষ বরাবর উপাদানের মধ্যে দূরত্ব, উপাদানের প্রজেকশনের ছেদ (একটি উপাদান প্রার্থী হিসেবে বিবেচিত হয় যদি এর প্রজেকশন বর্তমান ফোকাসের প্রজেকশনকে ছেদ করে), সমান দূরত্বের উপাদানের অগ্রাধিকার (সরলরেখায় নিকটতমটি নির্বাচিত হয়) বিবেচনা করে। ডেভেলপার UIFocusGuide ব্যবহার করে ফোকাস প্রভাবিত করতে পারে — একটি অদৃশ্য নির্দেশক আয়তক্ষেত্র যা নির্দিষ্ট দিকে চাপলে ফোকাসকে একটি নির্দিষ্ট উপাদানে পুনর্নির্দেশ করে।
Android TV-তে, ফোকাস focusable এবং nextFocus* (nextFocusDown, nextFocusUp, nextFocusLeft, nextFocusRight) অ্যাট্রিবিউট সহ স্ট্যান্ডার্ড Android ফোকাস সিস্টেমের মাধ্যমে বাস্তবায়িত হয়। অ্যানিমেশন StateListAnimator-এর মাধ্যমে কনফিগার করা হয়। Google সব ইন্টারেক্টিভ উপাদানে focusable সেট করার এবং সঠিক নেভিগেশন নিয়ন্ত্রণের জন্য nextFocus ব্যবহার করার পরামর্শ দেয়। ফোকাস অ্যানিমেশন UX-এর জন্য গুরুত্বপূর্ণ — ফোকাস পরিবর্তনের সময়, 150–250 মি.সে. সময়কাল সহ একটি মসৃণ স্কেলিং অ্যানিমেশন (1.0 → 1.05–1.2) হওয়া উচিত।
ফোকাস ইঞ্জিন সমর্থন সহ চলচ্চিত্রের তালিকা প্রদর্শনের জন্য Apple TV-র জন্য SwiftUI-তে একটি সাধারণ TV অ্যাপ্লিকেশনের উদাহরণ।
import SwiftUI
struct Movie: Identifiable {
let id = UUID()
let title: String
let subtitle: String
}
struct ContentView: View {
@FocusState private var focusedMovie: UUID?
let movies: [Movie] = [
Movie(title: "Inception", subtitle: "2010, Sci-Fi"),
Movie(title: "Interstellar", subtitle: "2014, Sci-Fi"),
Movie(title: "The Matrix", subtitle: "1999, Action"),
Movie(title: "Blade Runner 2049", subtitle: "2017, Sci-Fi"),
]
var body: some View {
VStack(alignment: .leading, spacing: 40) {
Text("সিনেমা").font(.title).padding(.leading, 60)
ScrollView(.horizontal, showsIndicators: false) {
HStack(spacing: 40) {
ForEach(movies) { movie in
VStack {
Image(systemName: "film.fill")
.resizable()
.frame(width: 200, height: 300)
.cornerRadius(12)
.focusable()
.focused($focusedMovie, equals: movie.id)
Text(movie.title).font(.headline)
Text(movie.subtitle).font(.subheadline).foregroundColor(.secondary)
}
.scaleEffect(focusedMovie == movie.id ? 1.15 : 1.0)
.animation(.easeInOut(duration: 0.2), value: focusedMovie)
}
}
.padding(.horizontal, 60)
}
}
.onAppear { focusedMovie = movies.first?.id }
}
}
মূল পয়েন্ট: @FocusState — বর্তমান ফোকাস ট্র্যাক করা; .focusable() — উপাদানকে ফোকাসযোগ্য করে; .scaleEffect() — ফোকাসে জুম অ্যানিমেশন, টিভিতে ভিজ্যুয়াল প্রতিক্রিয়ার জন্য গুরুত্বপূর্ণ।
Kotlin-এ Leanback Library সহ Android TV-র জন্য অনুরূপ উদাহরণ:
// MainActivity.kt
class MainActivity : FragmentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
class MainFragment : BrowseSupportFragment() {
private val moviePresenter = MoviePresenter()
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
title = getString(R.string.app_name)
headersState = HEADERS_ENABLED
setupAdapter()
}
private fun setupAdapter() {
val rowsAdapter = ArrayObjectAdapter(ListRowPresenter())
val listRowAdapter = ArrayObjectAdapter(moviePresenter)
listRowAdapter.add(Movie("Inception", "2010", R.drawable.poster_1))
listRowAdapter.add(Movie("Interstellar", "2014", R.drawable.poster_2))
rowsAdapter.add(ListRow(HeaderItem(0, "Movies"), listRowAdapter))
adapter = rowsAdapter
}
}
data class Movie(val title: String, val subtitle: String, val imageResId: Int)
class MoviePresenter : Presenter() {
override fun onCreateViewHolder(parent: ViewGroup): ViewHolder {
val cardView = ImageCardView(parent.context).apply {
isFocusable = true
setMainImageDimensions(200, 300)
}
return ViewHolder(cardView)
}
override fun onBindViewHolder(viewHolder: ViewHolder, item: Any) {
val movie = item as Movie
(viewHolder.view as ImageCardView).apply {
titleText = movie.title
contentText = movie.subtitle
}
}
override fun onUnbindViewHolder(viewHolder: ViewHolder) {}
}
মূল পয়েন্ট: BrowseSupportFragment — হেডার সহ প্রধান Leanback ফ্র্যাগমেন্ট; Presenter — RecyclerView.Adapter-এর মতো ViewHolder তৈরি করার জন্য একটি অ্যাবস্ট্র্যাকশন; ImageCardView — ছবি, শিরোনাম এবং উপশিরোনাম সহ স্ট্যান্ডার্ড কার্ড; isFocusable = true — টিভি উপাদানের জন্য বাধ্যতামূলক অ্যাট্রিবিউট।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
TV App স্পর্শের পরিবর্তে রিমোট কন্ট্রোল (D-pad) দ্বারা নিয়ন্ত্রিত হয়, নেভিগেশনের জন্য ফোকাস ইঞ্জিন ব্যবহার করে, বড় পর্দার (Full HD বা 4K) জন্য অপ্টিমাইজ করা এবং ব্যাটারির কোনো সীমা নেই। সমস্ত উপাদান দিকনির্দেশক ফোকাস চলাচলের মাধ্যমে অ্যাক্সেসযোগ্য হতে হবে।
ফোকাস ইঞ্জিন tvOS-এ একটি সিস্টেম যা স্বয়ংক্রিয়ভাবে সক্রিয় ইন্টারফেস উপাদান নির্ধারণ করে। যখন D-pad বাটন চাপা হয়, সিস্টেম ফোকাসযোগ্য উপাদানের অবস্থান বিশ্লেষণ করে, নিকটতম প্রার্থী গণনা করে এবং অ্যানিমেশন সহ ফোকাস সেখানে স্থানান্তর করে।
মূল ফ্রেমওয়ার্ক হল Leanback Library (BrowseFragment, DetailsFragment, PlaybackOverlayFragment)। আধুনিক প্রকল্পের জন্য Jetpack Compose for TV পরীক্ষামূলক সমর্থন সহ উপলব্ধ।
প্রাথমিক ডেভেলপমেন্টের জন্য, সিমুলেটর যথেষ্ট: Xcode-এ Siri Remote-সহ tvOS সিমুলেটর, Android Studio-তে Android TV এমুলেটর অন্তর্ভুক্ত। চূড়ান্ত পরীক্ষার জন্য, একটি ফিজিক্যাল ডিভাইস সুপারিশ করা হয়।
Apple TV App App Store Connect-এর মাধ্যমে Xcode Organizer দিয়ে প্রকাশিত হয়। Android TV App Google Play Console-এর মাধ্যমে ম্যানিফেস্টে LEANBACK_LAUNCHER ঘোষণা করে এবং 1920x1080 স্ক্রিনশট সহ প্রকাশিত হয়।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন