>使用应用程序时播放背景音乐(例如,识别)
>从AVPlayer观看电影时播放背景音乐
>录制视频时停止音乐
像Snapchat一样,相机视图控制器是“swipeview”的一部分,因此始终处于打开状态.
然而,当打开和关闭应用程序时,音乐会产生短暂的“破裂”噪音/声音,从而破坏音乐.
我记录在这里:
https://soundcloud.com/morten-stulen/hacky-sound-ios
(3次)
我使用这些设置来更改appAlegate didFinishLaunchingWithOptions中的AVAudiosession:
我使用LLSimpleCamera控件进行视频录制,我已经将会话设置为:
- _session.automaticallyConfiguresApplicationAudioSession = NO;
似乎其他人也有与其他相机库相同的问题:
https://github.com/rFlex/SCRecorder/issues/127
https://github.com/rFlex/SCRecorder/issues/224
这个家伙删除了audioDeviceInput,但我需要录制视频.
https://github.com/omergul123/LLSimpleCamera/issues/48
我也试过苹果的代码“AvCam”,我还是有同样的问题. Snapchat如何做到这一点?
任何帮助将不胜感激,我乐意提供更多的信息或代码!
解决方法
我做SoloAmbient然后播放的原因是因为我允许我的音频在设备被锁定的背景中播放.去SoloAmbient将停止播放所有背景音乐,然后切换到播放可以让我的音频播放在应用程序以及后台.
这就是为什么你看到一个方法来调用锁定屏幕信息在Unload方法.在这种情况下,它将其归零,以便没有锁屏信息.
在AppDelegate.swift中
- //MARK: Audio Session Mixing
- func allowBackgroundAudio()
- {
- do {
- try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback,withOptions: .MixWithOthers)
- } catch {
- NSLog("AVAudioSession SetCategory - Playback:MixWithOthers Failed")
- }
- }
- func preventBackgroundAudio()
- {
- do {
- //Ask for Solo Ambient to prevent any background audio playing,then change to normal Playback so we can play while locked
- try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategorySoloAmbient)
- try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
- } catch {
- NSLog("AVAudioSession SetCategory - SoloAmbient Failed")
- }
- }
当我想要停止背景音频时,例如当播放应该是单独的音轨时,我执行以下操作:
在MyAudioPlayer.swift
- func playUrl(url: NSURL?,backgroundImageUrl: NSURL?,title: String,subtitle: String)
- {
- ForgeHelper.appDelegate().preventBackgroundAudio()
- if _mediaPlayer == nil {
- self._mediaPlayer = MediaPlayer()
- _mediaPlayer!.delegate = self
- }
- //... Code removed for brevity
- }
当我完成我的媒体播放,我这样做:
- private func unloadMediaPlayer()
- {
- if _mediaPlayer != nil {
- _mediaPlayer!.unload()
- self._mediaPlayer = nil
- }
- _controlView.updateForProgress(0,duration: 0,animate: false)
- ForgeHelper.appDelegate().allowBackgroundAudio()
- setLockScreenInfo()
- }
希望这可以帮助你!