gpt4 book ai didi

ios - AVPlayer 状态总是 AVPlayerStatusReadyToPlay

转载 作者:技术小花猫 更新时间:2023-10-29 10:13:58 25 4
gpt4 key购买 nike

我正在使用 AVPlayer 从 URL 播放音频

在 ViewDidLoad 中:

self.playerItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:imageText]];

self.player = [AVPlayer playerWithPlayerItem:playerItem];

[player addObserver:self forKeyPath:@"status" options:0 context:nil];

[player play];

观察者

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context {
if (object == player && [keyPath isEqualToString:@"status"]) {
if (player.status == AVPlayerStatusReadyToPlay) {
//[playingLbl setText:@"Playing Audio"];
NSLog(@"fineee");
[playBtn setEnabled:YES];
} else if (player.status == AVPlayerStatusFailed) {
// something went wrong. player.error should contain some information
NSLog(@"not fineee");
NSLog(@"%@",player.error);

}
else if (player.status == AVPlayerItemStatusUnknown) {
NSLog(@"AVPlayer Unknown");


}
}
}

但播放器有时会卡住,无法播放音频,但状态也是 AVPlayerStatusReadyToPlay。它永远不会进入 AVPlayerStatusFailed 或 AVPlayerItemStatusUnknown。因为我想处理 AVPlayer 的错误,所以它也必须放在这些里面。请帮忙!!

最佳答案

您应该观察 CurrentItem 的状态。 AVPlayer 失败是因为 AVPlayerItem 失败,如果出现任何问题,它从 AVPlayerItem 开始,然后是 AVPlayer。

尝试:

[item addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];

在您的 observeValueForKeyPath 中:

if (object == audioPlayer.currentItem && [keyPath isEqualToString:@"status"]) {
if (audioPlayer.currentItem.status == AVPlayerItemStatusFailed) {
NSLog(@"------player item failed:%@",audioPlayer.currentItem.error);
}
}

你可以看看AVPlayer的处理或者直接从HysteriaPlayer中使用它,我的开源项目。

关于ios - AVPlayer 状态总是 AVPlayerStatusReadyToPlay,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14933592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com