AVPlayerViewController: Τι είναι, τρόποι ενσωμάτωσης στο iOS

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

AVPlayerViewController — ένας ενσωματωμένος ελεγκτής συσκευής αναπαραγωγής βίντεο στο οικοσύστημα Apple, σχεδιασμένος για αναπαραγωγή πολυμέσων σε iOS και tvOS. Παρέχει μια διεπαφή πλήρους οθόνης με στοιχεία ελέγχου, υποστήριξη υποτίτλων και AirPlay χωρίς την ανάγκη σύνταξης προσαρμοσμένου UI. Σύμφωνα με την Apple Developer Documentation, 2026, το AVPlayerViewController ενσωματώνεται με λίγες γραμμές κώδικα και υποστηρίζει HLS, MP4 και τις περισσότερες μορφές πολυμέσων.

Κύρια σημεία

  • AVPlayerViewController — ο τυπικός ελεγκτής αναπαραγωγής βίντεο από το πλαίσιο AVKit για iOS και tvOS.
  • Παρέχει μια έτοιμη διεπαφή χρήστη με πίνακα ελέγχου, κουμπιά αναπαραγωγής και ένδειξη προόδου.
  • Ο ελεγκτής υποστηρίζει αυτόματα υπότιτλους, ηχητικές διαδρομές, AirPlay και Picture in Picture.
  • Η ενσωμάτωση γίνεται μέσω του AVPlayer — του βασικού αντικειμένου διαχείρισης αναπαραγωγής.
  • Ο προγραμματιστής μπορεί να διαμορφώσει την εμφάνιση των στοιχείων ελέγχου, να προσθέσει overlay προβολή και να χειριστεί συμβάντα μέσω του εκπροσώπου.

Τι είναι το AVPlayerViewController;

AVPlayerViewController — είναι ένα στοιχείο του πλαισίου AVKit που παρέχει μια έτοιμη διεπαφή για αναπαραγωγή βίντεο σε εφαρμογές Apple. Απαλλάσσει τον προγραμματιστή από την ανάγκη δημιουργίας προσαρμοσμένης συσκευής αναπαραγωγής από το μηδέν, προσφέροντας τυπικά στοιχεία ελέγχου: play/pause, μεταγύριση, ρύθμιση έντασης και λειτουργία πλήρους οθόνης.

Σε αντίθεση με το χαμηλού επιπέδου AVPlayerLayer, το οποίο απαιτεί χειροκίνητη δημιουργία UI, το AVPlayerViewController διαχειρίζεται πλήρως τον κύκλο ζωής της συσκευής αναπαραγωγής. Ο ελεγκτής χειρίζεται αυτόματα την περιστροφή οθόνης, προσαρμόζεται στην Safe Area σε iPhone με εγκοπή και υποστηρίζει πολλαπλές εργασίες στο iPad.

Σύμφωνα με την Apple Documentation (2026), το AVPlayerViewController είναι συμβατό με AVPlayer και AVQueuePlayer, επιτρέποντας την αναπαραγωγή τόσο μεμονωμένων αρχείων όσο και λιστών αναπαραγωγής. Υποστηρίζονται URL από τοπικό αποθηκευτικό χώρο, δικτυακές ροές HLS και κρυπτογραφημένο περιεχόμενο FairPlay.

Ιστορία και εκδόσεις του AVPlayerViewController

Το στοιχείο εμφανίστηκε στο iOS 8 μαζί με το AVKit ως αντικατάσταση του παρωχημένου MPMoviePlayerController. Στο iOS 11 προστέθηκε υποστήριξη για Picture in Picture και εμφάνιση υποτίτλων. Στο iOS 14 ο ελεγκτής απέκτησε προσαρμόσιμο πίνακα μεταφοράς μέσω του εκπροσώπου AVPlayerViewControllerDelegate. Από το iOS 16, προστέθηκε υποστήριξη για δυναμική αντικατάσταση αρχείου πολυμέσων χωρίς εκ νέου δημιουργία της συσκευής αναπαραγωγής.

Το σύγχρονο AVPlayerViewController είναι βελτιστοποιημένο για οθόνες ProMotion — ο ρυθμός καρέ βίντεο συγχρονίζεται αυτόματα με τον ρυθμό ανανέωσης οθόνης. Στο tvOS το στοιχείο προσαρμόζεται στη διεπαφή εστίασης του Siri Remote, ενώ στο macOS — στη λειτουργία παραθύρου του QuickTime Player.

