6

ローカルの .wav ファイルの再生に問題があります。これAVPlayerStatus0、再生する準備ができていないことを意味すると想定しています。私はそれを理解できないようですが、そうは言っても、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

AVPlayItem -initWithURL:メソッドを使用する際に Apple が指摘しているいくつかの重要な落とし穴を次に示します。

特別な考慮事項

このメソッドはアイテムをすぐに返しますが、ステータスは AVPlayerItemStatusUnknown です。

プレーヤー アイテムで使用できる有効なデータが URL に含まれている場合、ステータスは後で AVPlayerItemStatusReadyToPlay に変わります。

URL に有効なデータが含まれていないか、プレーヤー アイテムで使用できない場合、ステータスは後で AVPlayerItemStatusFailed に変わります。

私が想像しているのは、-playAVPlayerItemオブジェクトを作成してから間もなくメッセージを送信しているAVPlayerItemStatusUnknownため、リソースをロードしてステータスをAVPlayerItemStatusReadyToPlay.

私の提案:

  • AVPlayerItem/AVPlayer ステータスの変化を確認-playし、後の段階で呼び出します。

または、さらに単純に、

  • NSURL からAVAssetまたはAVURLAssetオブジェクトをロードし、AVPlayerItem メソッドを使用します。このメソッドは、すぐに再生できるオブジェクトを返します。その後、必要に応じて、その直後に–initWithAsset:call を呼び出します。-play
于 2012-10-08T21:09:25.203 に答える
1

0は と同等ですAVPlayerStatusUnknown。これは、実際に を呼び出すまでプレーヤーが URL を読み込もうとしないためだと思いますplay

ドキュメントから:

AVPlayerStatusUnknown

再生のために新しいメディア リソースをロードしようとしていないため、プレーヤーのステータスがまだ不明であることを示します。

于 2012-05-16T11:32:21.647 に答える