Iphone 本地文件的AVPlayerStatus未就绪

Iphone 本地文件的AVPlayerStatus未就绪,iphone,objective-c,ios,audio,avplayer,Iphone,Objective C,Ios,Audio,Avplayer,我在播放本地.wav文件时遇到一些问题。我的AVPlayerStatus正在打印0,我假设这意味着它还没有准备好播放。我似乎不明白,但话说回来,这是我第一次尝试使用任何与AVPlayer有关的东西,所以可能很简单。我非常感谢你的帮助。代码如下: 我应该补充一点,我的声音没有播放 0相当于AVPlayerStatusUnknown,我认为这是因为播放器在您实际调用play之前不会尝试加载URL 从: AVPlayerStatusUnknown 表示播放机的状态未知,因为它尚未尝试加载新媒体资源进行

我在播放本地.wav文件时遇到一些问题。我的
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
    –initWithAsset:
    方法,该方法应返回一个准备播放的对象,然后如果您愿意,您可以立即调用call
    -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");
}