Code Monkey home page Code Monkey logo

pjsip-android's Introduction

PJSIP Android

NOTICE! This project is experimental, so don't use it in production! No support is provided and only bug fixes and pull requests can be accepted.

What you need to work with this library:

  • An android device with Android API 23
  • A PBX (E.g. VoiSmart Orchestra NG or FreeSWITCH, which is open). I'm not going to enter in the detail of how to properly configure your PBX, because that's a different topic and there are excellent tutorials out there.

Architecture

Architecture

This project wraps the standard PJSUA2 bindings in a background service and completely hides SIP from the rest of the application, to be able to have VoIP capabilities at a high level of abstraction. You can talk to the service using static methods and you will receive broadcast intents as a response. To talk to the service, refer to SipServiceCommand static methods. To receive events from the service, extend BroadcastEventReceiver. To see which events are emitted by the service, refer to BroadcastEventEmitter. All the commands that you will send to the service will get executed in the background and without blocking your main thread. Once the service has done the requested job or operation, it will notify you with a broadcast intent. So, you don't risk blocking your UI thread in any way.

Native PJSIP library for Android is compiled using PJSIP Android Builder

State of the art

What is tested and working

  • Single account
  • Make a single call
  • In-Call operations
    • mute
    • unmute
    • hold
    • un-hold
    • blind transfer
    • Attended call transfer
    • send DTMF (RFC 2833)
  • Accept an incoming call
  • Answer with video an incoming call
  • Decline an incoming call
  • Get/Set codec priorities
  • Hang up all active calls
  • Hold all active calls
  • Hold/Decline sip call when incoming/outgoing gsm call
  • Video support
    • switch camera
    • mute/unmute video
    • video preview
  • Use of a fixed SIP Call-ID Header. Refer to this for more details
  • Get Call Statistics on call disconnected
  • Sip Credential encryption on device. Refer to Android Jetpack Security library for more details
  • Call Reconnection: useful after a network disconnection, it will try to reconnect the call with new ip/port
  • TLS and SRTP support
    • with server certificate verification option (enabled via SipServiceCommand#setVerifySipServerCert but to make it work, it is necessary to add a ca-bundle.crt file in the sip./sipservice/src/main/assets/ directory; without that the verification will not be enabled)
  • Silent Calls

What is missing (contributions are welcome)

  • Multiple calls support
    • be able to handle other calls coming in while you have an active call
  • Conference calls
  • Complete multiple accounts support
  • Respond to a call and play a sound file
  • Support for In-Call RTCP signaling to get call statistics
  • Other things which I'm not aware at the moment...

Used Libraries versions

  • PJSIP: 2.12.1
  • OpenSSL: 1.1.1k
  • OpenH264: 2.1.0
  • Opus: 1.3.1
  • bcg729: 1.1.1

Logging

This library ships with a default logger which logs with the default Android Log class and a default DEBUG loglevel. You can customize such behaviour by either:

  1. Setting a specific loglevel (see Logger#setLogLevel)

  2. Setting your own LoggerDelegate. E.g.:

    class SipServiceLogger extends Logger.LoggerDelegate {
        @Override
        public void error(String tag, String message) {
            Timber.tag(tag).e(message);
        }
    
        @Override
        public void error(String tag, String message, Throwable exception) {
            Timber.tag(tag).e(exception, message);
        }
    
        @Override
        public void debug(String tag, String message) {
            Timber.tag(tag).d(message);
        }
    
        @Override
        public void info(String tag, String message) {
            Timber.tag(tag).i(message);
        }
    }

    Timber can be configured as you wish, to log everything or just in debug mode, or log to anywhere.

SIP Logging

To allow see PjSip logs you need to set SipServiceUtils.ENABLE_SIP_LOGGING to true which will log all pjsip logs while in debug mode.

Recompile native libraries

Refer to PJSIP Android Builder

pjsip-android's People

Contributors

aenongit avatar alexbbb avatar gotev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pjsip-android's Issues

Error while making outgoing call

I have this Error when make call after done register

SipService: Error while making outgoing call
java.lang.NullPointerException: Attempt to invoke virtual method 'net.gotev.sipservice.SipCall net.gotev.sipservice.SipAccount.addOutgoingCall(java.lang.String)' on a null object reference
at net.gotev.sipservice.SipService.handleMakeCall(SipService.java:463)
at net.gotev.sipservice.SipService.access$1100(SipService.java:67)
at net.gotev.sipservice.SipService$2.run(SipService.java:136)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.os.HandlerThread.run(HandlerThread.java:61)

"Not Acceptable here" Error while accepting the call

Error Logs -
pjsua_call_answer2(id, param.p_opt, prm.statusCode, param.p_reason, param.p_msg_data)
org.pjsip.pjsua2.app W/System.err: Code: 170488
org.pjsip.pjsua2.app W/System.err: Description: Not Acceptable Here
org.pjsip.pjsua2.app W/System.err: Location: ../src/pjsua2/call.cpp:498

when at other end i am going to accept it.

Registration error - PJSIP_SC_SERVICE_UNAVAILABLE

Good morning, I'm trying to use your library.
I am using the demo Main Activity.
When i try to register to sip service I always get error on registration.
I am trying register to an service in other ways and it works.
My configuration parametrs are:

                mSipAccount.setHost("212.150.158.100")
                .setPort(5060)
                .setTcpTransport(true)
                .setUsername("5555600")
                .setPassword("5555600")
                .setRealm("212.150.158.100");

what am I doing wrong? is It a library problem?

I take all informations for the registration here:
http://www.pbxme.com/trunktest.asp

Fatal signal 6 (SIGABRT) at 0x000046bb (code=-6), thread 18107

JNI WARNING: NewStringUTF input is not valid Modified UTF-8: illegal continuation byte 0xed
1 W/dalvikvm: string: '2000t��h���i���h���i�p)c,��i�p)c̩�i8'
W/dalvikvm: in Lorg/pjsip/pjsua2/pjsua2JNI;.OnInstantMessageParam_msgBody_get:(JLorg/pjsip/pjsua2/OnInstantMessageParam;)Ljava/lang/String; (NewStringUTF)

request timeout,please help me...

please help me...i all way request timeout with Asterisk server via UDP...and server log "wrong password"...asterisk retransmission timeout reached on transmission

Call getting disconnected immediately after makeCall is successfull

On calling makeCall() on SipCall, the status shows "callStateCode: PJSIP_INV_STATE_CALLING" but after that within 2 secs, the callStateCode turns to PJSIP_INV_STATE_DISCONNECTED.
My account uri generated is so: sip:<_username>
I also tried to manually generate the uri as: sip<_username>@<server_domain>

What config am I missing? Why is the call getting disconnected immediately?

Plugin with id 'com.github.dcendents.android-maven' not found.

What's the recommended way to add the sipservice to an existing Android Studio project?

I tried to add it as a module in Android Studio, but this result in many errors regarding the 'sipservice/build.gradle' file. For example:
Plugin with id 'com.github.dcendents.android-maven' not found.

x86 has text relocations

i can't run pjsip-android on android 6, error type: x86 has text relocations

can some one help me?

Crach on x86 on start. Error libpjsua2.so: has text relocations

E/linker: /data/app/ru.naumen.naumenphone-1/lib/x86/libpjsua2.so: has text relocations
D/SIP Manager: UnsatisfiedLinkError: dlopen failed: /data/app/ru.mycompany.mycompany-1/lib/x86/libpjsua2.so: has text relocations
E/art: No implementation found for void org.pjsip.pjsua2.pjsua2JNI.swig_module_init() (tried Java_org_pjsip_pjsua2_pjsua2JNI_swig_1module_1init and Java_org_pjsip_pjsua2_pjsua2JNI_swig_1module_1init__)
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: ru.naumen.naumenphone, PID: 3922
java.lang.UnsatisfiedLinkError: No implementation found for void org.pjsip.pjsua2.pjsua2JNI.swig_module_init() (tried Java_org_pjsip_pjsua2_pjsua2JNI_swig_1module_1init and Java_org_pjsip_pjsua2_pjsua2JNI_swig_1module_1init__)
at org.pjsip.pjsua2.pjsua2JNI.swig_module_init(Native Method)
at org.pjsip.pjsua2.pjsua2JNI.(pjsua2JNI.java:2601)
at org.pjsip.pjsua2.pjsua2JNI.new_Endpoint(Native Method)
at org.pjsip.pjsua2.Endpoint.(Endpoint.java:0)

Disable multiple outgoing calls

It it possible to make multiple outgoing calls. This issue should be addressed even if the likelihood of the event is very low.

Some Fixes

  • Fix - Crash when commas are returned in registration status callback
  • Fix - Call not being propagated after ringtone started

Need Video Support Demo On Android

I also install this site https://trac.pjsip.org/repos/wiki/Getting-Started/Android
I'm using PJSIP2.7.2, Openh264 has also been compiled
I have not compiled OpenSSL, I have just compiled "libpjsua2.so" & "libopenh264.so")
run Pjsua2 app has no video

Do not know whether or not to modify the pjsua2 app code to video calls, according to the official network compilation method does not come out, the trouble God to a latest version of pjsip compiled to support video calls Android platform code, my email [email protected], very grateful

How do I configure pjsip to use a certain stun server?

Currently I can register my sip service with my sip provider but can not make a call. The call state changes immediately from PJSIP_INV_STATE_CALLING to PJSIP_INV_STATE_DISCONNECTED. My guess is that I need to make use of the providers stun server to establish a proper connection. How do I do that?

Runtime CAMERA permission?

Hi

My problem is with runtime camera permisson. No matter if I grant the permission, video always fails on

vidDevManager().setCaptureDevice
However, next app launch everything works.

Also, if I try catch it and restart the library it works

(since permission is now granted)

My hypothesis is that the library predates runtime permissions and caches something on startup.

Have you encountered this?

Thanks

Register account error NullPointException null string

Hello,
I was trying to run the demo app but unfortunatelly I was unable to connect to my sip server.
I have also tried with the data provided in demo app and I have also received the same NullPointException (it comes from the pjsip library also application does not crush)

  mSipAccount.setHost("192.168.1.154")
                .setPort(5060)
                .setTcpTransport(true)
                .setUsername("200")
                .setPassword("password200")
                .setRealm("devel.it");

04-20 14:50:42.682 12664-13179/net.gotev.sipservicedemo E/SipService: Error while adding sip:[email protected]
java.lang.NullPointerException: null string
at org.pjsip.pjsua2.pjsua2JNI.AccountSipConfig_contactUriParams_set(Native Method)
at org.pjsip.pjsua2.AccountSipConfig.setContactUriParams(AccountSipConfig.java:73)
at net.gotev.sipservice.SipAccountData.getAccountConfig(SipAccountData.java:194)
at net.gotev.sipservice.SipAccount.create(SipAccount.java:39)
at net.gotev.sipservice.SipService.addAccount(SipService.java:892)
at net.gotev.sipservice.SipService.handleSetAccount(SipService.java:624)
at net.gotev.sipservice.SipService.access$700(SipService.java:86)
at net.gotev.sipservice.SipService$2.run(SipService.java:147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.os.HandlerThread.run(HandlerThread.java:61)

Error while trying to unhold Incoming call

E/SipCall: Error while trying to unhold call
java.lang.Exception: Title: pjsua_call_reinvite2(id, param.p_opt, param.p_msg_data)
Code: 70013
Description: Invalid operation (PJ_EINVALIDOP)
Location: ../src/pjsua2/call.cpp:515

    at org.pjsip.pjsua2.pjsua2JNI.Call_reinvite(Native Method)
    at org.pjsip.pjsua2.Call.reinvite(Call.java:123)
    at net.gotev.sipservice.SipCall.setHold(SipCall.java:313)
    at net.gotev.sipservice.SipCall.toggleHold(SipCall.java:324)
    at net.gotev.sipservice.SipService.handleToggleCallHold(SipService.java:318)
    at net.gotev.sipservice.SipService.access$2000(SipService.java:80)
    at net.gotev.sipservice.SipService$2.run(SipService.java:176)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.os.HandlerThread.run(HandlerThread.java:61)

please help me to fix this bug,How can i do?

libc: ../src/pj/os_core_unix.c:692: pj_thread_this: assertion "!"Calling pjlib from unknown/external thread. You must " "register external threads with pj_thread_register() " "before calling any pjlib functions."" failed

Any Sample

Hello Team,

Thanks for this code. I am confused, I am download this code and try to run but so many error like:

org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':sipservice'.
at org.gradle.configuration.project.LifecycleProjectEvaluator.addConfigurationFailure(LifecycleProjectEvaluator.java:94)
at org.gradle.configuration.project.LifecycleProjectEvaluator.doConfigure(LifecycleProjectEvaluator.java:72)
at org.gradle.configuration.project.LifecycleProjectEvaluator.access$000(LifecycleProjectEvaluator.java:33)
at org.gradle.configuration.project.LifecycleProjectEvaluator$1.execute(LifecycleProjectEvaluator.java:53)
at org.gradle.configuration.project.LifecycleProjectEvaluator$1.execute(LifecycleProjectEvaluator.java:50)
at org.gradle.internal.Transformers$4.transform(Transformers.java:169)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:106)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:61)
at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:50)
at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:628)
at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:129)
at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:35)
at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:62)
at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:38)
at org.gradle.initialization.DefaultGradleLauncher$1.execute(DefaultGradleLauncher.java:161)
at org.gradle.initialization.DefaultGradleLauncher$1.execute(DefaultGradleLauncher.java:158)
at org.gradle.internal.Transformers$4.transform(Transformers.java:169)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:106)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:56)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:158)
at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:119)
at org.gradle.initialization.DefaultGradleLauncher.getBuildAnalysis(DefaultGradleLauncher.java:107)
at org.gradle.launcher.exec.GradleBuildController.configure(GradleBuildController.java:79)
at org.gradle.tooling.internal.provider.runner.ClientProvidedBuildActionRunner.run(ClientProvidedBuildActionRunner.java:60)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.tooling.internal.provider.runner.RunAsBuildOperationBuildActionRunner$1.execute(RunAsBuildOperationBuildActionRunner.java:43)
at org.gradle.tooling.internal.provider.runner.RunAsBuildOperationBuildActionRunner$1.execute(RunAsBuildOperationBuildActionRunner.java:40)
at org.gradle.internal.Transformers$4.transform(Transformers.java:169)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:106)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:56)
at org.gradle.tooling.internal.provider.runner.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:40)
at org.gradle.tooling.internal.provider.runner.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:75)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:41)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:75)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:49)
at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:44)
at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:29)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:47)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
at org.gradle.util.Swapper.swap(Swapper.java:38)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.gradle.api.GradleScriptException: A problem occurred evaluating project ':sipservice'.
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:92)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl$2.run(DefaultScriptPluginFactory.java:176)
at org.gradle.configuration.ProjectScriptTarget.addConfiguration(ProjectScriptTarget.java:77)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:181)
at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:39)
at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:26)
at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:34)
at org.gradle.configuration.project.LifecycleProjectEvaluator.doConfigure(LifecycleProjectEvaluator.java:70)
... 66 more
Caused by: org.gradle.internal.metaobject.AbstractDynamicObject$CustomMessageMissingMethodException: Could not find method implementation() for arguments [directory 'libs'] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
at org.gradle.internal.metaobject.AbstractDynamicObject.methodMissingException(AbstractDynamicObject.java:182)
at org.gradle.internal.metaobject.ConfigureDelegate.invokeMethod(ConfigureDelegate.java:89)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeOnDelegationObjects(ClosureMetaClass.java:430)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:369)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1024)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:69)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
at build_9tm7w4gaftf08exwnodh0bw9r$_run_closure3.doCall(D:\CSipSimpleNewVersion\pjsip-android-master\pjsip-android-master\sipservice\build.gradle:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1024)
at groovy.lang.Closure.call(Closure.java:414)
at groovy.lang.Closure.call(Closure.java:430)
at org.gradle.api.internal.ClosureBackedAction.execute(ClosureBackedAction.java:70)
at org.gradle.util.ConfigureUtil.configureTarget(ConfigureUtil.java:160)
at org.gradle.util.ConfigureUtil.configure(ConfigureUtil.java:106)
at org.gradle.api.internal.project.DefaultProject.dependencies(DefaultProject.java:1002)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
at org.gradle.internal.metaobject.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:382)
at org.gradle.internal.metaobject.BeanDynamicObject.invokeMethod(BeanDynamicObject.java:170)
at org.gradle.internal.metaobject.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:96)
at org.gradle.internal.metaobject.MixInClosurePropertiesAsMethodsDynamicObject.invokeMethod(MixInClosurePropertiesAsMethodsDynamicObject.java:30)
at org.gradle.internal.metaobject.AbstractDynamicObject.invokeMethod(AbstractDynamicObject.java:163)
at org.gradle.groovy.scripts.BasicScript.methodMissing(BasicScript.java:83)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
at groovy.lang.MetaClassImpl.invokeMissingMethod(MetaClassImpl.java:941)
at groovy.lang.MetaClassImpl.invokePropertyOrMissing(MetaClassImpl.java:1264)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1217)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1024)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:69)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
at build_9tm7w4gaftf08exwnodh0bw9r.run(D:\CSipSimpleNewVersion\pjsip-android-master\pjsip-android-master\sipservice\build.gradle:35)
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:90)
... 73 more

