reproduce porque pantalla musica mientras interno grabo grabar grabacion graba fondo escucha cuando con ios swift video avfoundation

ios - porque - Grabar un video sin detener el sonido/la música desde el dispositivo



mi iphone 6 graba video sin audio (2)

Estoy trabajando con AVFoundation de Swift para capturar un video en iOS. Pero cuando toco una canción usando Apple Music / Spotify, hago clic en el botón de grabación de mi aplicación, pausa / detiene la música y luego graba el video. ¿Cómo evito que eso suceda?

Aquí está mi código:

@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)") } // Start Session do { try audioSession.setActive(true) } catch { print("Can''t Start Audio Session: /(error)") } UIView.animateWithDuration(0.5, delay: 0.0, options: [.Repeat, .Autoreverse, .AllowUserInteraction], animations: { () -> Void in self.record.transform = CGAffineTransformMakeScale(0.75, 0.75) }, completion: nil) let audioInputDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeAudio) do { let audioInput = try AVCaptureDeviceInput(device: audioInputDevice) // Add Audio Input if captureSession.canAddInput(audioInput) { //captureSession.addInput(audioInput) } else { NSLog("Can''t Add Audio Input") } let videoInput: AVCaptureDeviceInput do { videoInput = try AVCaptureDeviceInput(device: captureDevice) // Add Video Input if captureSession.canAddInput(videoInput) { captureSession.addInput(videoInput) } else { NSLog("ERROR: Can''t add video input") } } catch let error { NSLog("ERROR: Getting input device: /(error)") } videoFileOutput = AVCaptureMovieFileOutput() captureSession.addOutput(videoFileOutput) captureSession.sessionPreset = AVCaptureSessionPresetHigh captureSession.automaticallyConfiguresApplicationAudioSession = false videoFileOutput?.startRecordingToOutputFileURL(initialOutputURL, recordingDelegate: self) } catch let error { NSLog("Error Getting Input Device: /(error)") } } else { isRecording = false UIView.animateWithDuration(0.5, delay: 0, options: [], animations: { () -> Void in self.record.transform = CGAffineTransformMakeScale(1.0, 1.0) }, completion: nil) record.layer.removeAllAnimations() videoFileOutput?.stopRecording() } }

Tenga en cuenta que comenté captureSession.addInput(audioInput) . Si elimino ese código, la aplicación puede grabar el video, no pausa ni detiene la música, pero la salida de video no tiene sonido. ¿Hay una solución para esto?


Pude resolver el problema por mi cuenta. La línea: AVAudioSessionCategoryOptions.MixWithOthers no hace nada. Lo moví a las opciones: try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions: [AVAudioSessionCategoryOptions.MixWithOthers])

¡Funcionó!


Puede consultar la respuesta de esta pregunta

Implementé la misma característica usando SCRecorder Library, pero también se puede lograr con AVCaptureSession.