AVPlayerViewController হল Apple ইকোসিস্টেমের একটি বিল্ট-ইন ভিডিও প্লেয়ার কন্ট্রোলার, যা iOS এবং tvOS-এ মিডিয়া কন্টেন্ট চালানোর জন্য ডিজাইন করা হয়েছে। এটি কাস্টম UI লেখার প্রয়োজন ছাড়াই নিয়ন্ত্রণ, সাবটাইটেল সমর্থন এবং AirPlay সহ একটি পূর্ণ-স্ক্রীন ইন্টারফেস প্রদান করে। Apple Developer ডকুমেন্টেশন, 2026 অনুসারে, AVPlayerViewController কোডের কয়েক লাইনে ইন্টিগ্রেট হয় এবং HLS, MP4 এবং অধিকাংশ মিডিয়া ফর্ম্যাট সমর্থন করে।
মূল পয়েন্ট
AVPlayerViewController হল AVKit ফ্রেমওয়ার্কের একটি উপাদান যা Apple অ্যাপ্লিকেশনে ভিডিও চালানোর জন্য একটি প্রস্তুত ইন্টারফেস প্রদান করে। এটি ডেভেলপারকে স্ক্র্যাচ থেকে কাস্টম প্লেয়ার তৈরি করার প্রয়োজন থেকে মুক্তি দেয়, মানক নিয়ন্ত্রণ প্রদান করে: প্লে/পজ, স্ক্রাবিং, ভলিউম সমন্বয় এবং পূর্ণ-স্ক্রীন মোড।
নিম্ন-স্তরের AVPlayerLayer-এর বিপরীতে, যার জন্য ম্যানুয়াল UI নির্মাণ প্রয়োজন, AVPlayerViewController সম্পূর্ণরূপে প্লেয়ার লাইফসাইকেল পরিচালনা করে। কন্ট্রোলার স্বয়ংক্রিয়ভাবে স্ক্রিন রোটেশন হ্যান্ডেল করে, নচযুক্ত iPhone-এ সেফ এরিয়ার সাথে খাপ খায় এবং iPad-এ মাল্টিটাস্কিং সমর্থন করে।
Apple ডকুমেন্টেশন (2026) অনুসারে, AVPlayerViewController AVPlayer এবং AVQueuePlayer-এর সাথে সামঞ্জস্যপূর্ণ, যা একক ফাইল এবং প্লেলিস্ট উভয়ই চালানোর অনুমতি দেয়। লোকাল স্টোরেজ থেকে URL, HLS নেটওয়ার্ক স্ট্রিম এবং এনক্রিপ্টেড FairPlay কন্টেন্ট সমর্থিত।
উপাদানটি iOS 8-এ AVKit-এর সাথে পুরাতন MPMoviePlayerController-এর প্রতিস্থাপন হিসাবে আবির্ভূত হয়েছিল। iOS 11-এ Picture in Picture এবং সাবটাইটেল প্রদর্শনের জন্য সমর্থন যুক্ত করা হয়েছিল। iOS 14-এ, কন্ট্রোলার AVPlayerViewControllerDelegate-এর মাধ্যমে একটি কাস্টমাইজযোগ্য ট্রান্সপোর্ট বার পেয়েছে। iOS 16 থেকে শুরু করে, প্লেয়ার পুনরায় তৈরি না করেই গতিশীল মিডিয়া ফাইল প্রতিস্থাপনের জন্য সমর্থন চালু করা হয়েছে।
আধুনিক AVPlayerViewController ProMotion ডিসপ্লের জন্য অপ্টিমাইজ করা হয়েছে — ভিডিও ফ্রেম রেট স্বয়ংক্রিয়ভাবে স্ক্রিন রিফ্রেশ রেটের সাথে সিঙ্ক্রোনাইজ হয়। tvOS-এ, উপাদানটি Siri Remote ফোকাস ইন্টারফেসের সাথে খাপ খায়, এবং macOS-এ QuickTime Player উইন্ডো মোডের সাথে খাপ খায়।
কন্ট্রোলারের মূল অংশে AVPlayer এবং AVPlayerItem-এর জুড়ি রয়েছে। AVPlayer হল প্লেব্যাক অবজেক্ট যা টাইমলাইন, গতি এবং অবস্থা পরিচালনা করে। AVPlayerItem হল একটি নির্দিষ্ট মিডিয়া ফাইলের চারপাশে একটি র্যাপার যাতে মেটাডেটা, ট্র্যাক এবং লোডিং তথ্য থাকে।
প্রારম্ভিককরণের সময়, AVPlayerViewController AVPlayer-এর একটি রেফারেন্স গ্রহণ করে এবং স্বয়ংক্রিয়ভাবে ভিডিও প্রদর্শনের জন্য AVPlayerLayer তৈরি করে। কন্ট্রোলার readyToPlay, লোডিং ত্রুটি এবং প্লেব্যাক সমাপ্তির মতো অবস্থা পরিবর্তন সম্পর্কে AVPlayer KVO বিজ্ঞপ্তিগুলিতে সাবস্ক্রাইব করে।
নিয়ন্ত্রণগুলি (ট্রান্সপোর্ট বার) ট্যাপ করলে প্রদর্শিত হয়। iOS 15+-এ, এগুলি AVPlayerViewControllerCustomizationDelegate-এর মাধ্যমে কাস্টমাইজেশন সমর্থন করে, যা স্ট্যান্ডার্ড বাটন লুকাতে বা প্রতিস্থাপন করতে দেয়।
কন্ট্রোলার তৈরি এবং AVPlayer অ্যাসাইন করার পরে, viewDidLoad মেথড কল করা হয়, যা ভিডিও স্ট্রিম প্রস্তুত করা শুরু করে। যখন AVPlayerItem AVPlayerItemStatusReadyToPlay অবস্থায় ট্রানজিশন করে, প্লেয়ার ফ্রেম প্রদর্শনের জন্য প্রস্তুত হয়। যখন play() মেথড কল করা হয়, Video Toolbox-এর মাধ্যমে ভিডিও স্ট্রিম ডিকোডিং শুরু হয়।
স্ক্রিন ছাড়ার সময়, কন্ট্রোলার স্বয়ংক্রিয়ভাবে প্লেব্যাক বিরাম দেয় এবং ডিকোডার রিসোর্স মুক্ত করে। iOS 13+-এ, অ্যাপ মিনিমাইজ করার সময় প্লেব্যাক বজায় রাখতে, ব্যাকগ্রাউন্ড মোড এবং অডিও সেশন কনফিগার করতে হবে। WWDC 2024 অনুসারে, iOS মিডিয়া সেন্টারের সাথে সিঙ্ক্রোনাইজেশনের জন্য AVPlayerPlaybackCoordinator ব্যবহার করার পরামর্শ দেওয়া হয়।
উপাদানটি বক্সের বাইরে বৈশিষ্ট্যগুলির একটি সমৃদ্ধ সেট প্রদান করে, যা এটি অধিকাংশ প্রকল্পের জন্য আকর্ষণীয় করে তোলে। নীচে মূল সক্ষমতাগুলি দেওয়া হল যেগুলির জন্য অতিরিক্ত কোডের প্রয়োজন নেই।
ট্রান্সপোর্ট বার হল ইন্টারফেসের নীচের অংশ যা প্রধান নিয়ন্ত্রণ বাটন ধারণ করে। ডিফল্টরূপে, ব্যবহারকারীর নিষ্ক্রিয়তার 3 সেকেন্ড পরে বারটি লুকিয়ে যায় এবং ট্যাপ করলে প্রদর্শিত হয়। iOS 16+-এ, পৃথক উপাদানগুলির দৃশ্যমানতা নিয়ন্ত্রণ করতে ডেলিগেট ব্যবহার করা যেতে পারে।
ডিবাগ মোডে, AVPlayerViewController.requiresLinearPlayback প্রপার্টি ব্যবহার করে ট্রান্সপোর্ট বার জোর করে দেখানো যেতে পারে, যা ভিডিওকে বিরাম দেওয়া থেকেও রোধ করে। এটি বিজ্ঞাপন বিরতি এবং শিক্ষামূলক কন্টেন্টের জন্য দরকারী।
কন্ট্রোলারের বেসিক ইন্টিগ্রেশন কোডের 10 লাইনের বেশি সময় নেয় না। প্রথমে, মিডিয়া ফাইল URL সহ একটি AVPlayer ইনস্ট্যান্স তৈরি করুন, তারপর এটি AVPlayerViewController-এ পাস করুন এবং স্ক্রিনে কন্ট্রোলার প্রদর্শন করুন।
import AVKit
let player = AVPlayer(url: URL(string: "https://example.com/video.mp4")!)
let playerVC = AVPlayerViewController()
playerVC.player = player
present(playerVC, animated: true) {
player.play()
}
present কল করার পরে, কন্ট্রোলার পূর্ণ স্ক্রিন প্রদর্শিত হয়। ভিডিও নেটওয়ার্ক থেকে লোড হতে শুরু করে, এবং একবার বাফার readyToPlay সীমায় পৌঁছালে, play() কল করার পরে প্লেব্যাক স্বয়ংক্রিয়ভাবে শুরু হয়।
let asset = AVAsset(url: videoURL)
let item = AVPlayerItem(asset: asset)
let metadata = AVMutableMetadataItem()
metadata.key = AVMetadataKey.commonKeyTitle
metadata.value = "আমার ভিডিও"
item.addMetadata(metadata)
let player = AVPlayer(playerItem: item)
let playerVC = AVPlayerViewController()
playerVC.player = player
AVPlayerItem ব্যবহার করলে আপনি মেটাডেটা, টাইমকোড, অডিও ট্র্যাক নির্বাচন এবং সাবটাইটেলের উপর নিয়ন্ত্রণ পান। AVPlayerItem-এর মাধ্যমে, আপনি status প্রপার্টিতে KVO ব্যবহার করে লোডিং প্রগতি, বাফারিং এবং নেটওয়ার্ক ত্রুটিগুলিও মনিটর করতে পারেন।
iOS 11 থেকে শুরু করে, ডেভেলপাররা AVPlayerViewControllerDelegate প্রোটোকলের মাধ্যমে ট্রান্সপোর্ট বার কাস্টমাইজ করতে পারেন। playerViewController(_:willBeginFullScreenPresentationWithAnimationCoordinator:) মেথডটি পূর্ণ-স্ক্রীন মোডে প্রবেশের আগে কল করা হয় এবং UI প্রস্তুত করার অনুমতি দেয়।
পৃথক বাটন লুকানোর জন্য, AVPlayerViewController.showsPlaybackControls প্রপার্টি ব্যবহার করুন। false-এ সেট করলে, ট্রান্সপোর্ট বার সম্পূর্ণরূপে অদৃশ্য হয়ে যায়, শুধুমাত্র ভিডিও স্ট্রিম রেখে। কাস্টম ওভারলে উপাদানের জন্য দরকারী।
class CustomPlayerViewController: UIViewController {
private let playerVC = AVPlayerViewController()
override func viewDidLoad() {
super.viewDidLoad()
playerVC.delegate = self
playerVC.showsPlaybackControls = true
playerVC.entersFullScreenWhenPlaybackBegins = true
}
}
extension CustomPlayerViewController: AVPlayerViewControllerDelegate {
func playerViewController(
_ playerViewController: AVPlayerViewController,
willBeginFullScreenPresentationWithAnimationCoordinator coordinator: UIViewControllerTransitionCoordinator
) {
// ওভারলে বাটন যোগ করুন
}
func playerViewController(
_ playerViewController: AVPlayerViewController,
didUpdate legibleMediaSelection: AVMediaSelectionGroup
) {
print("নতুন সাবটাইটেল ভাষা নির্বাচিত")
}
}
ডেলিগেট সাবটাইটেল পরিবর্তন ইভেন্ট, পূর্ণ-স্ক্রীন মোডে প্রবেশ এবং প্রস্থান, সেইসাথে Picture in Picture শুরু এবং শেষ করা ইন্টারসেপ্ট করার অনুমতি দেয়। WWDC 2024-এ, Apple বিশ্লেষণের জন্য ডেলিগেট ব্যবহার করার পরামর্শ দিয়েছে — প্রতিটি ট্রানজিশন 100 ms-এর মধ্যে লগ করুন।
AVPlayerViewController স্বয়ংক্রিয়ভাবে সমস্ত উপলব্ধ সাবটাইটেল এবং অডিও ট্র্যাক প্রদর্শন করে যদি সেগুলি মিডিয়া ফাইলে এম্বেডেড থাকে বা HLS ম্যানিফেস্টে নির্দিষ্ট করা থাকে। ব্যবহারকারীরা ট্রান্সপোর্ট বারে সাবটাইটেল আইকনে ট্যাপ করলে প্রদর্শিত মেনুর মাধ্যমে সেগুলি পরিবর্তন করতে পারেন।
HLS স্ট্রিমের জন্য, M3U8 ম্যানিফেস্টে উপলব্ধ ভাষা ভেরিয়েন্টের একটি তালিকা থাকে। AVPlayer সংশ্লিষ্ট WebVTT সাবটাইটেল সেগমেন্ট লোড করে এবং রেন্ডারিংয়ের জন্য AVPlayerLayer-এ পাস করে। iOS 16+ AVTextStyleRule-এর মাধ্যমে সাবটাইটেল স্টাইলিং সমর্থন চালু করেছে।
func selectAudioTrack(languageCode: String) {
guard let group = player.currentItem?
.asset.mediaSelectionGroup(forMediaCharacteristic: AVMediaCharacteristic.audible)
else { return }
for option in group.options {
if option.extendedLanguageTag?.hasPrefix(languageCode) == true {
player.currentItem?.select(option, in: group)
}
}
}
selectAudioTrack মেথড audible গ্রুপের অডিও অপশনগুলি মধ্যে সেই ভেরিয়েন্ট খুঁজে বের করে যার extendedLanguageTag কাঙ্ক্ষিত ভাষা কোডের সাথে মেলে। এটি বহুভাষিক কন্টেন্টযুক্ত অ্যাপে “মূল অডিও” বৈশিষ্ট্য বাস্তবায়নের অনুমতি দেয়।
Picture in Picture (PiP) মোড অন্যান্য অ্যাপের উপরে একটি ফ্লোটিং উইন্ডোতে ভিডিও প্রদর্শনের অনুমতি দেয়। iPad-এ, এই বৈশিষ্ট্যটি iOS 9 থেকে উপলব্ধ, iPhone-এ — iOS 14 থেকে। AVPlayerViewController UIBackgroundModes-এ সাবস্ক্রাইব করলে স্বয়ংক্রিয়ভাবে ট্রান্সপোর্ট বারে একটি PiP বাটন যোগ করে।
PiP সক্রিয় করতে, Info.plist-এ audio এবং airplay মান সহ UIBackgroundModes কী যোগ করুন। তারপরে, কন্ট্রোলারে একটি PiP বাটন দেখা যায়, যা ট্যাপ করলে ভিডিওটি 192x108 পয়েন্টের একটি ফ্লোটিং উইন্ডোতে সংকুচিত হয়।
PiP ইভেন্টগুলি ডেলিগেটের মাধ্যমে হ্যান্ডেল করা হয়: playerViewController(_:willStartPictureInPictureFromFullScreen:) এবং playerViewController(_:didStopPictureInPicture:)। Apple HIG অনুসারে, বিষয়বস্তু পঠনযোগ্যতা বজায় রাখতে ন্যূনতম PiP উইন্ডোর আকার কমপক্ষে 120x68 পয়েন্ট হওয়া উচিত।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
না, YouTube ভিডিওর জন্য ওয়েব ভিউ WKWebView বা YouTube iOS Helper লাইব্রেরি ব্যবহার প্রয়োজন, কারণ YouTube নিজস্ব DRM সিস্টেম ব্যবহার করে। AVPlayerViewController URL-এর মাধ্যমে সরাসরি মিডিয়া স্ট্রিমের জন্য ডিজাইন করা হয়েছে।
showsPlaybackControls প্রপার্টি false-এ সেট করুন। তারপরে, স্ক্রিন খালি থাকে — শুধুমাত্র ভিডিও স্ট্রিম। কাস্টম বাটন ফিরিয়ে আনতে, কন্ট্রোলারের উপরে addSubview-এর মাধ্যমে একটি ওভারলে যোগ করুন।
হ্যাঁ, কন্ট্রোলার সম্পূর্ণরূপে HLS Live সমর্থন করে। ট্রান্সপোর্ট বার প্রগতি স্লাইডারের পরিবর্তে একটি লাইভ নির্দেশক দেখায়। লেটেন্সি HLS কনফিগারেশনের উপর নির্ভর করে — কম-লেটেন্সি সেটিংসের সাথে ন্যূনতম 6 সেকেন্ড।
AVPlayerItem.status প্রপার্টিতে KVO সাবস্ক্রাইব করুন। ত্রুটিতে, অবস্থা .failed-এ পরিবর্তিত হয়। AVPlayerItem-এর error প্রপার্টির মাধ্যমে বিবরণ পান এবং ব্যবহারকারীকে সমস্যা ব্যাখ্যা করে একটি সতর্কতা দেখান — প্রায়শই এটি একটি নেটওয়ার্ক সমস্যা বা অবৈধ URL।
হ্যাঁ, RAM থেকে ডেটা ফিড করার জন্য কাস্টম AVAssetResourceLoader সহ AVAsset ব্যবহার করুন। AVAssetResourceLoaderDelegate প্রয়োগ করুন এবং ডিস্ক থেকে পড়ার পরিবর্তে বাফার থেকে বাইট ফেরত দিন।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন