Reputation: 1550
I have a collectionView
and each cell
has an AVPlayer
which is set to play. So every cell is playing a video at the same time. It seems that iOS only allows you to play 16 videos at the same time. For example, look at my sample app below. Out of 50 cells
, only 16 started playing a video. This number always stays the same. This happens on a iPhone 6s running iOS 10. In the Xcode simulator however all 50 videos start playing. This issue only happens on an actual device.
Also, I get these two errors when I print this out:
print("Video player Status Failed: player item error = (self.player.currentItem.error)")
print("Video player Status Failed: player error = \(self.player.error)")
2016-11-07 15:53:46.548288 SampleApp[1810:515089] Video player Status Failed: player item error = Error Domain=AVFoundationErrorDomain Code=-11839 "Cannot Decode" UserInfo={NSUnderlyingError=0x1704414d0 {Error Domain=NSOSStatusErrorDomain Code=-12913 "(null)"}, NSLocalizedFailureReason=The decoder required for this media is busy., NSLocalizedRecoverySuggestion=Stop any other actions that decode media and try again., NSLocalizedDescription=Cannot Decode} 2016-11-07 15:53:46.548358 SampleApp[1810:515089] Video player Status Failed: player error = (null)
Is there a limit to how many AVPlayer
's you could have or am I doing something wrong?
Thanks!
Upvotes: 12
Views: 6779
Reputation: 862
Indeed, there's an upper limit on the amount of AVPlayer instances you can keep alive at the same time, but this limit depends on the platform your code is running on. I myself have found that on an iPhone 5s running iOS 8, there was a limit of 4 concurrent AVPlayer instances. Here, for example, the user reports a limit of 7 for tvOS, and the same limit of 4 was reported in 2012 in stack overflow.
In any case, this limit not being officially documented means it can change back and forth between platforms and OS versions, so you should not base any code on this other than just keep concurrent AVPlayer instances as low as possible.
Upvotes: 6
Reputation: 19612
It's not that you can't have multiple AVPLayers, what you can't have is too many AVPlayerItems associated with AVPlayers as in player = AVPlayer(playerItem: playerItem)
.
For example you might have multiple vcs pushed on, and in each one of those vcs you have a player initialized with a playerItem, eventually your app will crash.
You have to dissociate the playerItem from the player player?.replaceCurrentItem(with: nil)
to prevent any problems.
The number of player/playerItems
before a crash is dependent on the device but on the iPhone 7+, 14-16 was definitely the limit, afterwards, a crash would occur.
You can read more about it here and here
Upvotes: 0