AVFoundation হল Apple-এর মাল্টিমিডিয়া ফ্রেমওয়ার্ক যা iOS, macOS, tvOS এবং watchOS-এ অডিও, ভিডিও এবং ইমেজ নিয়ে কাজ করার সম্পূর্ণ ওয়ার্কফ্লো প্রদান করে। এটি ক্যামেরা এবং মাইক্রোফোন থেকে ক্যাপচার, মিডিয়া ফাইল প্লেব্যাক, অডিও ট্র্যাক এডিটিং, রিয়েল-টাইম সাউন্ড প্রসেসিং এবং নেটওয়ার্ক স্ট্রিমিং কভার করে। Apple AVFoundation Documentation (2026) অনুসারে, এই ফ্রেমওয়ার্কটি মিডিয়া কন্টেন্ট নিয়ে কাজ করা 90% App Store অ্যাপ্লিকেশনে ব্যবহৃত হয়।
মূল পয়েন্ট
AVFoundation হল Apple-এর মৌলিক মাল্টিমিডিয়া ফ্রেমওয়ার্ক, যা iOS 4 (2010)-এ অডিও এবং ভিডিও প্লেব্যাকের জন্য পুরোনো UIWebView-এর প্রতিস্থাপন হিসেবে প্রবর্তিত হয়েছিল। তারপর থেকে AVFoundation সব ধরনের মিডিয়ার সাথে কাজ করার জন্য একটি পূর্ণাঙ্গ টুলসেটে পরিণত হয়েছে: সাধারণ MP3 ফাইল প্লেব্যাক থেকে মাল্টি-চ্যানেল মাইক্রোফোন সহ পেশাদার ভিডিও ক্যাপচার এবং রিয়েল-টাইম ইফেক্টের মাধ্যমে সাউন্ড ট্রান্সফরমেশন পর্যন্ত।
AVFoundation-এর আর্কিটেকচার কয়েকটি মৌলিক অ্যাবস্ট্র্যাকশনের চারপাশে নির্মিত: AVAsset (মিডিয়া ডেটা), AVPlayer (প্লেব্যাক), AVCaptureSession (ক্যাপচার) এবং AVAudioEngine (প্রসেসিং)। প্রতিটি উপাদান অ্যাসিনক্রোনাসভাবে কাজ করে, যা বড় ফাইল লোডিং বা প্রসেসিংয়ের সময় UI-এর মসৃণতা বজায় রাখার জন্য গুরুত্বপূর্ণ। Apple (WWDC 2025) অনুসারে, AVFoundation M-সিরিজ চিপযুক্ত ডিভাইসগুলিতে কর্মক্ষমতা হ্রাস ছাড়াই 8K ভিডিও পর্যন্ত পরিচালনা করে।
AVFoundation 4K ProRes, HDR এবং স্লো-মোশনে 240 FPS পর্যন্ত সমর্থন সহ ক্যামেরা থেকে ভিডিও ক্যাপচার, বিল্ট-ইন এবং বাহ্যিক মাইক্রোফোন থেকে অডিও রেকর্ডিং এবং মিক্সিং, HLS, MPEG-4, QuickTime, MP3, AAC এবং FLAC সমর্থন সহ মিডিয়া প্লেব্যাক, AVAssetExportSession-এর মাধ্যমে ফাইল এক্সপোর্ট এবং রূপান্তর, রিভার্ব, ইকুয়ালাইজার এবং পিচ-শিফটিং ইফেক্ট সহ AVAudioEngine-এর মাধ্যমে রিয়েল-টাইম অডিও প্রসেসিং, পাশাপাশি AirPlay এবং নেটওয়ার্ক প্রোটোকলের মাধ্যমে স্ট্রিমিং প্রদান করে।
AVFoundation বেশ কয়েকটি মডিউল নিয়ে গঠিত, প্রতিটি মিডিয়া কাজের একটি নির্দিষ্ট ক্ষেত্রের জন্য দায়ী। উপাদানের পছন্দ কাজের উপর নির্ভর করে: ক্যাপচার, প্লেব্যাক, এক্সপোর্ট বা রিয়েল-টাইম প্রসেসিং।
| উপাদান | উদ্দেশ্য | মূল ক্লাস |
|---|---|---|
| ক্যাপচার | ক্যামেরা এবং মাইক্রোফোন নিয়ে কাজ | AVCaptureSession |
| প্লেব্যাক | অডিও এবং ভিডিও প্লেয়ার | AVPlayer / AVAudioPlayer |
| এডিটিং | কম্পোজিশন এবং মন্টাজ | AVMutableComposition |
| এক্সপোর্ট | অন্যান্য ফরম্যাটে রূপান্তর | AVAssetExportSession |
| অডিও ইঞ্জিন | রিয়েল-টাইম সাউন্ড প্রসেসিং | AVAudioEngine |
| মেটাডেটা | ID3, EXIF এবং XMP পড়া | AVMetadataItem |
AVCaptureSession ভিডিও এবং অডিও ক্যাপচারের জন্য কেন্দ্রীয় অবজেক্ট। এটি ফিজিক্যাল ডিভাইস (ক্যামেরা, মাইক্রোফোন) থেকে আগত ডেটা স্ট্রিম পরিচালনা করে, তাদের সেটিংস (রেজোলিউশন, FPS, ফরম্যাট) কনফিগার করে এবং আউটপুটে নির্দেশ দেয়: প্রিভিউ (AVCaptureVideoPreviewLayer), ফাইল রেকর্ডিং (AVCaptureMovieFileOutput) বা ফ্রেম-বাই-ফ্রেম প্রসেসিং (AVCaptureVideoDataOutput)।
AVPlayer একটি সর্বজনীন AVFoundation প্লেয়ার যা লোকাল এবং নেটওয়ার্ক উভয় মাধ্যমেই মিডিয়া কন্টেন্ট চালাতে সক্ষম। AVPlayer HLS স্ট্রিমিং, MPEG-4, QuickTime Movie এবং অধিকাংশ অডিও ফরম্যাট সমর্থন করে। প্লেব্যাক নিয়ন্ত্রণ AVPlayerItem-এর মাধ্যমে অ্যাসিনক্রোনাসভাবে পরিচালিত হয়। AVPlayerViewController কন্ট্রোল সহ রেডিমেড UI প্রদান করে: play/pause, scrubbing, AirPlay এবং PiP।
ভিডিও এবং অডিও ক্যাপচার AVFoundation-এর সবচেয়ে চাহিদাপূর্ণ সক্ষমতাগুলোর মধ্যে একটি। ক্যাপচার সেশন সেটআপে বেশ কয়েকটি ধাপ অন্তর্ভুক্ত: AVCaptureSession তৈরি করা, ইনপুট (ক্যামেরা, মাইক্রোফোন) যোগ করা, আউটপুট কনফিগার করা এবং সেশন শুরু করা।
আসুন iPhone-এর পিছনের ক্যামেরা থেকে ভিডিও ক্যাপচার এবং মাইক্রোফোন থেকে সাউন্ড রেকর্ডিংয়ের জন্য AVCaptureSession-এর ধাপে ধাপে সেটআপ দেখি। প্রক্রিয়াটি Swift-এ চারটি ধাপ নিয়ে গঠিত।
import AVFoundation
// 1. সেশন তৈরি এবং কনফিগারেশন
let session = AVCaptureSession()
session.sessionPreset = .hd1920x1080
// 2. ক্যামেরা ইনপুট যোগ করা
guard let camera = AVCaptureDevice.default(
for: .video
) else { return }
let cameraInput = try? AVCaptureDeviceInput(device: camera)
guard let input = cameraInput,
session.canAddInput(input)
else { return }
session.addInput(input)
// 3. রেকর্ডিংয়ের জন্য আউটপুট যোগ করা
let output = AVCaptureMovieFileOutput()
guard session.canAddOutput(output) else { return }
session.addOutput(output)
// 4. সেশন শুরু করা
session.startRunning()
Swift কোড একটি Full HD preset সহ AVCaptureSession তৈরি করে, পিছনের ক্যামেরাকে ভিডিও সোর্স হিসেবে সংযুক্ত করে এবং ফাইল রেকর্ডিংয়ের জন্য একটি আউটপুট যোগ করে। session.startRunning()-এর পরে, ক্যামেরা প্রিভিউ এবং আউটপুট ফাইলে ফ্রেম প্রেরণ শুরু করে। রেকর্ডিং গ্যালারিতে সংরক্ষণের বিকল্পসহ output.stopRecording()-এর মাধ্যমে বন্ধ করা হয়।
শুধুমাত্র অডিও ক্যাপচারের জন্য (ভিডিও ছাড়া), AVCaptureSession-এ শুধুমাত্র মাইক্রোফোন AVCaptureDevice.default(.audio)-এর মাধ্যমে যোগ করা হয়। আউটপুট হল রিয়েল-টাইম সাউন্ড প্রসেসিংয়ের জন্য AVAudioFileOutput বা AVCaptureAudioDataOutput। AVFoundation মাল্টি-চ্যানেল ক্যাপচার সমর্থন করে: iPad Pro-তে 8টি অডিও চ্যানেল পর্যন্ত এবং iPhone-এ 2টি পর্যন্ত, যা Lightning, USB-C বা Bluetooth-এর মাধ্যমে বাহ্যিক মাইক্রোফোন থেকে স্টিরিও রেকর্ডিংয়ের অনুমতি দেয়। ইনপুট সোর্স নির্বাচন AVAudioSession.sharedInstance().setPreferredInput-এর মাধ্যমে করা হয়, যা বাহ্যিক হেডসেট এবং Bluetooth মাইক্রোফোনের সাথে কাজ করা অ্যাপ্লিকেশনের জন্য গুরুত্বপূর্ণ।
AVFoundation মিডিয়া চালানোর দুটি প্রধান উপায় প্রদান করে: ভিডিওর জন্য AVPlayer এবং অডিওর জন্য AVAudioPlayer। আসুন AVPlayer ব্যবহার করে একটি রিমোট HLS স্ট্রিম চালানোর উদাহরণ দেখি।
কোডটি একটি AVPlayer তৈরি করে, URL থেকে HLS স্ট্রিম লোড করে এবং কম ভলিউম লেভেলে প্লেব্যাক শুরু করে। AVPlayerItem লোডিং এবং বাফারিং অবস্থা পরিচালনা করে এবং স্ট্যাটাসের KVO পর্যবেক্ষণ ত্রুটিগুলি পরিচালনা করতে দেয়।
import AVFoundation
import AVKit
// 1. HLS স্ট্রিম সহ AVPlayer তৈরি করা
let url = URL(
string: "https://example.com/stream.m3u8"
) !
let player = AVPlayer(url: url)
player.volume = 0.7
// 2. প্লেব্যাক
player.play()
// 3. প্লেয়ার প্রদর্শন
let playerVC = AVPlayerViewController()
playerVC.player = player
present(playerVC, animated: true)
// 4. স্ট্যাটাস মনিটরিং
player.currentItem?.addObserver(
self,
forKeyPath: "status",
options: .new,
context: nil
)
কোডটি HLS URL সহ একটি AVPlayer তৈরি করে, ভলিউম 70% সেট করে এবং প্লেব্যাক শুরু করে। AVPlayerViewController কন্ট্রোল, AirPlay এবং পিকচার-ইন-পিকচার মোড সহ একটি বিল্ট-ইন UI প্রদান করে। প্লেয়ারের স্ট্যাটাস KVO-এর মাধ্যমে নজরদারি করা হয় যখন HLS স্ট্রিম অস্থায়ীভাবে অনুপলব্ধ হয় তখন সেই ক্ষেত্রগুলি পরিচালনা করার জন্য।
ভিডিও ইন্টারফেস ছাড়া অডিও প্লেব্যাকের জন্য AVAudioPlayer ব্যবহার করা হয় — একটি হালকা প্লেয়ার যার AVPlayerItem প্রয়োজন হয় না। AVAudioPlayer MP3, AAC, ALAC, FLAC, WAV এবং AIFF অডিও ফরম্যাট সমর্থন করে, play(), pause() এবং stop() মেথড প্রদান করে, পাশাপাশি প্লেব্যাক সমাপ্তি এবং ডিকোডিং ত্রুটি ট্র্যাক করার জন্য AVAudioPlayerDelegate প্রদান করে। AVAudioPlayer iOS এবং macOS-এ ব্যাকগ্রাউন্ড মিউজিক প্লেব্যাক, পডকাস্ট এবং গেমসে সাউন্ড ইফেক্টের জন্য আদর্শ।
আসুন AVFoundation নিয়ে কাজ করার আরও দুটি সাধারণ পরিস্থিতি দেখি: AVAudioEngine-এর মাধ্যমে অডিও প্রসেসিং এবং অন্য ফরম্যাটে ভিডিও এক্সপোর্ট।
AVAudioEngine প্রসেসিং গ্রাফে নোড সংযুক্ত করে রিয়েল-টাইম অডিও প্রসেসিং সক্ষম করে: ইনপুট নোড (মাইক্রোফোন) → ইফেক্ট → আউটপুট নোড (স্পিকার)। নিচের উদাহরণে ভয়েসে রিভার্ব যোগ করা হয়েছে।
let engine = AVAudioEngine()
let reverb = AVAudioUnitReverb()
// রিভার্ব সেটআপ
reverb.loadFactoryPreset(.largeHall)
reverb.wetDryMix = 40
// সংযোগ: মাইক্রোফোন -> রিভার্ব -> স্পিকার
engine.attach(reverb)
engine.connect(
engine.inputNode,
to: reverb,
format: nil
)
engine.connect(
reverb,
to: engine.mainMixerNode,
format: nil
)
try? engine.start()
AVAudioEngine তিনটি নোডের একটি গ্রাফ তৈরি করে: ইনপুট (মাইক্রোফোন), ইফেক্ট (বড় হল প্রিসেট সহ রিভার্ব) এবং আউটপুট (স্পিকার)। engine.start()-এর পরে, মাইক্রোফোন থেকে অডিও রিয়েল-টাইমে ইফেক্ট দ্বারা প্রক্রিয়াজাত হয় এবং ডিভাইসের হেডফোন বা স্পিকারে আউটপুট হয়। সমস্ত আধুনিক Apple ডিভাইসে প্রসেসিং লেটেন্সি 10 ms-এর কম।
AVAudioEngine-এর একটি অতিরিক্ত সক্ষমতা হল AVAudioUnitEQ এবং AVAudioUnitMixer-এর মাধ্যমে সাউন্ড বিশ্লেষণ। ডেভেলপার যেকোনো অডিও স্ট্রিমে ইকুয়ালাইজার, কম্প্রেসার এবং লিমিটার যোগ করতে পারে। মিউজিক অ্যাপ্লিকেশনের জন্য, AVFoundation MIDI ফাইল প্লেব্যাকের জন্য AVAudioSequencer এবং স্পিচ সিন্থেসিসের জন্য AVSpeechSynthesizer প্রদান করে। সমস্ত উপাদান একটি একক অডিও গ্রাফে কাজ করে, যা Apple ডিভাইসে ক্যাপচার এবং প্রসেসিংয়ের মধ্যে 5 ms-এর কম লেটেন্সি প্রদান করে।
AVFoundation নিয়ে কাজ করার সময় সিস্টেম অনুমতি বিবেচনা করা গুরুত্বপূর্ণ: ক্যামেরা অ্যাক্সেসের জন্য Info.plist-এ NSCameraUsageDescription প্রয়োজন এবং মাইক্রোফোনের জন্য NSMicrophoneUsageDescription প্রয়োজন। AVFoundation স্বয়ংক্রিয়ভাবে একটি ডিভাইসে প্রথম অ্যাক্সেস প্রচেষ্টায় সিস্টেম অনুমতি ডায়ালগ দেখায়। ব্যবহারকারীর অস্বীকৃতি AVCaptureDevice.authorizationStatus()-এর মাধ্যমে পরিচালিত হয়, যা সেটিংসে যাওয়ার পরামর্শ সহ ক্যামেরা অনুপলব্ধতা সম্পর্কে সঠিক বার্তা দেখানোর অনুমতি দেয়।
AVFoundation প্রকল্পের Capabilities-এ Audio Background Mode-এর মাধ্যমে ব্যাকগ্রাউন্ড অডিও প্লেব্যাক সমর্থন করে। সক্রিয় করতে, UIBackgroundModes Info.plist-এ audio এন্ট্রি যোগ করুন এবং AVAudioSession কে .playback ক্যাটাগরি সহ কনফিগার করুন। ভিডিও ডিফল্টরূপে ব্যাকগ্রাউন্ডে চলে না, কিন্তু iPad-এ মিনিমাইজ করা অ্যাপে ভিডিও প্লেব্যাক চালিয়ে যেতে পিকচার-ইন-পিকচার মোড সহ AVPlayer ব্যবহার করা যেতে পারে। PiP মোড আইকন প্রোটোকল ডেলিগেট সহ AVPictureInPictureController-এর মাধ্যমে কনফিগার করা হয়।
সচরাচর জিজ্ঞাসিত প্রশ্ন
iOS 4+ বেসিক প্লেব্যাক এবং ক্যাপচারের জন্য। iOS 8+ AVAudioEngine-এর জন্য। iOS 17+ HDR মোডে AVAssetWriter-এর জন্য। ফ্রেমওয়ার্কের বর্তমান সংস্করণ সমস্ত iPhone, iPad এবং Mac ডিভাইসে সমর্থিত।
হ্যাঁ, AVPlayer HLS (HTTP Live Streaming) সমর্থন করে — Apple-এর প্রাথমিক স্ট্রিমিং প্রোটোকল। সার্ভারে মিডিয়া পাঠানোর জন্য, URLSession-এর উপরে কাস্টম প্রোটোকল সহ AVAssetWriter ব্যবহার করুন।
AVFoundation মিডিয়ার সাথে কাজ করার জন্য একটি নিম্ন-স্তরের ফ্রেমওয়ার্ক। AVKit AVFoundation-এর উপরের একটি স্তর যা রেডিমেড UI উপাদান প্রদান করে: AVPlayerViewController, AVPictureInPictureController এবং AVPipView।
হ্যাঁ, iOS 11 থেকে AVFoundation প্লেব্যাকের জন্য FLAC (Free Lossless Audio Codec) সমর্থন করে। ALAC (Apple Lossless) iOS 4 থেকে সমর্থিত। উভয় কোডেক AVAudioPlayer এবং AVPlayer-এর মাধ্যমে কাজ করে।
ReplayKit থেকে RPScreenRecorder-এর মাধ্যমে, যা অভ্যন্তরীণভাবে AVFoundation ব্যবহার করে। iOS 9 থেকে, স্ক্রিন রেকর্ডিং ঐচ্ছিক মাইক্রোফোনসহ RPScreenRecorder.shared().startRecording()-এর মাধ্যমে উপলব্ধ।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন