Я работаю над компонентом для видео, которое по сути должно воспроизводиться без элементов управления, звука, а также автозапуска и цикла. У меня все работает с помощью кода ниже, кроме бита цикла, похоже, я не могу найти способа установить это поведение ни для VideoPlayer, ни для AvPlayer. Буду признателен за любые указатели.
import SwiftUI
import AVKit
struct IntroductionVideo: View {
@State private var player = AVPlayer()
// Body
var body: some View {
VideoPlayer(player: player)
.aspectRatio(contentMode: .fit)
.onAppear {
player = AVPlayer(url: URL(string: "https://example.com/video.mp4")!)
player.isMuted = true
player.play()
}
.disabled(true)
}
}





Вы можете наблюдать за уведомлением AVPlayerItem.AVPlayerItemDidPlayToEndTime и возвращать проигрывателя к началу, когда он достигает конца видео.
Просто добавьте этот блок перед player.play():
NotificationCenter
.default
.addObserver(
forName: .AVPlayerItemDidPlayToEndTime,
object: player.currentItem,
queue: .main
) { _ in
player.seek(to: .zero)
player.play()
}
VideoPlayer не имеет значения, если вы не пытаетесь добавить элементы управления. Вам все равно придется использовать AVPlayerItem из AVPlayer.
.onReceive(NotificationCenter
.default
.publisher(
for: .AVPlayerItemDidPlayToEndTime,
object: player.currentItem),
perform: { _ in
player.seek(to: .zero)
player.play()
}
)
AVPlayerItemDidPlayToEndTime устарел, вместо этого используйте AVPlayerItem.didPlayToEndTimeNotification