Is there any sample or example available.
Awaiting.
Thanks,

when i use account.create the app crash

2018-12-14 16:17:24.595 4492-4643/com.hc.sipsample A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 4643 (Thread-5), pid 4492 (om.hc.sipsample)
2018-12-14 16:17:24.630 903-4633/? I/Camera2Client: Camera 1: Closed
2018-12-14 16:17:24.630 903-4633/? W/libutils.threads: Thread (this=0xe7146d9c): don't call join() from this Thread object's thread. It's a guaranteed deadlock!
2018-12-14 16:17:24.630 903-4633/? I/Camera2ClientBase: Closed Camera 1. Client was: com.hc.sipsample (PID 4492, UID 10232)
2018-12-14 16:17:24.630 910-1204/? D/NuPlayerDriver: reset(0xf34a7d90) at state 4
2018-12-14 16:17:24.630 910-1204/? D/NuPlayerDriver: notifyListener_l(0xf34a7d90), (8, 0, 0, -1), loop setting(0, 0)
2018-12-14 16:17:24.630 910-4604/? W/AMessage: failed to post message as target looper for handler 0 is gone.
2018-12-14 16:17:24.630 4649-4649/? I/crash_dump32: obtaining output fd from tombstoned, type: kDebuggerdTombstone
2018-12-14 16:17:24.630 910-4604/? D/NuPlayerDriver: notifyResetComplete(0xf34a7d90)
2018-12-14 16:17:24.631 910-6531/? D/NuPlayerDriver: reset(0xf1b42150) at state 4
2018-12-14 16:17:24.631 910-6531/? D/NuPlayerDriver: notifyListener_l(0xf1b42150), (8, 0, 0, -1), loop setting(0, 0)
2018-12-14 16:17:24.631 936-936/? I//system/bin/tombstoned: received crash request for pid 4492
2018-12-14 16:17:24.631 910-4606/? W/AMessage: failed to post message as target looper for handler 0 is gone.
2018-12-14 16:17:24.631 910-4606/? D/NuPlayerDriver: notifyResetComplete(0xf1b42150)
2018-12-14 16:17:24.632 910-20469/? D/NuPlayerDriver: reset(0xf1b42310) at state 4
2018-12-14 16:17:24.632 910-20469/? D/NuPlayerDriver: notifyListener_l(0xf1b42310), (8, 0, 0, -1), loop setting(0, 0)
2018-12-14 16:17:24.632 4649-4649/? I/crash_dump32: performing dump of process 4492 (target tid = 4643)
2018-12-14 16:17:24.632 910-4608/? W/AMessage: failed to post message as target looper for handler 0 is gone.
2018-12-14 16:17:24.632 910-4608/? D/NuPlayerDriver: notifyResetComplete(0xf1b42310)
2018-12-14 16:17:24.632 4649-4649/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
2018-12-14 16:17:24.633 4649-4649/? A/DEBUG: Build fingerprint: 'Nokia/Phoenix_00CN/PNX:8.1.0/OPM1.171019.026/00CN_1_24F:user/release-keys'
2018-12-14 16:17:24.633 4649-4649/? A/DEBUG: Revision: '0'
2018-12-14 16:17:24.633 4649-4649/? A/DEBUG: ABI: 'arm'
2018-12-14 16:17:24.633 4649-4649/? A/DEBUG: pid: 4492, tid: 4643, name: Thread-5  >>> com.hc.sipsample <<<
2018-12-14 16:17:24.633 4649-4649/? A/DEBUG: signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
2018-12-14 16:17:24.633 4649-4649/? A/DEBUG:     r0 00000000  r1 00001223  r2 00000006  r3 00000008
2018-12-14 16:17:24.633 4649-4649/? A/DEBUG:     r4 0000118c  r5 00001223  r6 d0f04f54  r7 0000010c
2018-12-14 16:17:24.633 4649-4649/? A/DEBUG:     r8 00000000  r9 d2266a78  sl 00000000  fp 0000012c
2018-12-14 16:17:24.633 4649-4649/? A/DEBUG:     ip d0f04f70  sp d0f04f40  lr f16e37a7  pc f16dd764  cpsr 200f0030
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG: backtrace:
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #00 pc 0001a764  /system/lib/libc.so (abort+63)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #01 pc 002c773b  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (__gnu_cxx::__verbose_terminate_handler()+226)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #02 pc 002c23f1  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (__cxxabiv1::__terminate(void (*)())+4)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #03 pc 002c2465  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (_ZSt9terminatev+8)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #04 pc 002c2589  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (__cxa_throw+120)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #05 pc 000b5987  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (SwigDirector_Account::onRegState(pj::OnRegStateParam&)+186)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #06 pc 000da2d7  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (pj::Endpoint::on_reg_state2(int, pjsua_reg_info*)+110)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #07 pc 000f1131  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (regc_cb+1092)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #08 pc 0010943d  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (regc_tsx_callback+1368)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #09 pc 0011ef0d  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (tsx_set_state+164)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #10 pc 0011f55d  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (tsx_on_state_proceeding_uac+140)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #11 pc 0011f789  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (tsx_on_state_calling+204)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #12 pc 00120acf  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (pjsip_tsx_recv_msg+82)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #13 pc 00120b47  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (mod_tsx_layer_on_rx_response+90)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #14 pc 00115d71  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (pjsip_endpt_process_rx_data+232)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #15 pc 00115e93  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (endpt_on_rx_msg+258)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #16 pc 00118fa7  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (pjsip_tpmgr_receive_packet+702)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #17 pc 00119cfd  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (udp_on_read_complete+128)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #18 pc 0018e6bd  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (ioqueue_dispatch_read_event+292)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #19 pc 0018f25b  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (pj_ioqueue_poll+450)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #20 pc 00115c0d  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (pjsip_endpt_handle_events2+90)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #21 pc 000f6e75  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (pjsua_handle_events+32)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #22 pc 000f6e99  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (worker_thread+16)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #23 pc 0018fb41  /data/app/com.hc.sipsample-Fa3lVFgAWSFZbNwv6Q3gdg==/lib/arm/libpjsua2.so (thread_main+40)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #24 pc 0004726f  /system/lib/libc.so (__pthread_start(void*)+22)
2018-12-14 16:17:24.640 4649-4649/? A/DEBUG:     #25 pc 0001b229  /system/lib/libc.so (__start_thread+32)

