我有一些SIP应用程序。在我使用音频之前,只有evrything工作正常,我在必要时收到AVAudioSessionInterruptionNotification
。
使用视频时出现问题(接收和发送相机输入)。一旦我使用视频会话,即使仅使用后来的音频,也不会再次触发通知。
我该如何解决?我找到了类似的topic,但回答是提示,我不完全明白。此外,我没有摄像头/拍摄设备"和" AVCaptureSession"由于音频和视频流由封闭的第三方库提供,但我的代码必须处理中断。
我是否必须更改某些属性才能始终触发此通知(链接主题提示),或者是否应使用其他通知。
我正在挖掘文档,但我没有找到对我有用的东西。
我尝试使用AVCaptureSession
的虚拟对象,但这并没有解决问题。
<小时/> 修改:第三方库遭遇了一些额外的崩溃,暴露了他们使用
AVCAptureSession
的内容。我已经联系过他们,要求按other question和&#34;乞讨&#34;中所述更改财产usesApplicationAudioSession
。他们来解决它。经过长时间的斗争,他们同意了:)。
答案 0 :(得分:1)
我使用了类别和method swizzling,它就像魅力一样。
#import "AVCaptureSession+MethodSwizzling.h"
#import <objc/runtime.h>
static void MethodSwizzle(Class c, SEL origSEL, SEL overrideSEL) {
Method origMethod = class_getInstanceMethod(c, origSEL);
Method overrideMethod = class_getInstanceMethod(c, overrideSEL);
if(class_addMethod(c, origSEL, method_getImplementation(overrideMethod), method_getTypeEncoding(overrideMethod))) {
class_replaceMethod(c, overrideSEL, method_getImplementation(origMethod), method_getTypeEncoding(origMethod));
} else {
method_exchangeImplementations(origMethod, overrideMethod);
}
}
@implementation AVCaptureSession (MethodSwizzling)
- (id)initMethodSwizzling {
self = [self initMethodSwizzling]; // it is not recursion it is method swizzling
self.usesApplicationAudioSession = NO;
return self;
}
+ (void)load {
if (class_getInstanceMethod(self, @selector(setUsesApplicationAudioSession:))) {
// Swizzle methods only when it is possible to change usesApplicationAudioSession property.
MethodSwizzle(self, @selector(init), @selector(initMethodSwizzling));
}
}
@end