2016-12-13 4 views
2

私はVOIPアプリケーションとCallKitを統合しています。私は着信と発信を行うことができました。CXPlayDTMFCallActionはローカルdtmfサウンドを再生しません

  1. ConfigureAudioSessionで
  2. startAudio(didActivate)以下に示すように、私はDTMFプロバイダデリゲートのためのコールバックを実装している

  • stopAudio(didDeActivate):私は、ステップを追っ

    func provider(_ provider: CXProvider, perform action: CXPlayDTMFCallAction) { 
        print("Provider - CXPlayDTMFCallAction") 
    
        let dtmfDigts:String = action.digits 
    
        for (index, _) in dtmfDigts.characters.enumerated() { 
         let dtmfDigit = dtmfDigts.utf8CString[index] 
         print("Processing dtmfDigit:\(dtmfDigit)") 
         self.softphone.dtmf(on:dtmfDigit) 
        } 
    
        self.softphone.dtmfOff() 
    
        // Signal to the system that the action has been successfully performed. 
        action.fulfill() 
    } 
    

    ナットの数字を押すと、キー押された音が聞こえません。つまり、ローカルdtmfの音が鳴ります。通話中の通話中のUI。 https://developer.apple.com/reference/callkit/cxplaydtmfcallactionから

    「CallKitが自動的に呼び出しを介して送信 任意の桁のため、対応するDTMF周波数を果たしているアプリが アクションを果たすの一部として桁のタイミングおよび取り扱いを管理する責任があります。 "

    これは既知の問題ですか、またはcallkitがローカルのdtmfキープレス音を再生しませんか?

  • +0

    「ネイティブダイヤラー」は、電話アプリの[キーパッド]タブを参照しているか、ネイティブの通話UIに表示されている「キーパッド」ボタンを意味していますか? –

    +0

    @StuartMはい、ネイティブの通話UIです。 – ssk

    答えて

    1

    func provider(_ provider: CXProvider, perform action: CXPlayDTMFCallAction) { 
        print("Provider - CXPlayDTMFCallAction") 
    
        self.softphone.audioController.configureAudioSession() 
    
        let dtmfDigts:String = action.digits 
    
        for (index, _) in dtmfDigts.characters.enumerated() { 
         let dtmfDigit = dtmfDigts.utf8CString[index] 
         print("Processing dtmfDigit:\(dtmfDigit)") 
         self.softphone.dtmf(on:dtmfDigit) 
        } 
    
        self.softphone.dtmfOff() 
    
        // Signal to the system that the action has been successfully performed. 
        action.fulfill() 
    } 
    

    注: I)は、(self.softphone.audioController.configureAudioSessionを追加しました。

    -(void) configureAudioSession 
    { 
        // Configure the audio session 
        AVAudioSession *sessionInstance = [AVAudioSession sharedInstance]; 
    
        // we are going to play and record so we pick that category 
        NSError *error = nil; 
        [sessionInstance setCategory:AVAudioSessionCategoryPlayAndRecord error:&error]; 
        if (error) { 
         NSLog(@"error setting audio category %@",error); 
        } 
    
        // set the mode to voice chat 
        [sessionInstance setMode:AVAudioSessionModeVoiceChat error:&error]; 
        if (error) { 
         NSLog(@"error setting audio mode %@",error); 
        } 
    
        NSLog(@"setupAudioSession"); 
    
        return; 
    } 
    
    2

    ネイティブのコールインUIの「キーパッド」ボタンのキーを押すと、CallKitはDTMFトーンをローカルで再生する必要があります。しかし、CallKitアプリケーションは、DTMFトーンを独自のネットワークインターフェイスを介してリモート側に送信する責任があります。

    ネイティブのコールインUIからローカルで再生されたトーンを聞いていない場合は、アップルにreport a bugをお寄せください。

    私はそれがで動作させることができた
    関連する問題