Use a Fixed Call-ID

Some PBX use the Call-ID header to match or not different sip registration. With this patch on the pjsip lib won't generete a random Call-ID everytime it restarts, but will always get the same from the PjCallID.getCallID() Java method. The call-id is generated by hashing the couple {deviceid, sipuser}.

See the related repo pjsip-android-builder for more info.

AUDIO_INPUT_FLAG_FAST denied by client

I'm not able to make a call with pjsip-android. But i'm not sure why... I have observed that i'm always getting an error of "AUDIO_INPUT_FLAG_FAST denied by client". Can this be the reason?

I also found out, that a missing "RECORD_AUDIO" permission can be the reason for the error above, but i added this permission to my AndroidManifest file and also doing a runtime permission request for this one.

I attached my logcat file.

I'm working with the current master branch.
LogCat.txt

unable to receive call in any ways

hi
i have officeSip server running and installed zoiper on my windows.
i can make outgoing call from android client using pjsip-android and everything is perfect but android client can't receive call from zoiper on windows(it always shows 480 error). also two pjsip-android clients couldn't make any calls.
this is my code on android:

SipAccountData sipAccountData = new SipAccountData();
sipAccountData.setHost("192.168.137.1")
                .setPort(5060)
                .setTcpTransport(false)
                .setUsername("hamed")
                .setPassword("123456")
                .setTcpTransport(true)
                .setContactUriParams("Hamed")
                .setRealm("officesip.local");
        ArrayList<CodecPriority> codecPriorities = new ArrayList<>();
        CodecPriority codecPriority = new CodecPriority("G729",(short)1);
        codecPriorities.add(codecPriority);
        SipServiceCommand.setAccountWithCodecs(getApplicationContext(),sipAccountData,codecPriorities);
        SipServiceCommand.start(getApplicationContext());
