Audio Session — τι είναι, κατηγορίες και διαμόρφωση στο iOS

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-05-24 Χρόνος ανάγνωσης: 8 λεπ

Audio Session — ο κεντρικός μηχανισμός του iOS για τη διαχείριση της ηχητικής συμπεριφοράς της εφαρμογής: αλληλεπίδραση με το σύστημα, χειρισμός διακοπών και δρομολόγηση ήχου. Κάθε εφαρμογή iOS λαμβάνει μία μοναδική ηχητική συνεδρία που καθορίζει πως συμπεριφέρεται ο ήχος κατά το κλείδωμα της οθόνης, τις κλήσεις και τη σύνδεση Bluetooth. Σύμφωνα με το Apple Developer Documentation, 2026, το Audio Session ρυθμίζεται μέσω κατηγορίας και λειτουργίας — χωρίς σωστή διαμόρφωση, η εφαρμογή ενδέχεται να μην αναπαράγει ήχο στο παρασκήνιο.

Βασικά σημεία

  • Audio Session (AVAudioSession) — το αντικείμενο συστήματος iOS που διαχειρίζεται την ηχητική συμπεριφορά της εφαρμογής σε επίπεδο λειτουργικού συστήματος.
  • Η κατηγορία της συνεδρίας καθορίζει τη βασική συμπεριφορά: playback, record, ambient, playAndRecord και άλλες.
  • Οι λειτουργίες και επιλογές διευκρινίζουν τη συμπεριφορά: default, voiceChat, videoRecording, allowBluetooth.
  • Κατά τη διακοπή (κλήση, ξυπνητήρι) η συνεδρία λαμβάνει ειδοποίηση μέσω του NotificationCenter με τύπο interruptionType.
  • Για αναπαραγωγή στο παρασκήνιο, πρέπει να ενεργοποιηθεί το Background Modes — Audio, AirPlay and Picture in Picture.

Τι είναι το Audio Session;

Audio Session — είναι ένα μοναδικό στιγμιότυπο AVAudioSession που δημιουργείται από το σύστημα κατά την εκκίνηση της εφαρμογής και υπάρχει καθ' όλη τη διάρκεια του κύκλου ζωής της. Λειτουργεί ως μεσάζων μεταξύ της εφαρμογής και του ηχητικού συστήματος iOS: η διαμόρφωση της κατηγορίας καθορίζει εάν η εφαρμογή επιτρέπεται να αναπαράγει ήχο στο παρασκήνιο, εάν ο ήχος θα σβήνει κατά τη διάρκεια μιας κλήσης και σε ποιες συσκευές θα εξάγεται ο ήχος.

Σε αντίθεση με το Android Audio Focus, όπου κάθε εφαρμογή ανεξάρτητα ζητά και απελευθερώνει εστίαση, το iOS Audio Session διαχειρίζεται κεντρικά μέσω μιας συνεδρίας ανά εφαρμογή. Κατά την ενεργοποίηση της συνεδρίας, το σύστημα απενεργοποιεί αυτόματα τη συνεδρία της προηγούμενης εφαρμογής, στέλνοντάς της ειδοποίηση διακοπής. Αυτή η αρχιτεκτονική διαφορά καθορίζει διαφορετική προσέγγιση στο χειρισμό ήχου στις δύο πλατφόρμες.

Σύμφωνα με το WWDC 2024 Session 211, περίπου το 40% των προβλημάτων ήχου σε εφαρμογές iOS προκαλούνται από εσφαλμένη διαμόρφωση του Audio Session. Το πιο συνηθισμένο λάθος — η επιλογή της κατηγορίας ambient αντί για playback, με αποτέλεσμα ο ήχος να εξαφανίζεται κατά το κλείδωμα της οθόνης.

Αρχή λειτουργίας του AVAudioSession

Κατά την εκκίνηση, η εφαρμογή λαμβάνει το sharedInstance της συνεδρίας, ορίζει την κατηγορία μέσω της κλήσης setCategory(_:mode:options:) και ενεργοποιεί τη συνεδρία μέσω του setActive(true). Μετά την ενεργοποίηση, το iOS λαμβάνει υπόψη τις πολιτικές κατηγορίας για τη δρομολόγηση. Εάν μια άλλη εφαρμογή ενεργοποιεί τη δική της συνεδρία, η τρέχουσα λαμβάνει ειδοποίηση AudioSessionInterruptionType.began μέσω του Notification.Name.AVAudioSessionInterruption.

