November 15, 2024

93. Открываем видео по ссылке

Посмотрим как в SwiftUI можно воспроизводить видео по ссылке с использованием VideoPlayer и AVPlayerViewController + UIViewControllerRepresentable.

План

  1. Найдем демо-видео
  2. Сделаем задачу с использованием VideoPlayer
  3. Сделаем задачу с использованием AVPlayerViewController

Демо-видео

В качестве демо будем использовать отрывок трейлера второго сезона "Бункера" по этой ссылке. Если на момент прочтения статьи ссылка не работает, ничего страшного - можно использовать ссылку на любое другое видео, которое открывается без специального сайта в браузере.

Используем VideoPlayer

Как и предлагают в документации, мы сделаем стейт-свойство для плеера и передадим его в VideoPlayer:

private let demoURL = URL(string: "https://leonardo.osnova.io/4afddc22-8d03-54d3-882f-5aa1fed0765c/-/format/mp4")!

struct DefaultVideoPlayerExample: View {
  @State private var player = AVPlayer(url: demoURL)
   
  var body: some View {
    VideoPlayer(player: player)
      .disabled(true) // выключает элементы управления плеером
      .ignoresSafeArea()
      .onAppear {
        player.isMuted = true // выключает звук у видео
        player.play() // запускает видео при появлении экрана
      }
  }
}

Для выключения элементов управления плеером используем стандартный модификатор .disabled, и при появлении вьюхи выключаем звук вместе с запуском видео.

Используем AVPlayerViewController

Сначала сделаем репрезентабл-вьюху для контроллера из UIKit:

struct AVPlayerVCRepresentable: UIViewControllerRepresentable {
  let player: AVPlayer
   
  func makeUIViewController(context: Context) -> AVPlayerViewController {
    let controller = AVPlayerViewController()
    controller.player = player
    // выключает элементы управления плеером
    controller.showsPlaybackControls = false
    // Аналогично настройке картинок:
    // .resizeAspectFill = .scaleToFill
    // .resizeAspect = .scaleToFit
    controller.videoGravity = .resizeAspect
    return controller
  }
   
  func updateUIViewController(_ uiViewController: AVPlayerViewController, context: Context) {}
}

Для UIKit-экрана настроек, конечно же, намного больше, почитать можно в документации. Для нашего примера используем настройки как и в первой вьюхе, т.е. просто выключаем элементы управления плеером.

Делаем вьюху для этого примера:

struct AVPlayerSwiftUIDemo: View {
  @State private var player = AVPlayer(url: demoURL)
   
  var body: some View {
    AVPlayerVCRepresentable(player: player)
      .ignoresSafeArea()
      .onAppear {
        player.isMuted = true // выключает звук у видео
        player.play() // запускает видео при появлении экрана
      }
  }
}

Заключение

Вот таким нехитрым способом можно открыть видео по ссылке в SwiftUI.

Если не выключать элементы управления плеером, то пользователь сможет делать все стандартные операции, доступные в обычном видеоплеере на iOS.

Звук выключили тоже просто для примера.

Код для этой статьи можно посмотреть тут, другие статьи по разработке - тут, а про инвестиции - тут.