简体   繁体   中英

AVPlayer video is freezing for some reason on rate 1

I am trying to play local videos in my app using AVPlayer and AVPlayerViewController . The problem is that when I try to play the video at some parts the video just starts freezing and playing 1 or 2 frames per second, while the audio sounds perfectly fine. It is not a heavy video (4.5 MB, 35 seconds long), it was exported at 25 fps(using adobe premiere).

I tried a couple of things to fix it, some of them fixed the freezes, but are not a good solution:

  • I exported the video at 15 frames per second, this made it run fine, but it was choppy since it was 15 fps.
  • I tried exporting the video at 150% speed, it ran smoothly.
  • Setting the rate to 0.75 made the video run smoothly.
  • Setting the rate higher made it freeze way more often.
  • For some reason when I started the video half way through at 15 seconds it didn't freeze.

This is what the code looks like:

let videoURL: URL = Bundle.main.url(forResource: currentComic?.getVideo(), withExtension: "mp4")!
player = AVPlayer(url: videoURL)
videoPlayerController.player = player
videoPlayerController.showsPlaybackControls = true
videoPlayerController.videoGravity = AVLayerVideoGravity.resizeAspectFill
NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying), name: .AVPlayerItemDidPlayToEndTime, object: player.currentItem)
self.present(videoPlayerController, animated: true, completion: nil)
var item = videoPlayerController.player!.currentItem
var previousPageCMTimeTag = CMTimeMakeWithSeconds(0, preferredTimescale: 1)
videoPlayerController.player!.seek(to: previousPageCMTimeTag)
videoPlayerController.player!.play()
player.rate = 1

videoPlayerController is a variable of AVPlayerViewController , and player is a variable of AVPlayer . I really hope someone can help me with this; it has been driving me crazy for the past few days.

I recently ran into the same issue and spent about a week diagnosing it.

Setting showsPlaybackControls while the AVPlayerViewController is onscreen will cause the video to freeze while the player continues playing audio-only. The documentation for this property warns that setting this property while the player is visible "creates or destroys user interface elements", but we never thought it would destroy video playback entirely!

It's hard to tell if your code is doing this without seeing how else videoPlayerController is used, but make sure your AVPlayerViewController is not onscreen when mutating this property.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM