相关疑难解决方法(0)

录制视频而不停止设备的声音/音乐

我正在使用Swift的AVFoundation来捕获iOS中的视频.但是当我使用Apple Music/Spotify播放歌曲然后单击我的应用程序的录制按钮时,它会暂停/停止音乐然后录制视频.我该如何防止这种情况发生?

这是我的代码:

@IBAction func record_video(sender: AnyObject) {
        var initialOutputURL = NSURL(fileURLWithPath: "")

        do
        {
            initialOutputURL = try NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true).URLByAppendingPathComponent("output").URLByAppendingPathExtension("mov")
        }catch
        {
            print(error)
        }
        if !isRecording
        {

            isRecording = true
            if let outputs = captureSession.outputs as? [AVCaptureOutput] {
                for output in outputs {
                    captureSession.removeOutput(output)
                }
            }

            do
            {
                try audioSession.setCategory(AVAudioSessionCategoryAmbient)
            }
            catch
            {
                print("Can't Set Audio Session Category: \(error)")
            }
            AVAudioSessionCategoryOptions.MixWithOthers

            do
            {
                try audioSession.setMode(AVAudioSessionModeVideoRecording)
            }
            catch
            {
                print("Can't Set Audio Session Mode: \(error)")
            } …
Run Code Online (Sandbox Code Playgroud)

video avfoundation ios swift

18
推荐指数
1
解决办法
1114
查看次数

iOS 相机:`AVCaptureAudioDataOutput` 即时激活音频会话,避免背景音乐卡顿

我使用 AVFoundation 创建了一个相机,它能够使用AVCaptureVideoDataOutput和录制视频和音频AVCaptureAudioDataOutput。我创建我的捕获会话,连接所有输入以及视频和音频数据输出,然后相机处于空闲状态。用户现在可以开始视频录制。

问题

问题在于,在我开始捕获会话 ( captureSession.startRunning()) 后,背景音乐立即断断续续。我认为这是因为一旦捕获会话开始运行,AVCaptureAudioDataOutput内部就会激活 AVAudioSession ( AVAudioSession.setActive(...)),我不希望它这样做。我希望它处于空闲状态(并且不提供任何音频输出缓冲区),直到我明确激活音频会话(一旦用户开始录制)。

这真的很烦人,因为相机是我们应用程序的开始屏幕,每次用户打开或关闭应用程序时,他的音乐都会断断续续。

我知道这在某种程度上是可能的,因为 Snapchat 就是这样工作的——你打开应用程序,背景音频继续流畅地播放。开始录制后,背景音乐会出现轻微的卡顿,但相机会顺利运行并在短暂的卡顿结束后开始录制。

我的代码:

func configureSession() {

    captureSession.beginConfiguration()

    // Video, Photo and Audio Inputs
    ...

    // Video Output
    ...

    // Audio Output
    audioOutput = AVCaptureAudioDataOutput()
    guard captureSession.canAddOutput(audioOutput!) else {
      throw CameraError.parameter(.unsupportedOutput(outputDescriptor: "audio-output"))
    }
    audioOutput!.setSampleBufferDelegate(self, queue: audioQueue)
    captureSession.addOutput(audioOutput!)

    try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playAndRecord,
                                                    options: [.mixWithOthers,
                                                              .allowBluetoothA2DP,
                                                              .defaultToSpeaker,
                                                              .allowAirPlay])

    captureSession.commitConfiguration()
}
Run Code Online (Sandbox Code Playgroud)

我试过的

延迟配置 AVAudioSession.sharedInstance()

我尝试首先AVAudioSession.sharedInstance使用 category进行配置AVAudioSession.Category.playback,然后在.playAndRecord我想开始录制音频时切换到。

这不起作用,并且在AVCaptureSessionRuntimeError使用错误代码启动相机后立即调用该事件 …

objective-c avfoundation ios avcapturesession swift

8
推荐指数
1
解决办法
126
查看次数

标签 统计

avfoundation ×2

ios ×2

swift ×2

avcapturesession ×1

objective-c ×1

video ×1