Воспроизведение медиа с AVPlayer
Потоково загружайте и воспроизводите аудио- и видеоматериалы.
«Воспроизведение медиа с AVPlayer» — бесплатный урок Swift Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.
AVFoundation для работы с медиа
AVFoundation — это фреймворк Apple для работы с аудиовизуальными медиафайлами, зависящими от времени: воспроизведения, захвата, редактирования и экспорта.
Основным классом для воспроизведения является AVPlayer.
import AVFoundationAVPlayer и 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 — локальная установка не требуется.
Все уроки этого курса
- Воспроизведение медиа с AVPlayer
- Запись аудио
- AVAsset и композиция
- Встраивание проигрывателей в SwiftUI