Estou incorporando o SwiftUI VideoPlayer
em um VStack
e vejo que a tela fica preta (ou seja, o conteúdo desaparece mesmo que o player de vídeo seja girado automaticamente) quando o dispositivo é girado. O problema acontece mesmo quando eu uso AVPlayerViewController
(as UIViewControllerRepresentable
). Isso é um bug ou estou fazendo algo errado?
var videoURL:URL
let player = AVPlayer()
var body: some View {
VStack {
VideoPlayer(player: player)
.frame(maxWidth:.infinity)
.frame(height:300)
.padding()
.ignoresSafeArea()
.background {
Color.black
}
.onTapGesture {
player.rate = player.rate == 0.0 ? 1.0 : 0.0
}
Spacer()
}
.ignoresSafeArea()
.background(content: {
Color.black
})
.onAppear {
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(AVAudioSession.Category.playback, mode: AVAudioSession.Mode.default, options: AVAudioSession.CategoryOptions.duckOthers)
} catch {
NSLog("Unable to set session category to playback")
}
let playerItem = AVPlayerItem(url: videoURL)
player.replaceCurrentItem(with: playerItem)
}
}
Ao declarar
let player = AVPlayer()
como propriedade desta formaView
, oplayer
será recriado toda vez queView
for reavaliado. Você deve armazenar o player em algum lugar persistente (uma solução baseada em@State
ou ).@StateObject