切换方向时 AVPlayer 刷新(使用 Firebase Firestore 视频链接)
Posted
技术标签:
【中文标题】切换方向时 AVPlayer 刷新(使用 Firebase Firestore 视频链接)【英文标题】:AVPlayer refreshes when switching orientation (uses Firebase Firestore video link) 【发布时间】:2020-12-30 18:48:07 【问题描述】:我正在开发一个使用 firebase 的视频流应用。我有一个填充了视频链接的 firestore 数据库,我可以在我的应用程序中引用它(下面代码中的 firebasedb.video 提供了匹配的视频链接)。我正在使用 fullScreenCover 并自动播放视频。在我自己的 iPhone 上测试该应用程序时,我偶然发现了一个问题,如果我将方向从纵向切换到横向,视频会刷新并从头开始。我怀疑 AVPlayer 在切换期间对数据库进行了新调用,那么有什么办法可以阻止这种情况发生吗?谢谢您,期待您的回复!
更新:如果我能看到一个使用 init() 的演示,这将非常有帮助,因为我认为这可以解决问题。
@State var firebasedb: movies
@ObservedObject var movies = getMoviesData()
@State private var isPlayed = false
var body: some View
VStack
Button(action:
self.isPlayed.toggle()
)
Image(systemName: "play.circle")
.font(.system(size: 50, weight: .light))
.fullScreenCover(isPresented: $isPlayed)
VStack
let avPlayer = AVPlayer(url: URL(string: firebasedb.video)!)
VideoPlayer(player: avPlayer)
.onAppear()
avPlayer.play()
.edgesIgnoringSafeArea(.all)
【问题讨论】:
【参考方案1】:fullScreenCover
的切换方向内容正在重建,但您在其中创建了新的播放器实例,因此 VideoPlayer
已重置。
为了解决这个举动avPlayer
在外面某处创建
// make @State or init input
let avPlayer = AVPlayer(url: URL(string: firebasedb.video)!)
// ...
.fullScreenCover(isPresented: $isPlayed)
VStack
VideoPlayer(player: avPlayer)
.onAppear()
avPlayer.play()
.edgesIgnoringSafeArea(.all)
【讨论】:
我正在尝试在 avPlayer 上进行初始化,因为 firebasedb 处于状态级别,但是我遇到了几个错误。由于这是我第一次使用 init,你能演示一下我如何应用它吗?我上面的变量是 var firebasedb: movies 并且在正文开始之前它不会被初始化 下一个话题应该会有所帮助***.com/questions/65132038/…以上是关于切换方向时 AVPlayer 刷新(使用 Firebase Firestore 视频链接)的主要内容,如果未能解决你的问题,请参考以下文章