Πώς λειτουργεί το AVPlayerViewController

Στην καρδιά του ελεγκτή βρίσκεται ο συνδυασμός AVPlayer και AVPlayerItem. Το AVPlayer είναι ένα αντικείμενο αναπαραγωγής που διαχειρίζεται τη γραμμή χρόνου, την ταχύτητα και την κατάσταση. Το AVPlayerItem είναι ένα περιτύλιγμα γύρω από ένα συγκεκριμένο αρχείο πολυμέσων, που περιέχει μεταδεδομένα, κομμάτια και πληροφορίες φόρτωσης.

Κατά την αρχικοποίηση, το AVPlayerViewController λαμβάνει μια αναφορά στο AVPlayer και δημιουργεί αυτόματα ένα AVPlayerLayer για την εμφάνιση βίντεο. Ο ελεγκτής εγγράφεται σε ειδοποιήσεις KVO του AVPlayer σχετικά με την αλλαγή κατάστασης readyToPlay, σφάλματα φόρτωσης και λήξη αναπαραγωγής.

Τα στοιχεία ελέγχου (πίνακας μεταφοράς) εμφανίζονται με το πάτημα στην οθόνη. Στο iOS 15+ υποστηρίζουν προσαρμογή μέσω του AVPlayerViewControllerCustomizationDelegate, επιτρέποντας την απόκρυψη ή αντικατάσταση των τυπικών κουμπιών.

Κύκλος ζωής του ελεγκτή

Μετά τη δημιουργία του ελεγκτή και την ανάθεση του AVPlayer, καλείται η μέθοδος viewDidLoad, η οποία ξεκινά την προετοιμασία της ροής βίντεο. Όταν το AVPlayerItem μεταβαίνει στην κατάσταση AVPlayerItemStatusReadyToPlay, η συσκευή αναπαραγωγής είναι έτοιμη για εμφάνιση καρέ. Κατά την κλήση της μεθόδου play() ξεκινά η αποκωδικοποίηση της ροής βίντεο μέσω του Video Toolbox.

Κατά την αποχώρηση από την οθόνη, ο ελεγκτής διακόπτει αυτόματα την αναπαραγωγή και απελευθερώνει τους πόρους του αποκωδικοποιητή. Στο iOS 13+ για τη διατήρηση της αναπαραγωγής κατά την ελαχιστοποίηση της εφαρμογής απαιτείται ρύθμιση των Background Modes και Audio Session. Σύμφωνα με το WWDC 2024, συνιστάται η χρήση του AVPlayerPlaybackCoordinator για συγχρονισμό με το κέντρο πολυμέσων του iOS.

Βασικές δυνατότητες του AVPlayerViewController

Το στοιχείο παρέχει ένα πλούσιο σύνολο λειτουργιών από προεπιλογή, καθιστώντας το ελκυστικό για τα περισσότερα έργα. Παρακάτω παρατίθενται οι βασικές δυνατότητες που δεν απαιτούν πρόσθετο κώδικα.

  • Πίνακας μεταφοράς με play/pause, μεταγύριση 15 δευτερολέπτων, ρυθμιστή έντασης και ολισθητή προόδου.
  • Υποστήριξη υποτίτλων — αυτόματη εμφάνιση ενσωματωμένων και εξωτερικών υποτίτλων σε μορφές VTT, SRT και iTunes Timed Text.
  • AirPlay — δυνατότητα μετάδοσης βίντεο σε Apple TV και άλλες συσκευές συμβατές με AirPlay.
  • Picture in Picture — αναπαραγωγή σε πλωτό παράθυρο με πάτημα ειδικού κουμπιού (σε iPad και iPhone με iOS 14+).
  • Λειτουργία πλήρους οθόνης — αυτόματη εναλλαγή κατά την περιστροφή της συσκευής και με πάτημα στο κουμπί μεγέθυνσης.
  • Αλλαγή ταχύτητας — ενσωματωμένο στοιχείο ελέγχου επιλογής ταχύτητας αναπαραγωγής (0.5x, 1.0x, 1.5x, 2.0x).
  • Προστατευμένο περιεχόμενο — εγγενής υποστήριξη FairPlay Streaming για HLS περιεχόμενο με DRM.

