使用iOS核心电话框架进行呼叫录音
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用iOS核心电话框架进行呼叫录音相关的知识,希望对你有一定的参考价值。
我正在制作紧急应用程序。在紧急情况下,用户可以点击通话按钮。我已经使用核心电话来获取呼叫事件,如apple和AVFoundation
框架所述,用于记录呼叫音频。这是我的代码:
override func viewDidLoad() {
super.viewDidLoad()
self.setupCallRecorder()
}
func callConnected() {
print("callConnected")
self.audioRecorder?.record()
}
func callDisconnected() {
print("callDisconnected")
self.audioRecorder?.stop()
}
func setupCallRecorder() {
let audiosession:AVAudioSession = AVAudioSession.sharedInstance()
//ask for permission
if (audioSession.respondsToSelector("requestRecordPermission:")) {
AVAudioSession.sharedInstance().requestRecordPermission({(granted: Bool)-> Void in
if granted {
print("granted")
//set category and activate recorder session
try! audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
try! audioSession.setActive(true)
//get documnets directory
let documentsDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]
let soundFilePath = NSString(format: "%@/sound.caf", documentsDirectory)
let soundFileURL = NSURL.fileURLWithPath(soundFilePath as String)
//create AnyObject of settings
let settings: [String : AnyObject] = [
AVFormatIDKey:Int(kAudioFormatAppleIMA4), //Int required in Swift2
AVSampleRateKey:44100.0,
AVNumberOfChannelsKey:2,
AVEncoderBitRateKey:12800,
AVLinearPCMBitDepthKey:16,
AVEncoderAudioQualityKey:AVAudioQuality.Max.rawValue
]
//record
try! self.audioRecorder = AVAudioRecorder(URL: soundFileURL, settings: settings)
} else{
print("not granted")
}
})
}
let callCenter = CTCallCenter();
callCenter.callEventHandler = { (call:CTCall!) in
switch call.callState {
case CTCallStateConnected:
print("CTCallStateConnected")
self.callConnected()
case CTCallStateDisconnected:
print("CTCallStateDisconnected")
self.callDisconnected()
default:
//Not concerned with CTCallStateDialing or CTCallStateIncoming
break
}
}
}
但是当从应用程序启动调用(iOS默认调用功能)时,我的应用程序转到后台并且不调用调用事件处理程序块。我已经读过某个地方,只有当你的应用程序处于前台时才会调用/录音,所以我也试过在启动呼叫后将我的应用程序带到前台,但即使这样它也无法正常工作。现在我有以下问题/疑虑:
- 这是苹果不允许我们做的事情吗?
- 应用只能记录VOIP / SIP呼叫而不是默认呼叫?
- 这可以在不使用任何服务器技巧的情况下在iOS中记录呼叫吗?
注意:此应用不适用于越狱设备,我希望我的应用在应用商店上传。
答案
- 这是许多国家不允许的。 Apple根本不允许它,甚至没有任何私有API来做到这一点
- 应用程序可以记录他们想要的所有内容,因为他们会通知用户。蜂窝网络是完全不同的东西
- 不会。即使有越狱,您也必须将代码注入iOS音频堆栈的较低级别部分,并使用通过系统的原始音频流。
因此,你无法在App Store中获得类似的东西。
以上是关于使用iOS核心电话框架进行呼叫录音的主要内容,如果未能解决你的问题,请参考以下文章