1

このコード:

NSString *urlPath = [[NSBundle mainBundle] pathForResource:@"snd" ofType:@"mp3"];
NSURL *url = [NSURL fileURLWithPath:urlPath];

NSError *err;

AVAudioPlayer* audioPlayerMusic = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&err];

[audioPlayerMusic play];

うまく動作します。

これは次のとおりです。

NSString *urlPath = [[NSBundle mainBundle] pathForResource:@"snd" ofType:@"mp3"];
NSURL *url = [NSURL fileURLWithPath:urlPath];

AVPlayer* audioPlayerMusic = [AVPlayer playerWithURL:url];

[audioPlayerMusic play];

何も再生しません!

何がうまくいかないのですか?

4

1 に答える 1

8

リモート ファイルを再生/ストリーミングする場合、AVPlayer はそれを再生する準備ができていません。支払いを開始するのに十分なデータをバッファリングするのを待つ必要がありますが、AVAudioPlayer を使用する場合、これは必要ありません。したがって、AVAudioPlayer を使用するか、再生を開始する準備が整ったときにキー値監視を使用して、AVPlayer がクラスに通知するようにします。

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

そしてあなたのクラスで(self上記の行のインスタンスを参照します):

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if ([keyPath isEqualToString:@"status"]) {
        if (player.status == AVPlayerStatusReadyToPlay) {
            [player play];
        } else if (player.status == AVPlayerStatusFailed) {
            /* An error was encountered */
        }
    }
}
于 2012-08-25T21:51:05.467 に答える