Κατηγορίες Audio Session

Κατηγορία — η κύρια παράμετρος του Audio Session, που καθορίζει έξι προκαθορισμένες παραλλαγές συμπεριφοράς. Η επιλογή κατηγορίας είναι η πρώτη και πιο σημαντική απόφαση κατά τη διαμόρφωση ήχου στο iOS.

ΚατηγορίαΠότε να χρησιμοποιείτεΉχος παρασκηνίουΣίγαση στο mute
ambientΠαιχνίδια, εφέ παρασκηνίουΌχιΝαι
playbackΜουσική, podcasts, ηχητικά βιβλίαΝαιΌχι
recordΜαγνητόφωνο, ηχογράφησηΌχιΔ/Ι
playAndRecordVoIP, φωνητικά μηνύματαΝαιΌχι
multiRouteMixer DJ, καραόκεΝαιΌχι
soloAmbientΠροεπιλογή (iOS default)ΌχιΝαι

Κατηγορία playback — η κύρια επιλογή για συσκευές αναπαραγωγής

Για συσκευές αναπαραγωγής μουσικής και βίντεο, χρησιμοποιείτε πάντα playback. Αυτή η κατηγορία επιτρέπει: αναπαραγωγή ήχου με κλειδωμένη οθόνη, με απενεργοποιημένο το διακόπτη σίγασης (φυσικό κουμπί στο σώμα του iPhone) και με ελαχιστοποιημένη εφαρμογή. Χωρίς την κατηγορία playback, η συνεδρία απενεργοποιείται κατά το κλείδωμα της οθόνης ή την ελαχιστοποίηση της εφαρμογής.

Η κατηγορία ambient είναι κατάλληλη για παιχνίδια και εφαρμογές με ήχους παρασκηνίου — επιτρέπει σε άλλες εφαρμογές να συνεχίσουν την αναπαραγωγή. Για παράδειγμα, εάν ο χρήστης ακούει μουσική και ανοίγει ένα παιχνίδι με συνεδρία ambient, η μουσική συνεχίζει να παίζει πάνω από τους ήχους του παιχνιδιού. Αυτή είναι μια θεμελιώδης διαφορά από το Android, όπου ένα τέτοιο σενάριο απαιτεί ρητή άδεια duck.

Πώς να ρυθμίσετε το Audio Session

Η διαμόρφωση του Audio Session πρέπει να εκτελείται πριν από την έναρξη οποιασδήποτε αναπαραγωγής. Συνιστάται η ρύθμιση της συνεδρίας στη μέθοδο application(_:didFinishLaunchingWithOptions:) ή στον αρχικοποιητή της συσκευής αναπαραγωγής. Μετά τη ρύθμιση της κατηγορίας, η συνεδρία πρέπει να ενεργοποιηθεί.

Βασική ρύθμιση Audio Session σε Swift

swift
import AVFAudio

let session = AVAudioSession.sharedInstance

do {
    try session.setCategory(
        playback,
        mode: default,
        options: [allowBluetooth, defaultToSpeaker]
    )
    try session.setActive(true)
} catch {
    print("Αποτυχία ρύθμισης Audio Session: \(error.localizedDescription)")
}

Η παράμετρος options περιλαμβάνει allowBluetooth (έξοδος σε ακουστικά Bluetooth) και defaultToSpeaker (αναπαραγωγή μέσω ηχείου, όχι μέσω ακουστικού). Η επιλογή allowBluetooth είναι υποχρεωτική για εφαρμογές που υποστηρίζουν ακουστικά Bluetooth — χωρίς αυτήν, ο ήχος μπορεί να εξάγεται μέσω του ενσωματωμένου ηχείου ακόμη και με συνδεδεμένα ακουστικά.

Ρύθμιση για εγγραφή και αναπαραγωγή (VoIP)

swift
let session = AVAudioSession.sharedInstance
try session.setCategory(
    playAndRecord,
    mode: voiceChat,
    options: [allowBluetooth, allowBluetoothA2DP]
)

try session.overrideOutputAudioPort(speaker)
try session.setActive(true)

Η κατηγορία playAndRecord με λειτουργία voiceChat βελτιστοποιεί τη διαδρομή ήχου για φωνητική επικοινωνία: περιλαμβάνει καταστολή ηχούς, αυτόματο έλεγχο απολαβής (AGC) και επιλογή βέλτιστου κωδικοποιητή. Το OverrideOutputAudioPort(.speaker) εξαναγκάζει την έξοδο μέσω ηχείου ακόμη και με συνδεδεμένα ακουστικά — χρήσιμο για κλήσεις handsfree.

