swift2 使用iOS核心电话框架进行通话录音

pjngdqdw  于 2022-11-06  发布在  Swift
关注(0)|答案(1)|浏览(357)

我正在做一个紧急应用程序。在其中用户可以点击呼叫按钮,在紧急情况下。我已经使用了核心电话获取呼叫事件所描述的苹果和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默认呼叫功能)从应用程序启动时,我的应用程序会进入后台,呼叫事件处理程序块不会被调用。我在某个地方读到,呼叫/音频录制只会在您的应用程序处于前台时工作,所以我也尝试过在呼叫启动后将我的应用程序置于前台,但即使这样也不工作。现在我有以下问题/担忧:
1.这是苹果不允许我们做的事情吗?
1.应用程序只能记录VOIP/SIP呼叫,而不能记录默认呼叫?
1.在iOS中不使用任何服务器技巧就可以记录通话吗?
注意:这个应用程序不是为越狱设备,我希望我的应用程序上传到应用程序商店。

iqjalb3h

iqjalb3h1#

1.这是很多国家不允许的,苹果根本不允许,甚至没有任何私有的API来做这件事
1.应用程序可以记录他们自己的东西,只要他们通知用户。Hive网络是完全不同的东西
1.不。即使有越狱,你也必须将代码注入iOS音频堆栈的较低级别部分,并处理通过系统的原始音频流。
因此,你不可能把这样的东西放进AppStore。

相关问题