只有背景音乐的 AVCaptureSession
Posted
技术标签:
【中文标题】只有背景音乐的 AVCaptureSession【英文标题】:AVCaptureSession with only background music 【发布时间】:2014-11-14 15:03:28 【问题描述】:我需要做这样的事情。 我的应用程序使用 AVCapturesession 进行录制,但它应该能够使用我播放的背景音乐流式传输实时提要。
记住我可以用 AVCapturesession 播放背景音乐,但问题是它还涉及到周围环境的声音。
这是我正在使用的音频会话类别
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 和 Ambient 根本不播放声音。
我也曾尝试禁用 AVCapturesession 的音频输入,但没有帮助。
【问题讨论】:
检查这个答案,我相信会帮助你:***.com/a/28026142/1381708 【参考方案1】:您必须移除代表麦克风的 AVCaptureInput 设备。 您可以通过遍历 AVCaptureSession 实例并执行以下操作来做到这一点:
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;
现在将您的音频设置为如下所示:
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
【讨论】:
以上是关于只有背景音乐的 AVCaptureSession的主要内容,如果未能解决你的问题,请参考以下文章
如何让 AVCaptureSession 和 AVPlayer 尊重 AVAudioSessionCategoryAmbient?
向 AVCaptureSession 添加音频输入会停止 AVPlayer
离开 ViewController 时停止 AVCaptureSession