0Pricing
Swift Academy · Lekcja

Odtwarzanie multimediów za pomocą AVPlayer

Strumieniowanie i odtwarzanie zasobów audio oraz wideo.

Odtwarzanie multimediów za pomocą AVPlayer to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.

AVFoundation do obsługi multimediów

AVFoundation to framework firmy Apple do pracy z czasowymi multimediami audiowizualnymi — ich odtwarzania, przechwytywania, edycji i eksportowania.

Podstawową klasą do odtwarzania jest AVPlayer.

import AVFoundation

AVPlayer i AVPlayerItem

AVPlayer steruje odtwarzaniem, a AVPlayerItem reprezentuje odtwarzane multimedia i śledzi ich stan. Podstawą elementu jest AVAsset.

let url = URL(string: "https://example.com/video.mp4")!
let item = AVPlayerItem(url: url)
let player = AVPlayer(playerItem: item)

Rozpoczynanie i wstrzymywanie

Steruj odtwarzaniem za pomocą play(), pause() i seek(to:). Odtwarzanie rozpoczyna się od bieżącego czasu.

player.play()
// later
player.pause()

Wyświetlanie wideo

Aby wyświetlić wideo w UIKit, umieść AVPlayerLayer w widoku. Warstwa renderuje obraz generowany przez odtwarzacz.

let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = view.bounds
playerLayer.videoGravity = .resizeAspect
view.layer.addSublayer(playerLayer)

Obserwowanie stanu

AVPlayerItem udostępnia właściwość status. Obserwuj ją, aby wiedzieć, kiedy multimedia są readyToPlay lub wystąpił błąd failed.

let observation = item.observe(\.status) { item, _ in
    if item.status == .readyToPlay {
        player.play()
    }
}

Śledzenie czasu

Użyj addPeriodicTimeObserver, aby aktualizować interfejs postępu w miarę odtwarzania. Czasy są wartościami typu CMTime.

let interval = CMTime(seconds: 0.5, preferredTimescale: 600)
player.addPeriodicTimeObserver(forInterval: interval, queue: .main) { time in
    let seconds = time.seconds
    print("at \(seconds)s")
}

Podstawy CMTime

CMTime przechowuje czas jako liczbę wymierną (wartość podzieloną przez skalę czasu), zapewniając precyzję na poziomie pojedynczych próbek. Skala czasu 600 dokładnie dzieli się przez typowe liczby klatek na sekundę.

let t = CMTime(seconds: 5, preferredTimescale: 600)
let half = CMTimeMultiplyByFloat64(t, multiplier: 0.5)

Precyzyjne przewijanie

seek(to:toleranceBefore:toleranceAfter:) z zerową tolerancją zapewnia przewijanie z dokładnością do klatki, ale wymaga większej ilości pracy dekodowania.

let target = CMTime(seconds: 30, preferredTimescale: 600)
player.seek(to: target, toleranceBefore: .zero, toleranceAfter: .zero)

Dotarcie do końca

Obserwuj AVPlayerItem.didPlayToEndTimeNotification, aby wykryć zakończenie odtwarzania — następnie zapętl odtwarzanie, zamknij widok lub wyświetl następny element.

NotificationCenter.default.addObserver(
    forName: .AVPlayerItemDidPlayToEndTime,
    object: item, queue: .main) { _ in
    player.seek(to: .zero)
    player.play() // loop
}

Sesja audio do odtwarzania

Aby dźwięk był odtwarzany prawidłowo i — po odpowiedniej konfiguracji — także w tle, skonfiguruj AVAudioSession z właściwą kategorią.

let session = AVAudioSession.sharedInstance()
try? session.setCategory(.playback)
try? session.setActive(true)

AVQueuePlayer do list odtwarzania

AVQueuePlayer jest podklasą AVPlayer służącą do odtwarzania kolejki elementów po kolei — idealnie nadaje się do list odtwarzania i ciągłych kanałów wideo.

let queue = AVQueuePlayer(items: [item1, item2, item3])
queue.play()

Szybkie sprawdzenie: AVPlayer

Sprawdź swoją wiedzę na temat odtwarzania za pomocą AVPlayer.

Podsumowanie: odtwarzanie multimediów za pomocą AVPlayer

AVPlayer steruje odtwarzaniem elementu AVPlayerItem, którego podstawą jest AVAsset; AVPlayerLayer renderuje wideo. Obserwuj właściwość status elementu, śledź postęp za pomocą okresowych obserwatorów czasu CMTime, przewijaj precyzyjnie z zerową tolerancją i obsługuj powiadomienia o zakończeniu odtwarzania.

Skonfiguruj AVAudioSession, aby dźwięk działał prawidłowo, a do list odtwarzania używaj AVQueuePlayer.

Często zadawane pytania

Czy lekcja „Odtwarzanie multimediów za pomocą AVPlayer” jest bezpłatna?

Tak — pełny tekst „Odtwarzanie multimediów za pomocą AVPlayer” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Odtwarzanie multimediów za pomocą AVPlayer”?

Strumieniowanie i odtwarzanie zasobów audio oraz wideo. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Odtwarzanie multimediów za pomocą AVPlayer”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Odtwarzanie multimediów za pomocą AVPlayer
  2. Nagrywanie dźwięku
  3. AVAsset i kompozycja
  4. Osadzanie odtwarzaczy w SwiftUI
← Powrót do Swift Academy