网络电话pjsip Getting Started: Building for Apple iPhone, iPad and iPod Touch
2014-01-02 18:21
971 查看
技术支持留言:Http://www.lcpower.cn
Getting Started: Building for Apple iPhone, iPad and iPod Touch ¶
Getting Started
Preparation
Get the source code
Disk Space Requirements
Build Preparation
Build for Desktop
Windows
Linux
MacOS X
Python
Build for Mobile
iOS: Apple iPhone, iPad, and iPod Touch
Android
BlackBerry 10 (BB10)
Windows Mobile
Windows Phone 8
Symbian...
Build for Other
Next: Using the libraries
Running pjsip Applications
Building Application using PJSIP with GNU Tools
Video User's Guide (2.0 onwards)
See Also
Installing OpenSSL on Windows
Using Subversion
Visual Studio Build Configurations
Using Eclipse with PJSIP
S60 3rd Edition devices
Features
Requirements
Build Preparation
Building PJSIP
Simulator
OpenSSL Suport
Common problems
Unable to accept incoming call in background mode (iOS4)
Audio session management issue (iOS7)
Audio issue (no audio) (iOS7)
Supporting multiple architectures (armv6, armv7, armv7s, and so on)
Unable to support Bluetooth input
Problem with interruption (by a phone call or an alarm), headset plug/unplug, or Bluetooth input
Sound not working in the simulator
List of Issues
Other iPhone Projects
Apple iOS target is supported by PJSIP version 1.7 and later.
Features ¶
Some of the features of the iPhone port:
it has a native CoreAudio based audio device, which supports the following features:
the built-in/device's echo canceller
output volume setting
change input route to bluetooth input
change output route
input latency setting
output latency setting
supports for the built-in iLBC codec
Note: video (from 2.x) is not yet supported on iOS.
Requirements ¶
iOS SDK, part of Xcode. Apple iPad is supported starting with iPhone SDK 3.2 onwards.
Command Line Tools for Xcode: download fromApple Developer Downloads then install.
Build Preparation ¶
Get the source code, if you haven't already.
Set your
config_site.h to the following: #define PJ_CONFIG_IPHONE 1
#include <pj/config_site_sample.h>
This will activate iPhone specific settings in the config_site_sample.h.
Building PJSIP ¶
Just run:
$ cd /path/to/your/pjsip/dir
$ ./configure-iphone
$ make dep && make clean && make
For iPhone 5, use armv7s architecture:
$ cd /path/to/your/pjsip/dir
$ ARCH='-arch armv7s' ./configure-iphone
$ make dep && make clean && make
Open ipjsua.xcodeproj using Xcode in
pjproject/pjsip-apps/src/pjsua/ios and build the project. You will see telnet instructions on the device's screen. Telnet to this address to operate the application. SeePJSUA
CLI Manual for commands available. (For release 2.1 and below, ipjsua is located inpjproject/pjsip-apps/src/ipjsua
and does not have CLI telnet feature).
Notes:
the ./configure-iphone is a wrapper that calls the standard./configure script with settings suitable for iPhone target.
the latest iPhone SDK version will be selected by default. You may change this by settingIPHONESDK environment variable to the desired SDK path. For ipjsua, select Project-Edit Project Settings-Base SDK and Targets-ipjsua-Get
Info-Base SDK to change the SDK version.
you may pass standard ./configure options to this script too.
for more info, run ./configure-iphone --help
other customizations are similar to what is explained in
Building with GNU page.
Simulator ¶
To configure the build system for the iPhone simulator:
export DEVPATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
ARCH="-arch i386" CFLAGS="-O2 -m32 -miphoneos-version-min=4.0" LDFLAGS="-O2 -m32 -miphoneos-version-min=4.0" ./configure-iphone
make dep && make clean && make
Note that the exact paths may vary according to your SDK version.
OpenSSL Suport ¶
Follow the instructions below to enable TLS transport by using OpenSSL:
Build and install OpenSSL-1.0.0 for iPhone by following
these instructions or OpenSSL-0.9.8o with
these instructions.
Specify OpenSSL location when running configure-iphone, for example (with Bash):export OPENSSL=${HOME}/openssl/openssl_arm
export CFLAGS="-O2 -Wno-unused-label -I${OPENSSL}/include"
export LDFLAGS="-L${OPENSSL}/lib"
./configure-iphone
And check that OpenSSL is detected by the configure script:
...
checking for OpenSSL installations..
checking openssl/ssl.h usability... yes
checking openssl/ssl.h presence... no
aconfigure: WARNING: openssl/ssl.h: accepted by the compiler, rejected by the preprocessor!
aconfigure: WARNING: openssl/ssl.h: proceeding with the compiler's result
checking for openssl/ssl.h... yes
checking for ERR_load_BIO_strings in -lcrypto... yes
checking for SSL_library_init in -lssl... yes
OpenSSL library found, SSL support enabled
...
Build the libraries: make dep && make
In XCode project setting of your application (for example, ipjsua), addlibssl.a and
libcrypto.a from OpenSSL ARM directory to the project's Libraries:
In Group & Files pane, expand ipjsua, then right clickLibraries, and select
Add -> Existing Files....
Find libssl.a and libcrypto.a from OpenSSL ARM directory (for example,${HOME}/openssl/openssl_arm) and add them to the project.
Build the app
Common problems ¶
Unable to accept incoming call in background mode (iOS4) ¶
If while in the background, ipjsua (or your application) is unable to detect if there is an incoming call and display the local notification:
Note that background feature only works with TCP.
Make sure that voip is included in the required background modes (UIBackgroundModes) in the application’s Info.plist file.
Make sure that the TCP socket is successfully wrapped with CFReadStreamRef (check if there is a message: "Failed to configure TCP transport for VoIP usage").
Check whether you can accept the incoming call by bringing the app to the foreground. If yes, make sure that the incoming call request comes from the wrapped TCP socket (check the log for the INVITE request).
Note: these steps do not troubleshoot audio problems.
Audio session management issue (iOS7) ¶
Since the deprecation of C-interface Audio Session API in iOS 7 SDK, PJSIP now uses AVAudioSession to set audio session category (toPlayAndRecord?) and activate/deactivate audio session. Application will need to do its
own audio session management to handle input/output route and notifications (interruption, media server reset, etc). Please refer toApple's
official doc on Audio Session Programming Guide and our ticket#1697.
Audio issue (no audio) (iOS7) ¶
There are a few reports that the audio is not working on iOS 7 (so far it's only reported to happen in iPhone 5) after getting the following error:
iPhone mediaserverd[45] <Error>: 10:53:59.986 ERROR: [0x240b000] 740: _vp: initialize hw input: fs mismatched! REF=0.000000Hz, MIC=44100.000000Hz
iPhone mediaserverd[45] <Error>: Resampler2 bad sample rate(s) : 0.00 16000.00
One solution is to set the sound device's clock rate to 44100 Hz as to avoid resampling.
Supporting multiple architectures (armv6, armv7, armv7s, and so on) ¶
You need to compile separately for each architecture. If your iPhone SDK hasllvm-gcc compiler (which is the supported compiler starting iOS SDK 5) orclang, then
you need to set ARCH environment variable to the desired architecture before runningconfigure-iphone, for example:
export ARCH = "-arch armv6"
Then you need to combine the resulting libraries using the
lipo command. For example:
lipo -arch armv6 lib/armv6/libpjlib.a -arch armv7 lib/armv7/libpjlib.a -create -output lib/libpjlib.a
Unable to support Bluetooth input ¶
Since Bluetooth input support is only available for iOS 3.1 or later, you need to specifically specify that your deployment target is iOS 3.1 or above. You can do this either inuser.mak:
export CFLAGS += -D__IPHONE_OS_VERSION_MIN_REQUIRED=30100
or in config_site.h:
#define __IPHONE_OS_VERSION_MIN_REQUIRED 30100
You need to recompile PJSIP after this.
Problem with interruption (by a phone call or an alarm), headset plug/unplug, or Bluetooth input ¶
For devices running iOS 4.0 or later, you need to enable your application to respond to remote-control events. This allows PJSIP to properly receive and process the above events. You can do this by adding the following code in your application:
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
For more details, please refer to Apple's doc on
Remote Control of Multimedia.
Sound not working in the simulator ¶
Go to System Preferences > Sound > Sound Effects and then uncheck and recheck "Play user interface sound effects". If it still doesn't work, you can try some other suggestionshere.
List of Issues ¶
#1113
iPhone: Echo cancellation may not work on iOS using SDK 4.x
#1115
iPhone: Long delay when calling AudioConverterNew() causing timeout in acquiring pjsua lock (thanks Bogdan Krakowski the report)
#1130
Incoming TCP connection on iPhone iOS4 BG mode would fail over and over with EAGAIN error (thanks Bogdan Krakowski for the report)
#1172
Crash in coreaudio_dev (iPhone OS) when there is no call during a GSM interruption
#1174
Fix crash in coreaudio_dev's interruptionListener (iPhone OS) and support for multiple interrupted streams (thanks to Seth Hinze for the patch)
#1194
iPhone: Fix problems with echo cancellation and Bluetooth input (SDK 4.x)
#1225
iPhone: UDP socket send error after waking up from background mode (thanks Joe Meade for the report)
#1226
iPhone (info only): No audio in calls if app is woken up from background mode without network connectivity (thanks Joe Meade for the report)
#1228
Long delay in iPhone initialization (thanks Guy Zelkha for the report)
#1231
Crash in iPhone iOS when trying to make a call after the application is left running for days (thanks Alejandro Orellana for the report)
#1245
Assertion may be raised if iPhone app woken up to perform registration and the server is down (thanks Alejandro Orellana for the report)
#1246
Use CFHost API for pj_getaddrinfo() on iPhone OS
#1324
Build correctness on non-video platforms (Symbian, iPhone, Windows Mobile)
#1335
Fixes assertion when interruptionListener is called from an unregistered thread on iPhone OS (thanks to Ilya Kalinin for the patch)
#1342
Disable local host resolution on iPhone OS
#1597
Handle socket failure in STUN resolution when coming back from iPhone/iOS background mode
Other iPhone Projects ¶
Also have a look at these PJSIP iPhone ports by pjsip users:
Siphon Project by Samuel Vinson
iPhone Audio Driver byVoalté
TabikPhone, an adaptation of Sipphone code from V-Net Corp
Attachments
Getting Started: Building for Apple iPhone, iPad and iPod Touch ¶
Getting Started
Preparation
Get the source code
Disk Space Requirements
Build Preparation
Build for Desktop
Windows
Linux
MacOS X
Python
Build for Mobile
iOS: Apple iPhone, iPad, and iPod Touch
Android
BlackBerry 10 (BB10)
Windows Mobile
Windows Phone 8
Symbian...
Build for Other
Next: Using the libraries
Running pjsip Applications
Building Application using PJSIP with GNU Tools
Video User's Guide (2.0 onwards)
See Also
Installing OpenSSL on Windows
Using Subversion
Visual Studio Build Configurations
Using Eclipse with PJSIP
S60 3rd Edition devices
Features
Requirements
Build Preparation
Building PJSIP
Simulator
OpenSSL Suport
Common problems
Unable to accept incoming call in background mode (iOS4)
Audio session management issue (iOS7)
Audio issue (no audio) (iOS7)
Supporting multiple architectures (armv6, armv7, armv7s, and so on)
Unable to support Bluetooth input
Problem with interruption (by a phone call or an alarm), headset plug/unplug, or Bluetooth input
Sound not working in the simulator
List of Issues
Other iPhone Projects
Apple iOS target is supported by PJSIP version 1.7 and later.
Features ¶
Some of the features of the iPhone port:
it has a native CoreAudio based audio device, which supports the following features:
the built-in/device's echo canceller
output volume setting
change input route to bluetooth input
change output route
input latency setting
output latency setting
supports for the built-in iLBC codec
Note: video (from 2.x) is not yet supported on iOS.
Requirements ¶
iOS SDK, part of Xcode. Apple iPad is supported starting with iPhone SDK 3.2 onwards.
Command Line Tools for Xcode: download fromApple Developer Downloads then install.
Build Preparation ¶
Get the source code, if you haven't already.
Set your
config_site.h to the following: #define PJ_CONFIG_IPHONE 1
#include <pj/config_site_sample.h>
This will activate iPhone specific settings in the config_site_sample.h.
Building PJSIP ¶
Just run:
$ cd /path/to/your/pjsip/dir
$ ./configure-iphone
$ make dep && make clean && make
For iPhone 5, use armv7s architecture:
$ cd /path/to/your/pjsip/dir
$ ARCH='-arch armv7s' ./configure-iphone
$ make dep && make clean && make
Open ipjsua.xcodeproj using Xcode in
pjproject/pjsip-apps/src/pjsua/ios and build the project. You will see telnet instructions on the device's screen. Telnet to this address to operate the application. SeePJSUA
CLI Manual for commands available. (For release 2.1 and below, ipjsua is located inpjproject/pjsip-apps/src/ipjsua
and does not have CLI telnet feature).
Notes:
the ./configure-iphone is a wrapper that calls the standard./configure script with settings suitable for iPhone target.
the latest iPhone SDK version will be selected by default. You may change this by settingIPHONESDK environment variable to the desired SDK path. For ipjsua, select Project-Edit Project Settings-Base SDK and Targets-ipjsua-Get
Info-Base SDK to change the SDK version.
you may pass standard ./configure options to this script too.
for more info, run ./configure-iphone --help
other customizations are similar to what is explained in
Building with GNU page.
Simulator ¶
To configure the build system for the iPhone simulator:
export DEVPATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
ARCH="-arch i386" CFLAGS="-O2 -m32 -miphoneos-version-min=4.0" LDFLAGS="-O2 -m32 -miphoneos-version-min=4.0" ./configure-iphone
make dep && make clean && make
Note that the exact paths may vary according to your SDK version.
OpenSSL Suport ¶
Follow the instructions below to enable TLS transport by using OpenSSL:
Build and install OpenSSL-1.0.0 for iPhone by following
these instructions or OpenSSL-0.9.8o with
these instructions.
Specify OpenSSL location when running configure-iphone, for example (with Bash):export OPENSSL=${HOME}/openssl/openssl_arm
export CFLAGS="-O2 -Wno-unused-label -I${OPENSSL}/include"
export LDFLAGS="-L${OPENSSL}/lib"
./configure-iphone
And check that OpenSSL is detected by the configure script:
...
checking for OpenSSL installations..
checking openssl/ssl.h usability... yes
checking openssl/ssl.h presence... no
aconfigure: WARNING: openssl/ssl.h: accepted by the compiler, rejected by the preprocessor!
aconfigure: WARNING: openssl/ssl.h: proceeding with the compiler's result
checking for openssl/ssl.h... yes
checking for ERR_load_BIO_strings in -lcrypto... yes
checking for SSL_library_init in -lssl... yes
OpenSSL library found, SSL support enabled
...
Build the libraries: make dep && make
In XCode project setting of your application (for example, ipjsua), addlibssl.a and
libcrypto.a from OpenSSL ARM directory to the project's Libraries:
In Group & Files pane, expand ipjsua, then right clickLibraries, and select
Add -> Existing Files....
Find libssl.a and libcrypto.a from OpenSSL ARM directory (for example,${HOME}/openssl/openssl_arm) and add them to the project.
Build the app
Common problems ¶
Unable to accept incoming call in background mode (iOS4) ¶
If while in the background, ipjsua (or your application) is unable to detect if there is an incoming call and display the local notification:
Note that background feature only works with TCP.
Make sure that voip is included in the required background modes (UIBackgroundModes) in the application’s Info.plist file.
Make sure that the TCP socket is successfully wrapped with CFReadStreamRef (check if there is a message: "Failed to configure TCP transport for VoIP usage").
Check whether you can accept the incoming call by bringing the app to the foreground. If yes, make sure that the incoming call request comes from the wrapped TCP socket (check the log for the INVITE request).
Note: these steps do not troubleshoot audio problems.
Audio session management issue (iOS7) ¶
Since the deprecation of C-interface Audio Session API in iOS 7 SDK, PJSIP now uses AVAudioSession to set audio session category (toPlayAndRecord?) and activate/deactivate audio session. Application will need to do its
own audio session management to handle input/output route and notifications (interruption, media server reset, etc). Please refer toApple's
official doc on Audio Session Programming Guide and our ticket#1697.
Audio issue (no audio) (iOS7) ¶
There are a few reports that the audio is not working on iOS 7 (so far it's only reported to happen in iPhone 5) after getting the following error:
iPhone mediaserverd[45] <Error>: 10:53:59.986 ERROR: [0x240b000] 740: _vp: initialize hw input: fs mismatched! REF=0.000000Hz, MIC=44100.000000Hz
iPhone mediaserverd[45] <Error>: Resampler2 bad sample rate(s) : 0.00 16000.00
One solution is to set the sound device's clock rate to 44100 Hz as to avoid resampling.
Supporting multiple architectures (armv6, armv7, armv7s, and so on) ¶
You need to compile separately for each architecture. If your iPhone SDK hasllvm-gcc compiler (which is the supported compiler starting iOS SDK 5) orclang, then
you need to set ARCH environment variable to the desired architecture before runningconfigure-iphone, for example:
export ARCH = "-arch armv6"
Then you need to combine the resulting libraries using the
lipo command. For example:
lipo -arch armv6 lib/armv6/libpjlib.a -arch armv7 lib/armv7/libpjlib.a -create -output lib/libpjlib.a
Unable to support Bluetooth input ¶
Since Bluetooth input support is only available for iOS 3.1 or later, you need to specifically specify that your deployment target is iOS 3.1 or above. You can do this either inuser.mak:
export CFLAGS += -D__IPHONE_OS_VERSION_MIN_REQUIRED=30100
or in config_site.h:
#define __IPHONE_OS_VERSION_MIN_REQUIRED 30100
You need to recompile PJSIP after this.
Problem with interruption (by a phone call or an alarm), headset plug/unplug, or Bluetooth input ¶
For devices running iOS 4.0 or later, you need to enable your application to respond to remote-control events. This allows PJSIP to properly receive and process the above events. You can do this by adding the following code in your application:
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
For more details, please refer to Apple's doc on
Remote Control of Multimedia.
Sound not working in the simulator ¶
Go to System Preferences > Sound > Sound Effects and then uncheck and recheck "Play user interface sound effects". If it still doesn't work, you can try some other suggestionshere.
List of Issues ¶
#1113
iPhone: Echo cancellation may not work on iOS using SDK 4.x
#1115
iPhone: Long delay when calling AudioConverterNew() causing timeout in acquiring pjsua lock (thanks Bogdan Krakowski the report)
#1130
Incoming TCP connection on iPhone iOS4 BG mode would fail over and over with EAGAIN error (thanks Bogdan Krakowski for the report)
#1172
Crash in coreaudio_dev (iPhone OS) when there is no call during a GSM interruption
#1174
Fix crash in coreaudio_dev's interruptionListener (iPhone OS) and support for multiple interrupted streams (thanks to Seth Hinze for the patch)
#1194
iPhone: Fix problems with echo cancellation and Bluetooth input (SDK 4.x)
#1225
iPhone: UDP socket send error after waking up from background mode (thanks Joe Meade for the report)
#1226
iPhone (info only): No audio in calls if app is woken up from background mode without network connectivity (thanks Joe Meade for the report)
#1228
Long delay in iPhone initialization (thanks Guy Zelkha for the report)
#1231
Crash in iPhone iOS when trying to make a call after the application is left running for days (thanks Alejandro Orellana for the report)
#1245
Assertion may be raised if iPhone app woken up to perform registration and the server is down (thanks Alejandro Orellana for the report)
#1246
Use CFHost API for pj_getaddrinfo() on iPhone OS
#1324
Build correctness on non-video platforms (Symbian, iPhone, Windows Mobile)
#1335
Fixes assertion when interruptionListener is called from an unregistered thread on iPhone OS (thanks to Ilya Kalinin for the patch)
#1342
Disable local host resolution on iPhone OS
#1597
Handle socket failure in STUN resolution when coming back from iPhone/iOS background mode
Other iPhone Projects ¶
Also have a look at these PJSIP iPhone ports by pjsip users:
Siphon Project by Samuel Vinson
iPhone Audio Driver byVoalté
TabikPhone, an adaptation of Sipphone code from V-Net Corp
Attachments
相关文章推荐
- 网络电话pjsip Getting Started: Building for Apple iPhone, iPad and iPod Touch
- italki Messenger for iPhone 3GS, iPhone 4, iPhone 4S, iPhone 5, iPod touch (3rd generation), iPod touch (4th generation), iPod touch (5th generation) and iPad on the iTunes App Store
- Professional iPhone and iPod touch Programming: Building Applications for Mobile Safari
- 电子书下载:iOS Forensic Analysis: for iPhone, iPad and iPod Touch
- Flash Professional CS5 will enable you to build applications for iPhone and iPod touch using ActionScript 3.
- AutoCAD WS for iPhone, iPod toch, and iPad
- C++ Logging and building Boost for iPhone/iPad 3.2 and MacOSX
- mmsplayer for ios 支持iphone ,ipad,ipod touch 版本已经完成。
- Apple发布适用于iPhone,iPad和iPod Touch的iOS 12 Beta 10和Public Beta 8
- mmsplayer for ios 版本已经完成。支持iphone,ipod touch,ipad
- mmsplayer for ios 版本已经完成。支持iphone,ipod touch,ipad
- mmsplayer for ios 版本已经完成。支持iphone,ipod touch,ipad
- mmsplayer for ios 版本已经完成。支持iphone,ipod touch,ipad
- How to find crash logs for iPhone, iPod Touch or iPad applications
- [转]iAP Cracker for iPhone/iPod/iPad
- iAP Cracker for iPhone/iPod/iPad
- 每日分享 - 检测iPhone/iPod Touch/iPad设备类型
- Best Practices for Creating and Deploying HTTP Live Streaming Media for the iPhone and iPad
- Apple iPhone和iPod Touch Foundation参数内存破坏漏洞
- ELM327 scanners work on iPhone, iPad and iPod