6

我在播放本地 .wav 文件时遇到了一些问题。我AVPlayerStatus正在打印0,我假设这意味着它还没有准备好播放。我似乎无法弄清楚,但话虽如此,这是我第一次尝试使用与 AVPlayer 相关的任何东西,所以它可能很简单。我会很感激任何帮助。这是代码:

我应该补充一点,我的声音没有播放!

-(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");
}
4

2 回答 2

11

以下是 Apple 在使用 AVPlayItem -initWithURL :方法时指出的一些重要问题:

特别注意事项

此方法立即返回项目,但状态为 AVPlayerItemStatusUnknown。

如果 URL 包含播放器项目可以使用的有效数据,则状态稍后将更改为 AVPlayerItemStatusReadyToPlay。

如果 URL 不包含有效数据或播放器项目无法使用,则状态稍后将更改为 AVPlayerItemStatusFailed。

我想正在发生的事情是,因为您-play在创建 AVPlayerItem 对象后不久就发送了一条消息,它的状态仍然是AVPlayerItemStatusUnknown(对于 AVPlayer 对象也是如此),因为它没有收到足够的时间来加载资源并将状态更改为AVPlayerItemStatusReadyToPlay.

我的建议:

  • 检查 AVPlayerItem/AVPlayer 状态变化并-play在稍后阶段调用;

或者,甚至更简单,

  • 从 NSURL加载一个AVAsset或一个AVURLAsset对象并使用 AVPlayerItem–initWithAsset:方法,该方法应该返回一个准备好播放的对象,然后您可以-play立即调用 call ,如果您愿意的话。
于 2012-10-08T21:09:25.203 回答
1

0相当于AVPlayerStatusUnknown,我假设这是因为播放器在您实际调用之前不会尝试加载 URL play

文档中:

AVPlayerStatusUnknown

表示播放器的状态未知,因为它没有尝试加载新的媒体资源进行播放。

于 2012-05-16T11:32:21.647 回答