Ενεργοποίηση και απενεργοποίηση συνεδρίας

Η κλήση setActive(true) ενεργοποιεί τη συνεδρία και ειδοποιεί το σύστημα ότι η εφαρμογή θα χρησιμοποιήσει ήχο. Κατά την παύση της αναπαραγωγής, συνιστάται η απενεργοποίηση της συνεδρίας ώστε άλλες εφαρμογές να μπορούν να λάβουν τη ροή ήχου. Εξαίρεση — εφαρμογές με μακρά αναπαραγωγή στο παρασκήνιο (μουσική, podcasts), όπου η συνεδρία παραμένει ενεργή καθ' όλη τη διάρκεια του κομματιού.

Είναι σημαντικό να χειρίζεστε σφάλματα στο setActive. Εάν μια άλλη συνεδρία υψηλής προτεραιότητας είναι ενεργή (π.χ. Τηλέφωνο κατά τη διάρκεια κλήσης), το setActive μπορεί να προκαλέσει σφάλμα. Σε αυτήν την περίπτωση, πρέπει να περιμένετε την ειδοποίηση AudioSessionInterruptionType.ended και να επαναλάβετε την ενεργοποίηση.

Λειτουργίες και πολιτικές Audio Session

Η λειτουργία (mode) διευκρινίζει την κατηγορία και βελτιστοποιεί τη διαδρομή ήχου για συγκεκριμένο τύπο χρήσης. Κάθε λειτουργία αλλάζει τη συμπεριφορά του AGC, της καταστολής ηχούς και των κωδικοποιητών. Οι λειτουργίες δεν αντικαθιστούν την κατηγορία, αλλά τη συμπληρώνουν — μία κατηγορία μπορεί να λειτουργήσει με διαφορετικές λειτουργίες.

  • default — τυπική λειτουργία για μουσική και βίντεο. AGC απενεργοποιημένο, καταστολή ηχούς ελάχιστη.
  • voiceChat — βελτιστοποίηση για VoIP. Περιλαμβάνει καταστολή ηχούς, AGC, μείωση θορύβου. Χρησιμοποιήστε με την κατηγορία playAndRecord.
  • videoRecording — για εγγραφή βίντεο. Προτεραιότητα ποιότητας εγγραφής έναντι αναπαραγωγής. Χρησιμοποιήστε με την κατηγορία record ή playAndRecord.
  • measurement — για μετρήσεις ήχου. Ελάχιστη επεξεργασία σήματος, χωρίς AGC ή καταστολή ηχούς.
  • gameChat — για φωνητική συνομιλία σε παιχνίδια. Παρόμοιο με voiceChat, αλλά με προτεραιότητα στον ήχο του παιχνιδιού.
  • moviePlayback — για παρακολούθηση ταινιών. Βελτιστοποίηση για πολυκαναλικό ήχο (5.1, 7.1) και Dolby Atmos.

Επιλογές κατηγορίας Audio Session

Οι επιλογές παρέχουν λεπτομερή ρύθμιση της συμπεριφοράς της συνεδρίας. Κάθε επιλογή είναι μια σημαία που συνδυάζεται με άλλες σε έναν πίνακα. Για παράδειγμα, το [.allowBluetooth, .defaultToSpeaker, .interruptSpokenAudioAndMix] επιτρέπει την έξοδο ήχου σε ακουστικά Bluetooth, τη χρήση ηχείου από προεπιλογή και την ανάμειξη με ηχητικά βιβλία.

Στο iOS 17+ εμφανίστηκε η επιλογή spatialAudio, η οποία ενεργοποιεί εξατομικευμένο χωρικό ήχο για AirPods μέσω του AVAudioSessionSpatialPreferences. Σύμφωνα με το WWDC 2024, ο χωρικός ήχος αυξάνει την αφοσίωση των χρηστών εφαρμογών μουσικής κατά 25% σε δοκιμές της Apple.

Χειρισμός διακοπών και κλήσεων

Διακοπές (interruptions) — η βασική διαφορά μεταξύ Audio Session και Android Audio Focus. Στο iOS, οι διακοπές αντιμετωπίζονται μέσω του NotificationCenter με εγγραφή στο AVAudioSession.interruptionNotification. Η ειδοποίηση περιέχει ένα λεξικό με τον τύπο διακοπής: began ή ended.

