AVPlayer загружает gif до загрузки первого кадра видео - PullRequest
1 голос
/ 05 апреля 2019

Я использую AVPlayer для воспроизведения видео.Я должен загрузить GIF, пока не будет загружен первый кадр видео.Я использую SwiftyGif для того же.

Я уже прочитал много сообщений из стека.Я пытался с различными методами с видеоплеером, как .readyToPlay, .unknown, но не смог получить доступ к загрузке первого кадра.Иногда это работает хорошо, но в других случаях загрузка не приходит или остается там, даже когда воспроизводится видео

func showLoadingGif() {
        let gifManager = SwiftyGifManager(memoryLimit:50)
        if UIDevice.current.userInterfaceIdiom == .pad {
            let gif = UIImage(gifName: "loading.gif")
            imgViewSplash = UIImageView(gifImage: gif, manager: gifManager)
        }
        else
        {
            let gif = UIImage(gifName: "loading_mobile.gif")
            imgViewSplash = UIImageView(gifImage: gif, manager: gifManager)
        }
        imgViewSplash.loopCount = 10000
        // imageview.delegate = self
        imgViewSplash.frame = CGRect(x: 0.0, y: 0.0, width: self.view.bounds.size.width, height: self.view.bounds.size.height+100)
        imgViewSplash.center = CGPoint(x: view.frame.size.width  / 2, y: view.frame.size.height / 2)
        if self.view.subviews.contains(imgViewSplash) {
            self.imgViewSplash.removeFromSuperview() // Remove it
        }
        self.view.addSubview(imgViewSplash)

    }

    func hideLoadingGif() {
        if self.view.subviews.contains(imgViewSplash) {
            self.imgViewSplash.removeFromSuperview() // Remove it
        }
    }



self.observer = playerVideo.addPeriodicTimeObserver(forInterval: CMTimeMakeWithSeconds(1, 1), queue: DispatchQueue.main) { (CMTime) -> Void in
            if self.playerVideo.currentItem?.status == .readyToPlay {
                self.updateSlider(elapsedTime: CMTime)

                if let currentItem = self.playerVideo.currentItem {
                    let duration = currentItem.asset.duration
                    print("Total Duration - \(duration)")
                    self.hideLoadingGif()
                }

                let time : Float64 = CMTimeGetSeconds(self.playerVideo.currentTime());
                //print("\(time)")
                print("App Into Overlay - \(time)")

                let playbackLikelyToKeepUp = self.playerVideo.currentItem?.isPlaybackLikelyToKeepUp
                if playbackLikelyToKeepUp == false {
                    //print("Here start the activity indicator inorder to show buffering")
                }else{
                    //print("stop the activity indicator")
                }
            }
            if self.playerVideo.currentItem?.status == .unknown
            {
                self.btnPlay.isUserInteractionEnabled = true
                self.progressMainView.isUserInteractionEnabled = true
                self.hideLoadingGif()
            }
        }

Ожидаемые результаты должны быть такими, как GIF должен появиться во время загрузки видео и когда первый кадрЕсли он загружен, он должен скрываться, и видео должно воспроизводиться, но на самом деле гиф появляется, и иногда он прячется до того, как загружается первый кадр, а иногда он остается там и начинается воспроизведение видео.

...