Πίνακας μεταφοράς AVPlayerViewController

Ο πίνακας μεταφοράς είναι το κάτω μέρος της διεπαφής που περιέχει τα βασικά κουμπιά ελέγχου. Από προεπιλογή, ο πίνακας κρύβεται μετά από 3 δευτερόλεπτα αδράνειας του χρήστη και εμφανίζεται με το πάτημα. Στο iOS 16+ μέσω του εκπροσώπου μπορείτε να διαχειριστείτε την ορατότητα μεμονωμένων στοιχείων.

Σε λειτουργία εντοπισμού σφαλμάτων, ο πίνακας μεταφοράς μπορεί να εμφανίζεται υποχρεωτικά μέσω της ιδιότητας AVPlayerViewController.requiresLinearPlayback, η οποία επίσης μπλοκάρει τη δυνατότητα παύσης του βίντεο. Αυτό είναι χρήσιμο για διαφημιστικά ένθετα και εκπαιδευτικό περιεχόμενο.

Ενσωμάτωση του AVPlayerViewController στο έργο

Η βασική ενσωμάτωση του ελεγκτή απαιτεί όχι περισσότερες από 10 γραμμές κώδικα. Πρώτα, πρέπει να δημιουργήσετε μια παρουσία του AVPlayer με το URL του αρχείου πολυμέσων, στη συνέχεια να το μεταφέρετε στο AVPlayerViewController και να εμφανίσετε τον ελεγκτή στην οθόνη.

Δημιουργία βασικής συσκευής αναπαραγωγής σε Swift

swift
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, ο ελεγκτής εμφανίζεται σε πλήρη οθόνη. Το βίντεο ξεκινά τη φόρτωση από το δίκτυο και μόλις ο buffer φτάσει το όριο readyToPlay, ξεκινά αυτόματα η αναπαραγωγή μετά την κλήση του play().

Ρύθμιση AVPlayerItem για προηγμένο έλεγχο

swift
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 μπορείτε επίσης να παρακολουθείτε την πρόοδο φόρτωσης, τη ρυθμιστική προσωρινή αποθήκευση και σφάλματα δικτύου χρησιμοποιώντας KVO στην ιδιότητα status.

Διαμόρφωση στοιχείων ελέγχου

Από το iOS 11, ο προγραμματιστής μπορεί να προσαρμόσει τον πίνακα μεταφοράς μέσω του πρωτοκόλλου AVPlayerViewControllerDelegate. Η μέθοδος playerViewController(_:willBeginFullScreenPresentationWithAnimationCoordinator:) καλείται πριν από την είσοδο σε λειτουργία πλήρους οθόνης και επιτρέπει την προετοιμασία του UI.

Για απόκρυψη μεμονωμένων κουμπιών χρησιμοποιείται η ιδιότητα AVPlayerViewController.showsPlaybackControls. Αν οριστεί σε false, ο πίνακας μεταφοράς εξαφανίζεται εντελώς, αφήνοντας μόνο τη ροή βίντεο. Χρήσιμο για προσαρμοσμένα επικαλυπτόμενα στοιχεία.

Προσαρμογή με χρήση εκπροσώπου

swift
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.

Προγραμματιστική επιλογή ηχητικής διαδρομής

swift
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 στο iPad

Η λειτουργία Picture in Picture (PiP) επιτρέπει την εμφάνιση βίντεο σε πλωτό παράθυρο πάνω από άλλες εφαρμογές. Στο iPad αυτή η λειτουργία είναι διαθέσιμη από το iOS 9, στο iPhone — από το iOS 14. Το AVPlayerViewController προσθέτει αυτόματα το κουμπί PiP στον πίνακα μεταφοράς όταν υπάρχει εγγραφή στο UIBackgroundModes.

Για ενεργοποίηση του PiP, πρέπει να προστεθεί στο Info.plist το κλειδί UIBackgroundModes με τιμή audio και airplay. Μετά από αυτό, εμφανίζεται το κουμπί PiP στον ελεγκτή, με το πάτημα του οποίου το βίντεο συμπτύσσεται σε πλωτό παράθυρο μεγέθους 192x108 σημείων.