Εγγραφή σε ειδοποιήσεις διακοπής

swift
override func viewDidLoad() {
    super.viewDidLoad()
    let center = NotificationCenter.default
    center.addObserver(
        self,
        selector: #selector(handleInterruption),
        name: AVAudioSession.interruptionNotification,
        object: nil
    )
}

@objc func handleInterruption(_ notification: Notification) {
    guard let userInfo = notification.userInfo,
        let type = userInfo[AVAudioSession.interruptionTypeKey]
            as? AVAudioSessionInterruptionType
    else { return }

    switch type {
    case began:
        pausePlayback()
    case ended:
        guard let options = userInfo[AVAudioSession.interruptionOptionKey]
            as? AVAudioSessionInterruptionOptions
        else { return }

        if options.contains(shouldResume) {
            resumePlayback()
        }
    }

Κατά τη λήψη του interruptionType.began, η συσκευή αναπαραγωγής πρέπει να διακόψει την αναπαραγωγή. Στο interruptionType.ended, η ιδιότητα interruptionOptionKey υποδεικνύει εάν η συσκευή αναπαραγωγής μπορεί να συνεχίσει αυτόματα (shouldResume). Εάν ο χρήστης τερμάτισε την κλήση, shouldResume = true. Εάν η κλήση έληξε λόγω χρονικού ορίου — shouldResume = false, η συνέχιση δεν επιτρέπεται.

Χειρισμός διακοπών από άλλες εφαρμογές

Όταν μια άλλη εφαρμογή ενεργοποιεί το Audio Session της με κατηγορία playback, η τρέχουσα συνεδρία λαμβάνει ειδοποίηση διακοπής. Εάν η άλλη εφαρμογή χρησιμοποιεί ambient, η διακοπή δεν συμβαίνει — οι ήχοι αναμειγνύονται. Αυτή η συμπεριφορά διαφέρει ριζικά από το Android, όπου κάθε ενεργοποίηση του Audio Focus προκαλεί γεγονός LOSS.

Για εφαρμογές που πρέπει να συνεχίσουν την αναπαραγωγή κατά την ενεργοποίηση άλλων συνεδριών (π.χ. πλοήγηση ενώ παίζει μουσική), χρησιμοποιήστε την επιλογή .mixWithOthers. Αυτή η επιλογή επιτρέπει την ανάμειξη ήχου με άλλες εφαρμογές και οι διακοπές δεν αποστέλλονται. Το MixWithOthers — το αντίστοιχο iOS της λειτουργίας duck στο Android.

Δρομολόγηση ήχου και Bluetooth

Το Audio Session διαχειρίζεται αυτόματα τη δρομολόγηση ήχου μεταξύ ενσωματωμένων ηχείων, ακουστικών, ακουστικών Bluetooth και συσκευών AirPlay. Η εφαρμογή μπορεί να παρακολουθεί την τρέχουσα διαδρομή μέσω της ιδιότητας currentRoute και να λαμβάνει ειδοποιήσεις αλλαγών μέσω του AVAudioSession.routeChangeNotification.

Κατά τη σύνδεση ακουστικών Bluetooth, το iOS αλλάζει αυτόματα την έξοδο ήχου σε αυτά, εάν η συνεδρία έχει ρυθμιστεί με την επιλογή allowBluetooth. Χωρίς αυτήν την επιλογή, ο ήχος συνεχίζει να ρέει μέσω του ενσωματωμένου ηχείου. Από το iOS 16, κατά τη σύνδεση AirPods Pro, το σύστημα ενεργοποιεί αυτόματα συγχρονισμό ProMotion για μείωση της καθυστέρησης.

Παρακολούθηση αλλαγής διαδρομής

Η εγγραφή στο routeChangeNotification επιτρέπει την αντίδραση στη σύνδεση και αποσύνδεση ακουστικών. Κατά την αποσύνδεση ακουστικών Bluetooth, η συσκευή αναπαραγωγής πρέπει να διακόψει την αναπαραγωγή — ο χρήστης μπορεί να μην αναμένει ότι ο ήχος θα αρχίσει να παίζει από το ηχείο του τηλεφώνου. Σύμφωνα με το Apple HIG (2026), αυτή είναι υποχρεωτική συμπεριφορά για εφαρμογές μουσικής.

Οι ιδιότητες availableInputs και availableOutputs επιστρέφουν μια λίστα διαθέσιμων συσκευών ήχου με τους τύπους τους (builtInSpeaker, headphones, bluetoothA2DP, hdmi). Ο προγραμματιστής μπορεί να επιλέξει προγραμματικά μια συγκεκριμένη συσκευή μέσω του overrideOutputAudioPort για προσαρμοσμένα σενάρια δρομολόγησης.

Συχνές ερωτήσεις

Σε τι διαφέρει το Audio Session από το Android Audio Focus;

Η βασική διαφορά — αρχιτεκτονική. Το Audio Session είναι μια κεντρική συνεδρία ανά εφαρμογή, που ρυθμίζεται μία φορά. Το Audio Focus στο Android απαιτεί χειροκίνητη αίτηση εστίασης κάθε φορά κατά την αναπαραγωγή. Επιπλέον, το iOS υποστηρίζει ανάμειξη μέσω της επιλογής mixWithOthers, ενώ στο Android το duck είναι η μόνη εναλλακτική για πλήρη διακοπή.

Γιατί εξαφανίζεται ο ήχος κατά το κλείδωμα της οθόνης του iPhone;

Η πιο συνηθισμένη αιτία — εσφαλμένη κατηγορία Audio Session. Εάν έχει επιλεγεί ambient ή soloAmbient, ο ήχος σταματά κατά το κλείδωμα της οθόνης. Αλλάξτε την κατηγορία σε playback και βεβαιωθείτε ότι στο Info.plist έχει προστεθεί Background Modes — Audio, AirPlay, and Picture in Picture.

Πώς να επιτρέψω σε δύο εφαρμογές να παίζουν ταυτόχρονα στο iOS;

Προσθέστε την επιλογή .mixWithOthers στο setCategory. Αυτό θα επιτρέψει την ανάμειξη του ήχου της εφαρμογής σας με άλλες ενεργές συνεδρίες. Χωρίς αυτήν την επιλογή, η νέα εφαρμογή διακόπτει την τρέχουσα. Το MixWithOthers — το αντίστοιχο της λειτουργίας duck στο Android, αλλά με πλήρη διατήρηση της έντασης.

Πώς να αλλάξω προγραμματικά τον ήχο σε ηχείο Bluetooth;

Χρησιμοποιήστε το overrideOutputAudioPort με nil για αυτόματη επιλογή. Για εξαναγκασμένη έξοδο σε Bluetooth: λάβετε AVAudioSessionRouteDescription από availableOutputs, επιλέξτε θύρα με τύπο .bluetoothA2DP και μεταβιβάστε την στο overrideOutputAudioPort. Βεβαιωθείτε ότι η συνεδρία έχει ρυθμιστεί με allowBluetooth.

Πρέπει να καλώ το setActive(false) κατά την παύση της αναπαραγωγής;

Για τις περισσότερες εφαρμογές — ναι. Η απενεργοποίηση της συνεδρίας κατά την παύση επιτρέπει σε άλλες εφαρμογές να αποκτήσουν εστίαση ήχου. Εξαίρεση — συσκευές αναπαραγωγής μουσικής με μακρά αναπαραγωγή στο παρασκήνιο. Εάν η παύση είναι σύντομη (λιγότερο από 5 δευτερόλεπτα), καλύτερα να αφήσετε τη συνεδρία ενεργή για γρήγορη συνέχιση.

Σύνοψη

  • Audio Session (AVAudioSession) — μία ηχητική συνεδρία ανά εφαρμογή στο iOS που διαχειρίζεται τη συμπεριφορά ήχου σε επίπεδο λειτουργικού συστήματος.
  • Έξι κατηγορίες: ambient, playback, record, playAndRecord, multiRoute, soloAmbient — καθορίζουν τη βασική ηχητική συμπεριφορά.
  • Για αναπαραγωγή στο παρασκήνιο, απαιτούνται η κατηγορία playback και το Background Modes στο Info.plist.
  • Οι διακοπές αντιμετωπίζονται μέσω του NotificationCenter με τύπους began (παύση) και ended (συνέχιση εάν shouldResume).
  • Η επιλογή .mixWithOthers ενεργοποιεί την ανάμειξη ήχου με άλλες εφαρμογές χωρίς διακοπή.
  • Η δρομολόγηση διαχειρίζεται αυτόματα, αλλά παρακολουθείται μέσω του routeChangeNotification για παύση κατά την αποσύνδεση ακουστικών.
  • Η κατηγορία playAndRecord με λειτουργία voiceChat — πρότυπο για εφαρμογές VoIP με καταστολή ηχούς και AGC.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης