AVFoundation — ay isang multimedia framework ng Apple na nagbibigay ng buong siklo ng pagtatrabaho sa audio, video, at mga larawan sa iOS, macOS, tvOS, at watchOS. Sinasaklaw nito ang pag-capture mula sa camera at mikropono, pag-playback ng mga media file, pag-edit ng mga audio track, real-time na pagproseso ng tunog, at streaming sa pamamagitan ng network. Ayon sa Apple AVFoundation Documentation (2026), ang framework ay ginagamit sa 90% ng mga App Store application na nagtatrabaho sa media content.
Mga pangunahing punto
AVFoundation — ay isang pangunahing multimedia framework ng Apple, na ipinakilala noong iOS 4 (2010) bilang kapalit ng lumang UIWebView para sa pag-playback ng audio at video. Mula noon, ang AVFoundation ay nag-evolve sa isang kumpletong set ng mga tool para sa pagtatrabaho sa lahat ng uri ng media: mula sa simpleng pag-playback ng MP3 file hanggang sa propesyonal na pag-capture ng video na may multi-channel na mikropono at pagbabago ng tunog sa pamamagitan ng real-time na mga epekto.
Ang arkitektura ng AVFoundation ay binuo sa paligid ng ilang pangunahing abstraksyon: AVAsset (data ng media), AVPlayer (pag-playback), AVCaptureSession (pag-capture), at AVAudioEngine (pagproseso). Ang bawat bahagi ay gumagana nang asynchronous, na kritikal para sa pagpapanatili ng kinis ng UI habang naglo-load o nagpoproseso ng malalaking file. Ayon sa Apple (WWDC 2025), pinoproseso ng AVFoundation ang video hanggang 8K sa mga device na may M-series na chips nang walang pagkawala ng pagganap.
AVFoundation nagbibigay ng pag-capture ng video mula sa camera na may suporta para sa 4K ProRes, HDR, at hanggang 240 FPS sa slow motion, pag-record at paghahalo ng audio mula sa built-in at external na mikropono, pag-playback ng media na may suporta para sa HLS, MPEG-4, QuickTime, MP3, AAC, at FLAC, export at conversion ng mga file sa pamamagitan ng AVAssetExportSession, real-time na pagproseso ng tunog sa pamamagitan ng AVAudioEngine na may mga epekto ng reverberation, equalizer, at pitch-shifting, pati na rin ang streaming sa pamamagitan ng AirPlay at mga network protocol.
AVFoundation ay binubuo ng ilang module, bawat isa ay responsable para sa isang tiyak na lugar ng pagtatrabaho sa media. Ang pagpili ng bahagi ay depende sa gawain: pag-capture, pag-playback, export, o real-time na pagproseso.
| Bahagi | Layunin | Pangunahing klase |
|---|---|---|
| Pag-capture | Pagtatrabaho sa camera at mikropono | AVCaptureSession |
| Pag-playback | Audio at video player | AVPlayer / AVAudioPlayer |
| Pag-edit | Komposisyon at montage | AVMutableComposition |
| Export | Conversion sa ibang format | AVAssetExportSession |
| Audio engine | Real-time na pagproseso ng tunog | AVAudioEngine |
| Metadata | Pagbasa ng ID3, EXIF, at XMP | AVMetadataItem |
AVCaptureSession — ang sentral na bagay para sa pag-capture ng video at audio. Namamahala ito ng mga papasok na daloy ng data mula sa mga pisikal na device (camera, mikropono), nagko-configure ng kanilang mga setting (resolution, FPS, format), at nagdidirekta sa output: preview (AVCaptureVideoPreviewLayer), pag-record sa file (AVCaptureMovieFileOutput), o frame-by-frame na pagproseso (AVCaptureVideoDataOutput).
AVPlayer — isang unibersal na AVFoundation player, na may kakayahang mag-playback ng media content parehong lokal at sa pamamagitan ng network. Sinusuportahan ng AVPlayer ang HLS streaming, MPEG-4, QuickTime Movie, at karamihan sa mga audio format. Ang kontrol ng pag-playback ay ginagawa nang asynchronous sa pamamagitan ng AVPlayerItem. AVPlayerViewController nagbibigay ng ready-made na UI na may mga kontrol: play/pause, scrubbing, AirPlay, at PiP.
Pag-capture ng video at audio — isa sa mga pinaka-hinihiling na kakayahan ng AVFoundation. Ang pagsasaayos ng capture session ay may kasamang ilang hakbang: paggawa ng AVCaptureSession, pagdaragdag ng mga input (camera, mikropono), pag-set ng mga output, at pagsisimula ng session.
Tingnan natin ang step-by-step na pag-configure ng AVCaptureSession para sa pag-capture ng video mula sa rear camera ng iPhone at sabay na pag-record ng tunog mula sa mikropono. Ang proseso ay binubuo ng apat na hakbang sa Swift.
import AVFoundation
// 1. Paggawa at pag-configure ng session
let session = AVCaptureSession()
session.sessionPreset = .hd1920x1080
// 2. Pagdaragdag ng camera input
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. Pagdaragdag ng output para sa pag-record
let output = AVCaptureMovieFileOutput()
guard session.canAddOutput(output) else { return }
session.addOutput(output)
// 4. Pagsisimula ng session
session.startRunning()
Ang Swift code ay gumagawa ng AVCaptureSession na may Full HD preset, kinokonekta ang rear camera bilang video source, at nagdaragdag ng output para sa pag-record sa file. Pagkatapos simulan ang session.startRunning(), ang camera ay nagsisimulang magpadala ng mga frame sa preview at output file. Ang pagtigil ng pag-record ay ginagawa sa pamamagitan ng output.stopRecording() na may posibilidad na mag-save sa gallery.
Para sa pag-capture ng audio lamang (walang video), sa AVCaptureSession ay idinaragdag lamang ang mikropono sa pamamagitan ng AVCaptureDevice.default(.audio). Ang output ay AVAudioFileOutput o AVCaptureAudioDataOutput para sa real-time na pagproseso ng tunog. Sinusuportahan ng AVFoundation ang multi-channel na pag-capture: hanggang 8 audio channel sa iPad Pro at hanggang 2 sa iPhone, na nagpapahintulot ng stereo sound recording mula sa external na mikropono sa pamamagitan ng Lightning, USB-C, o Bluetooth connector. Ang pagpili ng input signal source ay ginagawa sa pamamagitan ng AVAudioSession.sharedInstance().setPreferredInput, na kritikal para sa mga application na nagtatrabaho sa external headsets at Bluetooth microphone.
AVFoundation nagbibigay ng dalawang pangunahing paraan ng pag-playback ng media: AVPlayer para sa video at AVAudioPlayer para sa audio. Tingnan natin ang halimbawa ng pag-playback ng remote HLS stream sa pamamagitan ng AVPlayer.
Ang code ay gumagawa ng AVPlayer, naglo-load ng HLS stream mula sa URL, at nagsisimula ng pag-playback na may pinababang antas ng volume. Ang AVPlayerItem ay namamahala sa estado ng paglo-load at buffering, at ang KVO observation ng status ay nagpapahintulot ng paghawak ng mga error.
import AVFoundation
import AVKit
// 1. Paggawa ng AVPlayer na may HLS stream
let url = URL(
string: "https://example.com/stream.m3u8"
) !
let player = AVPlayer(url: url)
player.volume = 0.7
// 2. Pag-playback
player.play()
// 3. Pagpapakita ng player
let playerVC = AVPlayerViewController()
playerVC.player = player
present(playerVC, animated: true)
// 4. Pagsubaybay ng status
player.currentItem?.addObserver(
self,
forKeyPath: "status",
options: .new,
context: nil
)
Ang code ay gumagawa ng AVPlayer na may HLS URL, nagtatakda ng volume sa 70%, at nagsisimula ng pag-playback. Ang AVPlayerViewController ay nagbibigay ng built-in na UI na may mga kontrol, AirPlay, at picture-in-picture mode. Ang status ng player ay sinusubaybayan sa pamamagitan ng KVO para sa paghawak ng mga kaso kung kailan ang HLS stream ay pansamantalang hindi available.
Para sa pag-playback ng audio nang walang video interface, ginagamit ang AVAudioPlayer — isang magaan na player na hindi nangangailangan ng AVPlayerItem. Sinusuportahan ng AVAudioPlayer ang mga audio format na MP3, AAC, ALAC, FLAC, WAV, at AIFF, nagbibigay ng mga pamamaraang play(), pause(), at stop(), pati na rin ang AVAudioPlayerDelegate para sa pagsubaybay sa pagtatapos ng pag-playback at mga error sa decoding. Ang AVAudioPlayer ay perpekto para sa background na pag-playback ng musika, podcast, at sound effects sa mga laro sa iOS at macOS.
Tingnan natin ang dalawa pang katangiang senaryo ng pagtatrabaho sa AVFoundation: pagproseso ng audio sa pamamagitan ng AVAudioEngine at export ng video sa ibang format.
AVAudioEngine nagpapahintulot ng real-time na pagproseso ng audio sa pamamagitan ng pagkonekta ng mga node sa isang processing graph: input node (mikropono) → mga epekto → output node (speaker). Sa halimbawa sa ibaba, ang reverberation ay idinaragdag sa boses.
let engine = AVAudioEngine()
let reverb = AVAudioUnitReverb()
// Pag-set ng reverberation
reverb.loadFactoryPreset(.largeHall)
reverb.wetDryMix = 40
// Koneksyon: mikropono -> reverberation -> speaker
engine.attach(reverb)
engine.connect(
engine.inputNode,
to: reverb,
format: nil
)
engine.connect(
reverb,
to: engine.mainMixerNode,
format: nil
)
try? engine.start()
Ang AVAudioEngine ay gumagawa ng graph ng tatlong node: input (mikropono), effect (reverberation na may malaking hall preset), at output (speaker). Pagkatapos ng engine.start(), ang tunog mula sa mikropono ay pinoproseso ng effect sa real-time at inilalabas sa headphone o speaker ng device. Ang processing latency ay mas mababa sa 10 ms sa lahat ng modernong Apple device.
Isang karagdagang kakayahan ng AVAudioEngine — pagsusuri ng tunog sa pamamagitan ng AVAudioUnitEQ at AVAudioUnitMixer. Ang developer ay maaaring magdagdag ng equalizer, compressor, at limiter sa anumang audio stream. Para sa mga music application, ang AVFoundation ay nagbibigay ng AVAudioSequencer para sa pag-playback ng MIDI file at AVSpeechSynthesizer para sa speech synthesis. Lahat ng bahagi ay gumagana sa iisang audio graph, na nagbibigay ng latency sa pagitan ng pag-capture at pagproseso na mas mababa sa 5 ms sa Apple devices.
Sa pagtatrabaho sa AVFoundation, mahalagang isaalang-alang ang mga pahintulot ng system: para sa access sa camera, kinakailangan ang NSCameraUsageDescription sa Info.plist, para sa mikropono — NSMicrophoneUsageDescription. Awtomatikong ipinapakita ng AVFoundation ang system dialog ng kahilingan ng pahintulot sa unang pagtatangkang i-access ang device. Ang pagtanggi ng user ay hinahawakan sa pamamagitan ng AVCaptureDevice.authorizationStatus(), na nagpapahintulot na magpakita ng tamang mensahe tungkol sa hindi availability ng camera na may proposal na pumunta sa mga setting.
Sinusuportahan ng AVFoundation ang background audio playback sa pamamagitan ng Audio Background Mode sa Capabilities ng proyekto. Para sa activation, sapat na magdagdag ng audio record sa UIBackgroundModes Info.plist at i-configure ang AVAudioSession na may kategoryang .playback. Ang video sa background ay hindi naka-default na nagpe-play, ngunit maaari mong gamitin ang AVPlayer na may picture-in-picture mode para sa pagpapatuloy ng pagpapakita ng video sa minimized na app sa iPad. Ang icon ng PiP mode ay nako-configure sa pamamagitan ng AVPictureInPictureController kasama ang protocol delegate.
Mga madalas itanong
iOS 4+ para sa basic playback at capture. iOS 8+ para sa AVAudioEngine. iOS 17+ para sa AVAssetWriter sa HDR mode. Ang kasalukuyang bersyon ng framework ay sinusuportahan sa lahat ng iPhone, iPad, at Mac device.
Oo, sinusuportahan ng AVPlayer ang HLS (HTTP Live Streaming) — ang pangunahing Apple protocol para sa streaming. Para sa pagpapadala ng media sa server, gamitin ang AVAssetWriter na may custom na protocol sa ibabaw ng URLSession.
AVFoundation — ay isang low-level framework para sa pagtatrabaho sa media. AVKit — isang layer sa ibabaw ng AVFoundation na nagbibigay ng ready-made na UI components: AVPlayerViewController, AVPictureInPictureController, at AVPipView.
Oo, mula noong iOS 11 sinusuportahan ng AVFoundation ang FLAC (Free Lossless Audio Codec) para sa playback. Ang ALAC (Apple Lossless) ay sinusuportahan mula noong iOS 4. Ang parehong codec ay gumagana sa pamamagitan ng AVAudioPlayer at AVPlayer.
Sa pamamagitan ng RPScreenRecorder mula sa ReplayKit, na panloob na gumagamit ng AVFoundation. Mula noong iOS 9, ang screen recording ay available sa pamamagitan ng RPScreenRecorder.shared().startRecording() na may opsyonal na mikropono.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din