ios - 仅带有背景音乐的 AVCaptureSession

标签 ios objective-c avcapturesession avaudiosession

我需要做这样的事情。 我的应用程序使用 AVCapturesession 进行录制,但它应该能够使用我播放过的背景音乐来传输实时流。

记住我可以使用 AVCapturesession 播放背景音乐,但问题是它还涉及周围环境的声音。

这是我正在使用的 Audio Session 类别

     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 的音频输入,但没有帮助。

最佳答案

您必须删除代表麦克风的 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 {

}

关于ios - 仅带有背景音乐的 AVCaptureSession,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26932878/

相关文章:

ios - 如何将 AVCaptureSession.sessionPreset 为 720x1280px(或任何 1/1.77 比例)

ios - 无法在 iOS 应用程序中使用 EventKit 添加事件

ios - 国家气象局 (NOAA) REST API 为预报参数返回 nil

ios - 在 UINavigationController 中,我必须快速使用两个带有 Image 的 rightBarButtonItem

ios - 如何让导航栏显示在 AVCapture session 中

uiimage - 如何将 CIImage 转换为 CMSampleBufferRef

ios - 触摸屏幕时如何在 Swift 中关闭键盘

ios - 复制 NSUserDefaults 数组并编辑数组

iphone - 根据按下的按钮(iOS)检索自定义数据?

ios - 为什么这个布局模棱两可?