BroadcastEventReceiver mReceiver = new BroadcastEventReceiver(){
        @Override
        public void onReceive(Context context, Intent intent) {
            super.onReceive(context, intent);
        }

        @Override
        public void onOutgoingCall(String accountID, int callID, String number, boolean isVideo, boolean isVideoConference) {
            super.onOutgoingCall(accountID, callID, number, isVideo, isVideoConference);
        }

        @Override
        public void onRegistration(String accountID, pjsip_status_code registrationStateCode) {
            super.onRegistration(accountID, registrationStateCode);
            if (registrationStateCode == pjsip_status_code.PJSIP_SC_OK)
            {
                SipServiceCommand.makeCall(getApplicationContext(),"sip:[email protected]","hamed2");
            }
        }

        @Override
        public void onIncomingCall(String accountID, int callID, String displayName, String remoteUri, boolean isVideo) {
            super.onIncomingCall(accountID, callID, displayName, remoteUri, isVideo);
        }
    };
@Override
    protected void onStart() {
        mReceiver.register(getApplicationContext());
        super.onStart();
    }

    @Override
    protected void onStop() {
        mReceiver.unregister(getApplicationContext());
        super.onStop();
    }

is there anything i missed here?

When 180 arrives without 183 no ringback is heard

When a 180 (Ringing) is received without a 183 (Session Progress) the phone does not emit any ringback tone thud giving no feeedback about the status of the ongoing call.

Steps to fix:

  • Use the status code provided by pjsip (pjsip_status_code.PJSIP_SC_RINGING && pjsip_status_code.PJSIP_SC_PROGRESS) through CallInfo class within the onCallState method of SipCall class to discrimintate between the 180 and 183 as the status is the same (pjsip_inv_state.PJSIP_INV_STATE_EARLY).

  • When the scenario matches the faulted one, it instatiates and starts a new ToneGenerator [Android] , otherwise checks if the TG is started and stops it

Android Oreo support

  • FIX - implicit intent for broadcast are not always allowed anymore
  • FIX - SipService gets killed as soon as app goes in background. This results in removing (thus unregistering) all configured account

Android 8 support?

Is this library will support android 8?
right now i'm having issues with my device

SIP Route Header

Hello, guys.
I've got some troubles with this project.
When I try to register my session border controller drops the packets. Support says that the reason is a route header. How can I disable it?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.