只有背景音乐的AVCaptureSession

问题描述:

我需要做这样的事情。 我的应用程序使用AVCapturesession进行录制,但它应该能够播放带有我玩过的背景音乐的实时Feed。只有背景音乐的AVCaptureSession

记住我能够播放背景音乐与AVCapturesession,但问题是,它也涉及到周围环境的声音。

这里是audiosession类我使用

 AudioSessionInitialize(NULL, NULL, NULL, self); 

    // //set the audio category 
    UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord; 
    AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(audioCategory), &audioCategory); 

    // mix with others!! this allows using AVCaptureSession and AusioSession simultaniously 
    UInt32 doSetProperty = 1; 
    AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(doSetProperty), &doSetProperty); 

    AudioSessionSetActive(YES); 

我已经尝试了类的几乎所有的组合,但我没能获得所需的输出, SoloAmbient和环境不播放声音都没有。

我也尝试禁用AVCapturesession的audioinput,但它没有帮助。

+0

检查这个答案,我相信会帮助你:http://*.com/a/28026142/1381708 – 2015-01-19 17:58:51

您必须移除表示麦克风的AVCaptureInput设备。

AVCaptureSession *currentSession = self.currentSession; 
for(AVCaptureInput *input in currentSession.inputs) { 

    for (AVCaptureInputPort *port in input.ports) { 
     if ([[port mediaType] isEqual:AVMediaTypeAudio]) { 
      [currentSession removeInput:input]; 
      break; 
     } 
    } 
} 

现在设置您的音频作为这样的事情: 您可以通过循环AVCaptureSession实例,做这样的事情做到这一点

AVAudioSession *session = [AVAudioSession sharedInstance]; 
[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers|AVAudioSessionCategoryOptionDefaultToSpeaker error:nil]; 
NSError *activationError = nil; 
BOOL success = [session setActive: YES error: &activationError]; 

SWIFT 3

let currentSession = self.currentSession 

for input in currentSession.inputs as! [AVCaptureInput] { 
    for port in input.ports as! [AVCaptureInputPort] { 
    if port.mediaType == AVMediaTypeAudio { 
     currentSession.removeInput(input) 
     break 
    } 
    } 
} 

do { 
    let session = AVAudioSession.sharedInstance() 
    try session.setCategory(AVAudioSessionCategoryPlayAndRecord, with: [AVAudioSessionCategoryOptions.mixWithOthers, AVAudioSessionCategoryOptions.defaultToSpeaker]) 
    try session.setActive(true) 
} catch { 

}