1
votes

After I update pjsip from v2.6 to v2.7.1,my app will assertion failed with fuction pjsua_set_snd_dev(). According pjsip's ticket #1941:

To make outgoing call:

func provider(_ provider: CXProvider, perform action: CXStartCallAction) {
    /* 1. We must not start call audio here, and can only do so
     *    once the audio session has been activated by the system
     *    after having its priority elevated. So, make sure that the sound
     *    device is closed at this point.
     */

    /* 2. Provide your own implementation to configure
     *    the audio session here.
     */
    configureAudioSession()

    /* 3. Make call with pjsua_call_make_call().
     *    Then use pjsua's on_call_state() callback to report significant
     *    events in the call's lifecycle, by calling iOS API
     *    CXProvider.reportOutgoingCall(with: startedConnectingAt:) and
     *    CXProvider.reportOutgoingCall(with: ConnectedAt:)
     */

    /* 4. If step (3) above returns PJ_SUCCESS, call action.fulfill(),
     *    otherwise call action.fail().
     */
}

To handle incoming call:

func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {
    /* 1. We must not start call audio here, and can only do so
     *    once the audio session has been activated by the system
     *    after having its priority elevated. So, make sure that the sound
     *    device is closed at this point.
     */

    /* 2. Provide your own implementation to configure
     *    the audio session here.
     */
    configureAudioSession()

    /* 3. Answer the call with pjsua_call_answer().
     */

    /* 4. If step (3) above returns PJ_SUCCESS, call action.fulfill(),
     *    otherwise call action.fail().
     */
}

To start sound device:

func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) {
    /* Start call audio media, now that the audio session has been
     * activated after having its priority boosted.
     *
     * Call pjsua API pjsua_set_snd_dev() here.
     */
}

When calling pjsua API pjsua_set_snd_dev(),there show:

Assertion failed: (param && id!=PJMEDIA_AUD_INVALID_DEV), function pjmedia_aud_dev_default_param, file ../src/pjmedia/audiodev.c, line 487.

I found that v2.7.1, in pjsua_set_no_snd_dev(),there is

pjsua_var.cap_dev = PJSUA_SND_NO_DEV; pjsua_var.play_dev = PJSUA_SND_NO_DEV;

but in v2.6 ,do not have this.

PJSUA_SND_NO_DEV and PJMEDIA_AUD_INVALID_DEV are same as -3.

Is this a bug,or I confuse anything?

1
Have you found a solution for it, @steve?FreeGor
Finally,in fuction pjsua_set_no_snd_dev(),I remove "pjsua_var.cap_dev = PJSUA_SND_NO_DEV; " and "pjsua_var.play_dev = PJSUA_SND_NO_DEV;".It work OK now.steve
yes, it works. But I don't understand why it's has been added in 2.7.1FreeGor

1 Answers

0
votes

Steve have you added

App provides Voice over IP services required background modes in Capabilities

Or you can add in to directly in Info.plist