Τα συμβάντα PiP διαχειρίζονται μέσω του εκπροσώπου: playerViewController(_:willStartPictureInPictureFromFullScreen:) και playerViewController(_:didStopPictureInPicture:). Σύμφωνα με το Apple HIG, το ελάχιστο μέγεθος παραθύρου PiP πρέπει να είναι τουλάχιστον 120x68 σημεία για διατήρηση της αναγνωσιμότητας του περιεχομένου.

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

Υποστηρίζει το AVPlayerViewController την αναπαραγωγή βίντεο YouTube;

Όχι, για βίντεο YouTube απαιτείται η χρήση web-view WKWebView ή της βιβλιοθήκης YouTube iOS Helper, καθώς το YouTube χρησιμοποιεί το δικό του σύστημα DRM. Το AVPlayerViewController προορίζεται για άμεσες ροές πολυμέσων μέσω URL.

Πώς μπορώ να απενεργοποιήσω τον πίνακα μεταφοράς του AVPlayerViewController;

Ορίστε την ιδιότητα showsPlaybackControls σε false. Μετά από αυτό, η οθόνη παραμένει κενή — μόνο η ροή βίντεο. Για επιστροφή προσαρμοσμένων κουμπιών, προσθέστε overlay μέσω addSubview πάνω από τον ελεγκτή.

Λειτουργεί το AVPlayerViewController με Live μεταδόσεις HLS;

Ναι, ο ελεγκτής υποστηρίζει πλήρως HLS Live. Στον πίνακα μεταφοράς εμφανίζεται ένδειξη Live αντί για ολισθητή προόδου. Η καθυστέρηση εξαρτάται από τη διαμόρφωση HLS — ελάχιστα 6 δευτερόλεπτα με ρυθμίσεις χαμηλής καθυστέρησης.

Πώς να χειριστώ σφάλμα φόρτωσης βίντεο στο AVPlayerViewController;

Εγγραφείτε στο KVO της ιδιότητας AVPlayerItem.status. Σε περίπτωση σφάλματος, η κατάσταση αλλάζει σε .failed. Ανακτήστε τις λεπτομέρειες μέσω της ιδιότητας error του AVPlayerItem και εμφανίστε ειδοποίηση στον χρήστη με επεξήγηση — συχνά το πρόβλημα είναι στο δίκτυο ή στο λανθασμένο URL.

Μπορώ να φορτώσω βίντεο από τη μνήμη στο AVPlayerViewController;

Ναι, χρησιμοποιήστε AVAsset με προσαρμοσμένο AVAssetResourceLoader για παροχή δεδομένων από τη μνήμη RAM. Υλοποιήστε τον εκπρόσωπο AVAssetResourceLoaderDelegate και επιστρέψτε bytes από τον buffer αντί για ανάγνωση από δίσκο.

Σύνοψη

  • AVPlayerViewController — έτοιμο στοιχείο AVKit για αναπαραγωγή βίντεο σε iOS, iPadOS και tvOS με ελάχιστο κώδικα ενσωμάτωσης.
  • Ο ελεγκτής υποστηρίζει HLS, MP4, προστατευμένο περιεχόμενο FairPlay, υπότιτλους και ηχητικές διαδρομές από προεπιλογή.
  • Για βασική χρήση, αρκεί να δημιουργήσετε AVPlayer και να το μεταφέρετε στον ελεγκτή — το UI σχεδιάζεται αυτόματα.
  • Ο εκπρόσωπος AVPlayerViewControllerDelegate επιτρέπει την προσαρμογή του πίνακα μεταφοράς, τον χειρισμό PiP και την αλλαγή υποτίτλων.
  • Ο πίνακας μεταφοράς κρύβεται μετά από 3 δευτερόλεπτα αδράνειας, αλλά το showsPlaybackControls δίνει πλήρη έλεγχο στην ορατότητά του.
  • Για Picture in Picture απαιτείται ενεργοποίηση των UIBackgroundModes audio και airplay στο Info.plist.
  • Σε περίπτωση σφαλμάτων, χρησιμοποιήστε KVO στο AVPlayerItem.status για λήψη λεπτομερειών και εμφάνισή τους στον χρήστη.

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

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

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

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