使用Spotify /背景音乐打开相机

Mor*_*len 13 iphone audio objective-c ios avaudiosession

我有一个需要的应用程序:

  • 使用应用程序时播放的背景音乐(例如,spotify)
  • 播放背景音乐,当观看从AVPlayer的电影时
  • 录制视频时停止播放音乐

像Snapchat一样,camera-viewcontroller是"swipeview"的一部分,因此始终打开.

然而,当打开和关闭应用程序时,音乐会产生短暂的"破解"噪音/声音,从而破坏音乐.

我在这里录制了它:https: //soundcloud.com/morten-stulen/hacky-sound-ios (3次出现)

我使用这些设置来更改appdelegate didFinishLaunchingWithOptions中的AVAudiosession:

     do {
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord,withOptions: 
                [AVAudioSessionCategoryOptions.MixWithOthers,
                 AVAudioSessionCategoryOptions.DefaultToSpeaker])
            try AVAudioSession.sharedInstance().setActive(true)

        } catch {
            print("error")
        }
Run Code Online (Sandbox Code Playgroud)

我使用LLSimpleCamera控件进行视频录制,我将会话设置为:

_session.automaticallyConfiguresApplicationAudioSession = NO;
Run Code Online (Sandbox Code Playgroud)

似乎其他人也有与其他相机库相同的问题:https: //github.com/rFlex/SCRecorder/issues/127

https://github.com/rFlex/SCRecorder/issues/224

这家伙删除了audioDeviceInput,但我有点需要录制视频. https://github.com/omergul123/LLSimpleCamera/issues/48

我也尝试使用Apple的代码"AvCam",我仍然有同样的问题.Snapchat如何做到这一点?!

任何帮助将不胜感激,我很乐意提供更多信息或代码!

Jar*_*lle 5

我做了类似于你想要的东西,但没有相机方面,但我认为这将做你想要的.我的应用程序允许与非全屏视频/音频混合的背景音频.当用户播放音频文件或全屏视频文件时,我会完全停止背景音频.

我做SoloAmbient然后播放的原因是因为我允许在设备锁定时在后台播放我的音频.Going SoloAmbient将停止播放所有背景音乐,然后切换到Playback可让我的音频在应用程序和后台播放.

这就是为什么你看到一个方法的调用,该方法在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")
    }
}
Run Code Online (Sandbox Code Playgroud)

当我想要停止背景音频时,例如播放应该独立的音轨时,我会执行以下操作:

在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
}
Run Code Online (Sandbox Code Playgroud)

当我完成媒体播放时,我会这样做:

private func unloadMediaPlayer()
{
    if _mediaPlayer != nil {
        _mediaPlayer!.unload()
        self._mediaPlayer = nil
    }

    _controlView.updateForProgress(0, duration: 0, animate: false)

    ForgeHelper.appDelegate().allowBackgroundAudio()
    setLockScreenInfo()
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助你!