切换方向时 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 视频链接)的主要内容,如果未能解决你的问题,请参考以下文章

如何更改AVPlayer的视频方向?

如何在媒体查询中正确切换此动画关键帧?

切换到下一个视图控制器后,AVPlayer 视频仍在播放

如何知道 AVPlayer 何时使用仅音频比特率?

AVPlayer 暂停后无法继续播放

AVPlayer 不能与 AirPlay 一起使用