我正在實現AVPlayer(不是AVAudioPlayer)並嘗試從URL播放音頻。它工作正常。但正如我們所知,有時我們可能會有無效的URL(沒有音頻字節的URL)。 當我從任何URL播放音頻AVPlayer狀態顯示總是AVPlayerStatusReadyToPlay這是錯誤的。例如:在URL的一部分,如果放棄無效的網址,如:http://soundx.mp3slash.net/indian/jhankar_beats/1%28mp3pk.com%29.mp3(它不會在瀏覽器中工作的偶數),即使你給https://stackoverflow.com/questions/ask或任何網站的網址(不具備音頻字節),AVPlayer總是顯示AVPlayerStatusReadyToPlay 。 我認爲在這種情況下它的狀態必須是AVPlayerItemStatusUnknown或AVPlayerStatusFailed請幫忙,如何知道URL無效(AVPlayerItemStatusUnknown或AVPlayerStatusFailed)表明我可以向用戶顯示消息。 在此先感謝AVPlayer狀態AVPlayerStatusFailed無法正常工作
-(void)playButtonClicked
{
NSURL *url = [NSURL URLWithString:AUDIO_URL];
[self.audioSliderBar setMinimumValue:AUDIO_SLIDER_BAR_0];
playerItem = [AVPlayerItem playerItemWithURL:url];
player = [AVPlayer playerWithPlayerItem:playerItem];
player.volume=5.0;
[player addObserver:self forKeyPath:STATUS options:0 context:nil];
[playerItem addObserver:self forKeyPath:PLAY_BACK_BUFFER_EMPTY options:NSKeyValueObservingOptionNew context:nil];
[playerItem addObserver:self forKeyPath:PLAY_BACK_LIKELY_TO_KEEP_UP options:NSKeyValueObservingOptionNew context:nil];
addObserverFlag=YES;
}
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change: (NSDictionary *)change context:(void *)context
{
if (object == player && [keyPath isEqualToString:STATUS])
{
if (player.status == AVPlayerStatusFailed)
{
[ViewUtilities showAlert:AUDIO_PLAYER :AUDIO_PLAYER_FAILED_MESSAGE];
}
else if (player.status == AVPlayerStatusReadyToPlay)
{
else if (player.status == AVPlayerItemStatusUnknown)
{
[ViewUtilities showAlert:AUDIO_PLAYER :AUDIO_PLAYER_UNKNOWN];
}
if (!player)
{
return;
}
}
}`
你是不是顯示你與AVPlayer做什麼的狀態屬性來檢查特定項目的狀態。 – gnasher729
AVPlayer在您開始播放之前不會檢查任何內容,或者例如使用預卷。 – gnasher729
@ gnasher729,我已更新我的代碼,現在請看看。 –