I'm using AVPlayer
to play mp3 files from a remote url. i'm having some issues with the initial loading time of the mp3, it is very slow (around 5-8 sec).
i compared it with other third parties players and its much slower, i also compared it with an android player and it is also much slower.
so the problem is not with the url itself nor with the network connection..
another interesting point is that after the AVPlayer
start playing the mp3, seeking is very fast (almost immediately), does that mean the player download the entire mp3 file before start playing, and thats the reason it is so slow?
can i control this behaviour? if not, any other ideas what can be the reason?
2 Answers
Answers 1
AVPlayer
has some new functionality (for iOS 10+), that You can try out. I used it myself and everything was working properly.
/*! @method playImmediatelyAtRate: @abstract Immediately plays the available media data at the specified rate. @discussion When the player's currentItem has a value of NO for playbackBufferEmpty, this method causes the value of rate to change to the specified rate, the value of timeControlStatus to change to AVPlayerTimeControlStatusPlaying, and the receiver to play the available media immediately, whether or not prior buffering of media data is sufficient to ensure smooth playback. If insufficient media data is buffered for playback to start (e.g. if the current item has a value of YES for playbackBufferEmpty), the receiver will act as if the buffer became empty during playback, except that no AVPlayerItemPlaybackStalledNotification will be posted. */ - (void)playImmediatelyAtRate:(float)rate NS_AVAILABLE(10_12, 10_0);
Additionally You can check out this variable (You can use KVO for it too):
/*! @property reasonForWaitingToPlay @abstract Indicates the reason for waiting when the value of timeControlStatus is AVPlayerTimeControlStatusWaitingToPlayAtSpecifiedRate @discussion When the value of timeControlStatus is AVPlayerTimeControlStatusWaitingToPlayAtSpecifiedRate, this property describes why the player is currently waiting. It is nil otherwise. You can use the value of reasonForWaitingToPlay to show UI indicating the player's waiting state conditionally. This property is key value observable. Possible values are AVPlayerWaitingWithNoItemToPlayReason, AVPlayerWaitingWhileEvaluatingBufferingRateReason, and AVPlayerWaitingToMinimizeStallsReason. */ @property (nonatomic, readonly, nullable) NSString *reasonForWaitingToPlay NS_AVAILABLE(10_12, 10_0);
Answers 2
Here, What I think about it.
That different file has different move atoms, So if in such file if move atom came first then this file plays with buffering. So this file downloaded with parts and it's playing continues with buffering.
In other case, in file move atom is at last then first whole file downloaded then it plays. So I think that is your case that's why mp3 delays with some time for downloading whole mp3.
You can change move atom into such file with coding. Check out this answer Move and fix moov atom of video recorded on phone iOS
0 comments:
Post a Comment