liblinphone  3.6.1
Functions

Functions

void linphone_core_start_dtmf_stream (LinphoneCore *lc)
 
void linphone_core_stop_dtmf_stream (LinphoneCore *lc)
 

Detailed Description


Multitasking
Liblinphone for IOS natively supports multitasking assuming application follows multitasking guides provided by Apple. First step is to declare application as multitasked. It means adding background mode for both audio and voip to Info.plist file.

<key>UIBackgroundModes</key>
<array>
<string>voip</string>
<string>audio</string>
</array>


Networking

Sound cards
Since IOS 5.0, liblinphone supports 2 sound cards. AU: Audio Unit Receiver based on IO units for voice calls plus AQ: Audio Queue Device dedicated to rings. Here under the recommended settings (I.E default one)

linphone_core_set_playback_device(lc, "AU: Audio Unit Receiver");
linphone_core_set_ringer_device(lc, "AQ: Audio Queue Device");
linphone_core_set_capture_device(lc, "AU: Audio Unit Receiver");

GSM call interaction
To ensure gentle interaction with GSM calls, it is recommended to register an AudioSession delegate. This allows the application to be notified when its audio session is interrupted/resumed (presumably by a GSM call).

// declare a class handling the AVAudioSessionDelegate protocol
@interface MyClass : NSObject <AVAudioSessionDelegate> { [...] }
// implement 2 methods : here's an example implementation
-(void) beginInterruption {
ms_message("Sound interruption detected!");
if (c) {
linphone_core_pause_call(theLinphoneCore, c);
}
}
-(void) endInterruption {
ms_message("Sound interruption ended!");
const MSList* c = linphone_core_get_calls(theLinphoneCore);
if (c) {
ms_message("Auto resuming call");
linphone_core_resume_call(theLinphoneCore, (LinphoneCall*) c->data);
}
}
See also
http://developer.apple.com/library/ios/#documentation/AVFoundation/Reference/AVAudioSessionDelegate_ProtocolReference/Reference/Reference.html


Declare an instance of your class as AudioSession's delegate :

[audioSession setDelegate:myClassInstance];
See also
http://developer.apple.com/library/ios/#documentation/AVFoundation/Reference/AVAudioSession_ClassReference/Reference/Reference.html

Video
Since 3.5 video support has been added to liblinphone for IOS. It requires the application to provide liblinphone with pointers to IOS's views hosting video display and video previous.
These 2 UIView objects must be passed to the core using functions linphone_core_set_native_video_window_id() and linphone_core_set_native_preview_window_id(). here under speudo code:

UIView* display = [[UIView alloc] init];
UIView* preview = [[UIView alloc] init];
linphone_core_set_native_video_window_id(lc,(unsigned long)display);
linphone_core_set_native_preview_window_id(lc,(unsigned long)preview);


Screen rotations are also handled by liblinphone. 2 positions are currently supported, namely UIInterfaceOrientationPortrait and UIInterfaceOrientationLandscapeRight. Applications may invoke linphone_core_set_device_rotation() followed by linphone_core_update_call() to notify liblinphone of an orientation change. Here under a speudo code to handle orientation changes

-(void) configureOrientation:(UIInterfaceOrientation) oritentation {
int oldLinphoneOrientation = linphone_core_get_device_rotation(lc);
if (oritentation == UIInterfaceOrientationPortrait ) {
linphone_core_set_native_video_window_id(lc,(unsigned long)display-portrait);
linphone_core_set_native_preview_window_id(lc,(unsigned long)preview-portrait);
} else if (oritentation == UIInterfaceOrientationLandscapeRight ) {
linphone_core_set_native_video_window_id(lc,(unsigned long)display-landscape);
linphone_core_set_native_preview_window_id(lc,(unsigned long)preview-landscape);
}
if ((oldLinphoneOrientation != linphone_core_get_device_rotation(lc))
//Orientation has changed, must call update call
}
}

DTMF feebacks
Liblinphone provides functions to play dtmf to the local user. Usually this is used to play a sound when the user presses a digit, inside or outside of any call. On IOS, libLinphone relies on AudioUnits for interfacing with the audio system. Unfortunately the Audio Unit initialization is a quite long operation that may trigger a bad user experience if performed each time a DTMF is played, the sound being delayed half a second after the press. To solve this issue and thus insure real-time precision, liblinphone introduces 2 functions for preloading and unloading the underlying audio graph responsible for playing DTMFs.

For an application using function linphone_core_play_dtmf(), it is recommanded to call linphone_core_start_dtmf_stream() when entering in foreground and linphone_core_stop_dtmf_stream() upon entering background mode.

Function Documentation

◆ linphone_core_start_dtmf_stream()

void linphone_core_start_dtmf_stream ( LinphoneCore lc)

Special function to warm up dtmf feeback stream. linphone_core_stop_dtmf_stream must() be called before entering FG mode

◆ linphone_core_stop_dtmf_stream()

void linphone_core_stop_dtmf_stream ( LinphoneCore lc)

Special function to stop dtmf feed back function. Must be called before entering BG mode

linphone_core_set_native_video_window_id
void linphone_core_set_native_video_window_id(LinphoneCore *lc, unsigned long id)
Definition: linphonecore.c:4652
linphone_core_set_device_rotation
void linphone_core_set_device_rotation(LinphoneCore *lc, int rotation)
Definition: linphonecore.c:4734
linphone_core_resume_call
int linphone_core_resume_call(LinphoneCore *lc, LinphoneCall *the_call)
Definition: linphonecore.c:3433
linphone_core_get_calls
const MSList * linphone_core_get_calls(LinphoneCore *lc)
Definition: linphonecore.c:3317
linphone_core_set_network_reachable
void linphone_core_set_network_reachable(LinphoneCore *lc, bool_t isReachable)
Definition: linphonecore.c:5405
linphone_proxy_config_is_registered
bool_t linphone_proxy_config_is_registered(const LinphoneProxyConfig *obj)
Definition: proxy.c:94
linphone_core_set_playback_device
int linphone_core_set_playback_device(LinphoneCore *lc, const char *devid)
Definition: linphonecore.c:3811
linphone_core_set_ringer_device
int linphone_core_set_ringer_device(LinphoneCore *lc, const char *devid)
Definition: linphonecore.c:3796
linphone_core_set_capture_device
int linphone_core_set_capture_device(LinphoneCore *lc, const char *devid)
Definition: linphonecore.c:3826
linphone_core_iterate
void linphone_core_iterate(LinphoneCore *lc)
Definition: linphonecore.c:2060
linphone_core_set_native_preview_window_id
void linphone_core_set_native_preview_window_id(LinphoneCore *lc, unsigned long id)
Definition: linphonecore.c:4684
linphone_core_get_device_rotation
int linphone_core_get_device_rotation(LinphoneCore *lc)
Definition: linphonecore.c:4721
linphone_core_get_current_call
LinphoneCall * linphone_core_get_current_call(const LinphoneCore *lc)
Definition: linphonecore.c:3336
linphone_core_update_call
int linphone_core_update_call(LinphoneCore *lc, LinphoneCall *call, const LinphoneCallParams *params)
Definition: linphonecore.c:2841
LinphoneCall
struct _LinphoneCall LinphoneCall
Definition: linphonecore.h:267
linphone_core_pause_call
int linphone_core_pause_call(LinphoneCore *lc, LinphoneCall *call)
Definition: linphonecore.c:3346
linphone_core_refresh_registers
void linphone_core_refresh_registers(LinphoneCore *lc)
Definition: linphonecore.c:5379