Iphone 本地文件的AVPlayerStatus未就绪
我在播放本地.wav文件时遇到一些问题。我的Iphone 本地文件的AVPlayerStatus未就绪,iphone,objective-c,ios,audio,avplayer,Iphone,Objective C,Ios,Audio,Avplayer,我在播放本地.wav文件时遇到一些问题。我的AVPlayerStatus正在打印0,我假设这意味着它还没有准备好播放。我似乎不明白,但话说回来,这是我第一次尝试使用任何与AVPlayer有关的东西,所以可能很简单。我非常感谢你的帮助。代码如下: 我应该补充一点,我的声音没有播放 0相当于AVPlayerStatusUnknown,我认为这是因为播放器在您实际调用play之前不会尝试加载URL 从: AVPlayerStatusUnknown 表示播放机的状态未知,因为它尚未尝试加载新媒体资源进行
AVPlayerStatus
正在打印0
,我假设这意味着它还没有准备好播放。我似乎不明白,但话说回来,这是我第一次尝试使用任何与AVPlayer有关的东西,所以可能很简单。我非常感谢你的帮助。代码如下:
我应该补充一点,我的声音没有播放强>
0
相当于AVPlayerStatusUnknown
,我认为这是因为播放器在您实际调用play
之前不会尝试加载URL
从:
AVPlayerStatusUnknown
表示播放机的状态未知,因为它尚未尝试加载新媒体资源进行播放
以下是Apple在使用AVPlayItem方法时指出的一些重要问题: 特殊注意事项 此方法立即返回该项,但 状态为AVPlayerItemStatusUnknown的 如果URL包含播放器项目可以使用的有效数据, 稍后状态将更改为AVPlayerItemStatusReadyToPlay 如果URL不包含有效数据或其他信息,则 玩家项,状态稍后更改为AVPlayerItemStatusFailed 我想象的情况是,因为在创建AVPlayerItem对象后不久,您就发送了一条
-play
消息,其状态仍然是AVPlayerItemStatusUnknown
(AVPlayer对象也是如此)因为它没有收到足够的时间来加载资源并将状态更改为AVPlayerItemStatusReadyToPlay
我的建议:
- 检查AVPlayerItem/AVPlayer状态更改,并在稍后阶段调用
李>-play
- 从NSURL加载一个或一个对象,并使用AVPlayerItem
方法,该方法应返回一个准备播放的对象,然后如果您愿意,您可以立即调用call–initWithAsset:
-play
player.status
之前调用[player play]
,它仍在输出0
。我应该在我最初的帖子中用粗体字提到,真正的问题是声音没有播放!初始化为AVAsset修复了它!非常感谢你的帮助!
-(void) playWordSound:(UILabel *)label
{
NSString *path;
switch (label.tag)
{
case 1:
path = [[NSBundle mainBundle] pathForResource:@"humpty" ofType:@"wav"];
break;
case 2:
path = [[NSBundle mainBundle] pathForResource:@"dumpty" ofType:@"wav"];
break;
case 3:
path = [[NSBundle mainBundle] pathForResource:@"saty" ofType:@"wav"];
break;
case 4:
path = [[NSBundle mainBundle] pathForResource:@"on 2" ofType:@"wav"];
break;
case 5:
path = [[NSBundle mainBundle] pathForResource:@"a 3" ofType:@"wav"];
break;
case 6:
path = [[NSBundle mainBundle] pathForResource:@"wall" ofType:@"wav"];
break;
}
NSURL *url = [NSURL fileURLWithPath:path];
AVQueuePlayer *player;
static const NSString *ItemStatusContext;
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url];
[playerItem addObserver:self forKeyPath:@"status" options:0 context:&ItemStatusContext];
player = [AVPlayer playerWithPlayerItem:playerItem];
NSLog(@"%d",player.status);
[player play];
}
- (void)playerItemDidReachEnd:(NSNotification *)notification {
NSLog(@"Sound finished");
}