AVCaptureSession和后台音频iOS 7
每当我启动以麦克风作为输入运行的AVCaptureSession时,它就会取消当前正在运行的任何背景音乐(例如iPod音乐)。如果我注释掉添加音频输入的行,背景音频将继续 有人知道在继续播放背景音频的同时用麦克风录制视频片段的方法吗?当您尝试录制视频且当前正在播放音乐时,也会出现错误。 A试图这样做: 但“AudioSessionSetProperty”已被弃用:首次在iOS 7.0中弃用 所以我试着这样做:AVCaptureSession和后台音频iOS 7,ios,objective-c,avcapturesession,avaudiosession,avcapturedevice,Ios,Objective C,Avcapturesession,Avaudiosession,Avcapturedevice,每当我启动以麦克风作为输入运行的AVCaptureSession时,它就会取消当前正在运行的任何背景音乐(例如iPod音乐)。如果我注释掉添加音频输入的行,背景音频将继续 有人知道在继续播放背景音频的同时用麦克风录制视频片段的方法吗?当您尝试录制视频且当前正在播放音乐时,也会出现错误。 A试图这样做: 但“AudioSessionSetProperty”已被弃用:首次在iOS 7.0中弃用 所以我试着这样做: 但最后它没有起作用。谢谢你的帮助 您可以与其他人一起使用avaudioSessionC
但最后它没有起作用。谢谢你的帮助 您可以与其他人一起使用
avaudioSessionCategoryOptionMix
。
比如说,
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];
之后,您可以将AVAudioPlayer
与AVCaptureSession
同时使用
但是,上面的代码导致的容量非常小。
如果您想要正常音量,请使用AVAudioSessionCategoryOptionDefaultToSpeaker
与avaudioSessionCategoryOptionMix with Others
,如下所示:
[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers|AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
这一切进展顺利。在您的应用程序中,委派:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//Stop app pausing other sound.
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord
withOptions:AVAudioSessionCategoryOptionDuckOthers | AVAudioSessionCategoryOptionDefaultToSpeaker
error:nil];
}
AVCaptureSession *session = [[AVCaptureSession alloc] init];
session.automaticallyConfiguresApplicationAudioSession = NO;
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
//Stop app pausing other sound.
do{
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord,
withOptions: [.DuckOthers, .DefaultToSpeaker])
}
catch {
}
return true
}
let session = AVCaptureSession()
session.automaticallyConfiguresApplicationAudioSession = false
您正在分配AVCaptureSession的位置:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//Stop app pausing other sound.
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord
withOptions:AVAudioSessionCategoryOptionDuckOthers | AVAudioSessionCategoryOptionDefaultToSpeaker
error:nil];
}
AVCaptureSession *session = [[AVCaptureSession alloc] init];
session.automaticallyConfiguresApplicationAudioSession = NO;
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
//Stop app pausing other sound.
do{
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord,
withOptions: [.DuckOthers, .DefaultToSpeaker])
}
catch {
}
return true
}
let session = AVCaptureSession()
session.automaticallyConfiguresApplicationAudioSession = false
此代码将允许您播放背景音乐并使用麦克风运行AVCaptureSession
快速更新:
AppDelegate:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//Stop app pausing other sound.
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord
withOptions:AVAudioSessionCategoryOptionDuckOthers | AVAudioSessionCategoryOptionDefaultToSpeaker
error:nil];
}
AVCaptureSession *session = [[AVCaptureSession alloc] init];
session.automaticallyConfiguresApplicationAudioSession = NO;
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
//Stop app pausing other sound.
do{
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord,
withOptions: [.DuckOthers, .DefaultToSpeaker])
}
catch {
}
return true
}
let session = AVCaptureSession()
session.automaticallyConfiguresApplicationAudioSession = false
您正在分配AVCaptureSession的位置:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//Stop app pausing other sound.
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord
withOptions:AVAudioSessionCategoryOptionDuckOthers | AVAudioSessionCategoryOptionDefaultToSpeaker
error:nil];
}
AVCaptureSession *session = [[AVCaptureSession alloc] init];
session.automaticallyConfiguresApplicationAudioSession = NO;
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
//Stop app pausing other sound.
do{
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord,
withOptions: [.DuckOthers, .DefaultToSpeaker])
}
catch {
}
return true
}
let session = AVCaptureSession()
session.automaticallyConfiguresApplicationAudioSession = false
感谢您的回答,但是:“AudioSessionSetProperty”已被弃用:首先在iOS 7.0@user523234中弃用,我希望我的回答能有所帮助。我花了不止一天的时间来找出解决方案。这对我来说不太合适。当我拨打最后一行时,背景音频停止播放。你的iOS版本是什么?我还没有检查iOS8。苹果可能会更改规范。我发现,当它在
AppDelegate中的输入完成启动时,它确实可以工作。但是,在这种情况下,当应用程序启动时,背景音频中会出现明显的停顿。如果我想在Ambient
中启动应用程序,然后切换到Play和Record
,首先我必须使用Options:NotifyOnDeactivation调用setActive:NO,设置Play和Record
类别后,我必须重新激活setActive:YES
。所有这些切换都会导致myAVCaptureSession
中的背景音频和视频故障短暂暂停。感谢ancajic提供的宝贵报告。我已在我的视图控制器viewDidLoad中添加了上述两行代码。录制(通过耳机)后,我的音乐文件输出将是通过麦克风录制的声音+通过扬声器播放的背景音乐的组合。但我的问题是,通过扬声器播放的背景音乐的声音在最终输出音乐中非常低。它起作用了。。我为此花了将近30天的时间。。一吨多加布里埃尔,加布里埃尔,我从这个问题开始悬赏,在寻找答案很多天后,我找到了你的答案。如果你愿意的话,我很乐意给你赏金。@Gabriel.masana-这个效果很好,但背景音乐的初始亮度明显变暗。你知道如何绕过它吗?谢谢@加布里埃尔。马萨纳真是个丢脸的人——谢谢你的快速反应!如果我最终解决了,我会向你汇报的。