Swift Academy · Урок

Воспроизведение медиа с AVPlayer

Потоково загружайте и воспроизводите аудио- и видеоматериалы.

Урок 1 из 413 шагов

«Воспроизведение медиа с AVPlayer» — бесплатный урок Swift Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

AVFoundation для работы с медиа

AVFoundation — это фреймворк Apple для работы с аудиовизуальными медиафайлами, зависящими от времени: воспроизведения, захвата, редактирования и экспорта.

Основным классом для воспроизведения является AVPlayer.

import AVFoundation

AVPlayer и AVPlayerItem

AVPlayer управляет воспроизведением, а AVPlayerItem представляет воспроизводимое медиа и отслеживает его состояние. В основе элемента лежит AVAsset.

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

Запуск и приостановка

Управляйте воспроизведением с помощью play(), pause() и seek(to:). Воспроизведение начинается с текущего времени.

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

Отображение видео

Чтобы показать видео в UIKit, разместите AVPlayerLayer в представлении. Этот слой отрисовывает визуальный вывод проигрывателя.

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

Отслеживание состояния

AVPlayerItem сообщает свой status. Наблюдайте за ним, чтобы узнать, когда медиа готово к воспроизведению (readyToPlay) или произошла ошибка (failed).

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

Отслеживание времени

Используйте addPeriodicTimeObserver, чтобы обновлять интерфейс прогресса по мере воспроизведения. Время представлено значениями 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")
}

Основы CMTime

CMTime хранит время как рациональное число (значение, делённое на временной масштаб), обеспечивая точность до отдельного сэмпла. Временной масштаб 600 без остатка делится на распространённые частоты кадров.

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

Точный переход к позиции

seek(to:toleranceBefore:toleranceAfter:) с нулевой погрешностью обеспечивает переход с точностью до кадра, но требует больше ресурсов для декодирования.

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

Достижение конца

Наблюдайте за AVPlayerItem.didPlayToEndTimeNotification, чтобы обнаружить завершение воспроизведения, а затем зациклите его, закройте проигрыватель или покажите следующий элемент.

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

Аудиосеанс для воспроизведения

Чтобы звук воспроизводился корректно и при соответствующей настройке продолжал звучать в фоновом режиме, настройте AVAudioSession с подходящей категорией.

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

AVQueuePlayer для списков воспроизведения

AVQueuePlayer — подкласс AVPlayer, который последовательно воспроизводит очередь элементов. Он идеально подходит для списков воспроизведения и непрерывных видеопотоков.

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

Быстрая проверка: AVPlayer

Проверьте, насколько хорошо Вы понимаете воспроизведение с помощью AVPlayer.

Итоги: воспроизведение медиа с AVPlayer

AVPlayer управляет воспроизведением AVPlayerItem, в основе которого лежит AVAsset, а AVPlayerLayer отрисовывает видео. Наблюдайте за status элемента, отслеживайте прогресс с помощью периодических наблюдателей CMTime, выполняйте точный переход с нулевой погрешностью и обрабатывайте уведомления о завершении воспроизведения.

Настройте AVAudioSession для корректного воспроизведения звука, а для списков воспроизведения используйте AVQueuePlayer.

Можно начать бесплатно

Изучай Swift с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
122
Уроки
409

Часто задаваемые вопросы

Урок «Воспроизведение медиа с AVPlayer» бесплатный?

Да — полный текст урока «Воспроизведение медиа с AVPlayer» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «Воспроизведение медиа с AVPlayer»?

Потоково загружайте и воспроизводите аудио- и видеоматериалы. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Воспроизведение медиа с AVPlayer»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Воспроизведение медиа с AVPlayer
  2. Запись аудио
  3. AVAsset и композиция
  4. Встраивание проигрывателей в SwiftUI
← Назад к Swift Academy