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 επεξεργάζεται βίντεο έως 8K σε συσκευές με τη σειρά τσιπ M χωρίς απώλεια απόδοσης.
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 παρέχει μια έτοιμη διεπαφή χρήστη με στοιχεία ελέγχου: play/pause, κύλιση, AirPlay και PiP.
Η λήψη βίντεο και ήχου — μία από τις πιο περιζήτητες δυνατότητες του AVFoundation. Η ρύθμιση της συνεδρίας λήψης περιλαμβάνει διάφορα βήματα: δημιουργία AVCaptureSession, προσθήκη εισόδων (κάμερα, μικρόφωνο), ρύθμιση εξόδων και εκκίνηση της συνεδρίας.
Ας εξετάσουμε τη βήμα-προς-βήμα ρύθμιση του AVCaptureSession για λήψη βίντεο από την πίσω κάμερα iPhone και ταυτόχρονη εγγραφή ήχου από το μικρόφωνο. Η διαδικασία αποτελείται από τέσσερα βήματα σε 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 δημιουργεί ένα AVCaptureSession με προεπιλογή Full HD, συνδέει την πίσω κάμερα ως πηγή βίντεο και προσθέτει μια έξοδο για εγγραφή σε αρχείο. Μετά την εκκίνηση session.startRunning(), η κάμερα αρχίζει να στέλνει καρέ στην προεπισκόπηση και στο αρχείο εξόδου. Η διακοπή της εγγραφής γίνεται μέσω output.stopRecording() με δυνατότητα αποθήκευσης στη συλλογή.
Για λήψη μόνο ήχου (χωρίς βίντεο), στο AVCaptureSession προστίθεται μόνο το μικρόφωνο μέσω AVCaptureDevice.default(.audio). Η έξοδος είναι AVAudioFileOutput ή AVCaptureAudioDataOutput για επεξεργασία ήχου σε πραγματικό χρόνο. Το AVFoundation υποστηρίζει πολυκαναλική λήψη: έως 8 κανάλια ήχου σε iPad Pro και έως 2 σε iPhone, επιτρέποντας εγγραφή στερεοφωνικού ήχου από εξωτερικά μικρόφωνα μέσω Lightning, USB-C ή Bluetooth. Η επιλογή της πηγής σήματος εισόδου γίνεται μέσω AVAudioSession.sharedInstance().setPreferredInput, το οποίο είναι κρίσιμο για εφαρμογές που λειτουργούν με εξωτερικά ακουστικά και μικρόφωνα Bluetooth.
AVFoundation παρέχει δύο βασικές μεθόδους αναπαραγωγής πολυμέσων: AVPlayer για βίντεο και AVAudioPlayer για ήχο. Ας εξετάσουμε το παράδειγμα αναπαραγωγής μιας απομακρυσμένης ροής HLS μέσω AVPlayer.
Ο κώδικας δημιουργεί ένα AVPlayer, φορτώνει τη ροή HLS από URL και ξεκινά την αναπαραγωγή με μειωμένο επίπεδο έντασης. Το AVPlayerItem διαχειρίζεται την κατάσταση φόρτωσης και προσωρινής αποθήκευσης, και η παρατήρηση KVO της κατάστασης επιτρέπει τον χειρισμό σφαλμάτων.
import AVFoundation
import AVKit
// 1. Δημιουργία AVPlayer με ροή HLS
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
)
Ο κώδικας δημιουργεί ένα AVPlayer με URL HLS, ορίζει την ένταση στο 70% και ξεκινά την αναπαραγωγή. Το AVPlayerViewController παρέχει μια ενσωματωμένη διεπαφή με στοιχεία ελέγχου, AirPlay και λειτουργία εικόνας-εντός-εικόνας. Η κατάσταση του αναπαραγωγέα παρακολουθείται μέσω KVO για τον χειρισμό περιπτώσεων όταν η ροή HLS είναι προσωρινά μη διαθέσιμη.
Για αναπαραγωγή ήχου χωρίς διεπαφή βίντεο χρησιμοποιείται το AVAudioPlayer — ένας ελαφρύς αναπαραγωγέας που δεν απαιτεί AVPlayerItem. Το AVAudioPlayer υποστηρίζει μορφές ήχου MP3, AAC, ALAC, FLAC, WAV και AIFF, παρέχει μεθόδους play(), pause() και stop(), καθώς και το πρωτόκολλο AVAudioPlayerDelegate για παρακολούθηση της ολοκλήρωσης αναπαραγωγής και σφαλμάτων αποκωδικοποίησης. Το AVAudioPlayer είναι ιδανικό για αναπαραγωγή μουσικής στο παρασκήνιο, podcast και ηχητικών εφέ σε παιχνίδια σε iOS και macOS.
Ας εξετάσουμε δύο ακόμη χαρακτηριστικά σενάρια εργασίας με το AVFoundation: επεξεργασία ήχου μέσω AVAudioEngine και εξαγωγή βίντεο σε άλλη μορφή.
AVAudioEngine επιτρέπει την επεξεργασία ήχου σε πραγματικό χρόνο συνδέοντας κόμβους (nodes) σε ένα γράφημα επεξεργασίας: κόμβος εισόδου (μικρόφωνο) → εφέ → κόμβος εξόδου (ηχείο). Στο παρακάτω παράδειγμα, προστίθεται αντήχηση στη φωνή.
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(), ο ήχος από το μικρόφωνο επεξεργάζεται από το εφέ σε πραγματικό χρόνο και εξέρχεται στα ακουστικά ή στο ηχείο της συσκευής. Η καθυστέρηση επεξεργασίας είναι μικρότερη από 10 ms σε όλες τις σύγχρονες συσκευές Apple.
Μια πρόσθετη δυνατότητα του AVAudioEngine — ανάλυση ήχου μέσω AVAudioUnitEQ και AVAudioUnitMixer. Ο προγραμματιστής μπορεί να προσθέσει ισοσταθμιστή, συμπιεστή και περιοριστή σε οποιαδήποτε ροή ήχου. Για μουσικές εφαρμογές, το AVFoundation παρέχει AVAudioSequencer για αναπαραγωγή αρχείων MIDI και AVSpeechSynthesizer για σύνθεση ομιλίας. Όλα τα στοιχεία λειτουργούν σε ένα ενιαίο γράφημα ήχου, παρέχοντας καθυστέρηση μεταξύ λήψης και επεξεργασίας μικρότερη από 5 ms σε συσκευές Apple.
Κατά την εργασία με το AVFoundation, είναι σημαντικό να λαμβάνονται υπόψη οι άδειες συστήματος: για πρόσβαση στην κάμερα απαιτείται NSCameraUsageDescription στο Info.plist, για το μικρόφωνο — NSMicrophoneUsageDescription. Το AVFoundation εμφανίζει αυτόματα το παράθυρο διαλόγου αίτησης άδειας κατά την πρώτη προσπάθεια πρόσβασης στη συσκευή. Η άρνηση του χρήστη χειρίζεται μέσω AVCaptureDevice.authorizationStatus(), επιτρέποντας τη σωστή εμφάνιση μηνύματος σχετικά με τη μη διαθεσιμότητα της κάμερας με πρόταση μετάβασης στις ρυθμίσεις.
Το AVFoundation υποστηρίζει αναπαραγωγή ήχου στο παρασκήνιο μέσω Audio Background Mode στις Δυνατότητες του έργου. Για ενεργοποίηση, αρκεί να προστεθεί μια εγγραφή audio στο UIBackgroundModes Info.plist και να ρυθμιστεί το AVAudioSession με κατηγορία .playback. Το βίντεο στο παρασκήνιο δεν αναπαράγεται από προεπιλογή, αλλά μπορείτε να χρησιμοποιήσετε το AVPlayer με λειτουργία pictureInPicture για συνέχιση της προβολής βίντεο στη μικρογραφία της εφαρμογής σε iPad. Το εικονίδιο της λειτουργίας PiP διαμορφώνεται μέσω AVPictureInPictureController μαζί με τον εκπρόσωπο πρωτοκόλλου.
Συχνές ερωτήσεις
iOS 4+ για βασική αναπαραγωγή και λήψη. iOS 8+ για AVAudioEngine. iOS 17+ για AVAssetWriter σε λειτουργία HDR. Η τρέχουσα έκδοση του πλαισίου υποστηρίζεται σε όλες τις συσκευές iPhone, iPad και Mac.
Ναι, το AVPlayer υποστηρίζει HLS (HTTP Live Streaming) — το κύριο πρωτόκολλο ροής της Apple. Για αποστολή πολυμέσων στον διακομιστή, χρησιμοποιήστε το AVAssetWriter με προσαρμοσμένο πρωτόκολλο πάνω από το URLSession.
AVFoundation — είναι ένα χαμηλού επιπέδου πλαίσιο για εργασία με πολυμέσα. AVKit — ένα στρώμα πάνω από το AVFoundation που παρέχει έτοιμα στοιχεία διεπαφής: AVPlayerViewController, AVPictureInPictureController και AVPipView.
Ναι, από το iOS 11 το AVFoundation υποστηρίζει FLAC (Free Lossless Audio Codec) για αναπαραγωγή. Το ALAC (Apple Lossless) υποστηρίζεται από το iOS 4. Και οι δύο κωδικοποιητές λειτουργούν μέσω AVAudioPlayer και AVPlayer.
Μέσω RPScreenRecorder από το ReplayKit, το οποίο εσωτερικά χρησιμοποιεί AVFoundation. Από το iOS 9, η εγγραφή οθόνης είναι διαθέσιμη μέσω RPScreenRecorder.shared().startRecording() με προαιρετικό μικρόφωνο.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης