-
Notifications
You must be signed in to change notification settings - Fork 16
audioSession
Sidney edited this page Dec 5, 2017
·
1 revision
当每次点击开播时,播放器会自动做active(激活) AVAudioSession操作:
NSError *error = nil; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionAllowBluetooth | AVAudioSessionCategoryOptionDefaultToSpeaker |AVAudioSessionCategoryOptionAllowBluetoothA2DP error:&error]; [[AVAudioSession sharedInstance] setActive:YES error:&error];
当播放器完成后,不会主动调用deactive AVAudioSession操作。
此时和第三方音乐播放器的交互如下:
- 音乐播放器播放音乐;
- 音乐播放器切后台继续播放;
- 集成播放器的APP启动;
- APP开始直播或者点播流,此时active AVAudioSession,后台第三方音乐播放器暂停;
- APP停止播放,后续在APP内持续操作过程中音乐播放器没有声音播出;
- 切到第三方音乐播放器主动点播播放,开始播放音乐。
如果希望更改第5、6步现象为:当APP停止播放后,第三方音乐播放器立即回到音乐播放状态。需要APP开发做如下操作:
在用户点击播放器stop操作,或者播放器finish通知里面,主动执行deactive AVAudioSession操作:
NSError *error = nil; [[AVAudioSession sharedInstance]setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:&error];
如果deactive AVAudioSession时不携带AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation选项,仍然不能将之前打断的音乐APP重新激活起来。
当使用播放器播放直播或者点播流时,调用第三方播放器播放语言信息后,可能出现以下log:
AVAudioSession.mm:692: -[AVAudioSession setActive:withOptions:error:]: Deactivating an audio session that has running I/O. All I/O should be stopped or paused prior to deactivating the audio session.
出现该log后,将导致播放器不再播放声音。
出现的原因是第三方播放器或者其他方面调用了以下操作,deactive AVAudioSession。
NSError *error = nil; [[AVAudioSession sharedInstance] setActive:NO error:&error];
此时需要APP主动active AVAudioSession:
NSError *error = nil; [[AVAudioSession sharedInstance] setActive:YES error:&error];