4

AVPlayer クラスにデリゲート メソッドはありますか? 電話などの割り込みを処理する必要があります。 AVAudioPlayer がサポートしています。AVPlayer がサポートしていない場合、AVAudioPlayer でオーディオをストリーミングするにはどうすればよいですか?

4

5 に答える 5

8

AVPlayer必要なメソッドがありませんが、AVAudioSession代わりにオブジェクトを使用できます

1)AVAudioSessionオブジェクトを選択します(たとえば[AVAudioSession sharedInstance]) 2)メソッド
を呼び出してアクティブに設定し ます3)そのデリゲートを設定します(クラス実装プロトコル) 4)次のようなデリゲートのメソッドを実装しますsetActive:error:
AVAudioSessionDelegate

-(void)beginInterruption;
-(void)endInterruptionWithFlags:(NSUInteger)flags;
-(void)endInterruption;
于 2012-03-11T18:53:14.447 に答える
1

編集

AVPlayerクラスで利用可能なデリゲートが表示されません

では、AVAudioPlayerでオーディオをストリーミングする方法は?どのようにストリーミングする必要があるのか​​、そしてどこから最も重要なのかわからないため、いくつかのインスピレーションを提供して、
関連する質問を参照してください。

とチュートリアル


AVAudioPlayerDelegateプロトコルリファレンス http://developer.apple.com/library/ios/#documentation/AVFoundation/Reference/AVAudioPlayerDelegateProtocolReference/Reference/Reference.html#//apple_ref/doc/uid/TP40008068

  • サウンド再生の完了への応答
    – audioPlayerDidFinishPlaying:successfully:

  • オーディオデコードエラーへの対応
    – audioPlayerDecodeErrorDidOccur:error:

  • オーディオ割り込みの処理
    – audioPlayerBeginInterruption:
    – audioPlayerEndInterruption:
    – audioPlayerEndInterruption:withFlags:

于 2011-08-30T15:18:27.497 に答える
1

AVAudioPlayer を使用している場合でも、オーディオ セッションを初期化できます。ここで、実行する再生 (または録音) の種類と、電話などの割り込みを処理するためのコールバックを指定できます。

AudioSessionInitialize()3 番目のパラメーターである、割り込みを処理するためのコールバック関数を見てください。コールバックでは、割り込みの開始と終了の両方を処理できます。

ここで AudioSession を使用する場合と AVAudioPlayer コールバックに依存する場合の顕著な違いは、前者が下位レベルで、おそらく後者のデリゲート メソッドが呼び出される前に発生することです。したがって、AudioSession コールバックを使用すると、より細かく制御できると思いますが、アプリのオーディオ設定の複雑さに応じて、さらに多くのことを行う必要があります。

于 2011-08-31T17:26:46.527 に答える
1

AVPlayer がそこに到達するとは思いません。AVAudioPlayerDelegate を見てください。audioPlayerBeginInterruption は、探しているデリゲート メソッドです。

AVAudioPlayer に使用するコードのサンプルを次に示します (URL の作成方法を既に知っていることを前提としています)。

// Instantiates the AVAudioPlayer object, initializing it with the sound
NSError * errAV = nil;
AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfUrl: mUrl error: &errAV];
if (newPlayer == nil) {

    NSString * msg = [[NSString alloc] initWithFormat:@"An internal error has occured:  %@", [errAV localizedDescription]];
    UIAlertView *uiav = [[UIAlertView alloc] initWithTitle:@"Play Sound" 
                                                   message:msg delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [uiav show];
    [uiav release];
    [msg release];
} else {

    self.appSoundPlayer = newPlayer;
    [newPlayer release];
    // "Preparing to play" attaches to the audio hardware and ensures that playback
    //      starts quickly when the user taps Play
    [appSoundPlayer prepareToPlay];
    [appSoundPlayer setVolume: 1.0];
    [appSoundPlayer setDelegate: self];
    [appSoundPlayer play];
}
于 2011-08-30T15:23:12.660 に答える