我正在实现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,我已更新我的代码,现在请看看。 –