1

I am using Pjsip(v2.6) for VoIP Audio and Video call.

I am facing issue in first Incoming Video Call. It always fails when I register a user and make a video call.

When I was debugging my code, I found that I am receiving CallMediaInfo status as PJSUA_CALL_MEDIA_NONE. When I make a second attempt, I received it as PJSUA_CALL_MEDIA_ACTIVE and preview gets displayed.

Here is my code for makeCall:

fun makeCall(id: String, isVideo: Boolean) {
        video = isVideo
        val buddyUri = "sip:$CALLEE@$URI"

        val call = MyCall(account, -1)
        val prm = CallOpParam(true)
        val callSettings = prm.opt
        if (isVideo) {
            callSettings.videoCount = 1
            callSettings.audioCount = 1
        } else {
            callSettings.audioCount = 1
            callSettings.videoCount = 0
        }

        try {
            call.makeCall(buddyUri, prm)
        } catch (e: Exception) {
            call.delete()
        }
        currentCall = call
    }

Here is my code for which executes Incoming_Call notification:

if (m?.what == Constants.MSGTYPE.INCOMING_CALL) {

            /* Incoming call */
            val call = m.obj as MyCall
            val prm = CallOpParam()

            /* Only one call at anytime */
            if (currentCall != null) {
                call.delete()
                return true
            }

            /* Answer with ringing */
            prm.statusCode = pjsip_status_code.PJSIP_SC_RINGING
            try {
                val callSetting = prm.opt
                callSetting?.audioCount = 1
                if (video) {
                    callSetting?.videoCount = 1
                } else callSetting?.videoCount = 0
                call.answer(prm)
            } catch (e: Exception) {
                println(e)
            }

            currentCall = call
            if (call.info.remOfferer && call.info.remVideoCount == 1L) {
                // start Video Activity
            } else {
                // start Audio Activity
            }
        }

When I accept the call, I received onCallMediaState callback:

override fun onCallMediaState(prm: OnCallMediaStateParam) {
        val ci: CallInfo
        try {
            ci = info
        } catch (e: Exception) {
            return
        }

        val cmiv = ci.media

        for (i in 0 until cmiv!!.size()) {
            val cmi = cmiv.get(i.toInt())
            if (cmi.type == pjmedia_type.PJMEDIA_TYPE_AUDIO && (cmi.status == pjsua_call_media_status.PJSUA_CALL_MEDIA_ACTIVE || cmi.status == pjsua_call_media_status.PJSUA_CALL_MEDIA_REMOTE_HOLD)) {
                LogUtils.e("AANAL onCallMediaState  Audio")
                handleAudioMedia(getMedia(i))
            } else if (cmi.type == pjmedia_type.PJMEDIA_TYPE_VIDEO &&
//                    cmi.status == pjsua_call_media_status.PJSUA_CALL_MEDIA_ACTIVE &&
                    cmi.videoIncomingWindowId != pjsua2.INVALID_ID) {
                LogUtils.e("AANAL onCallMediaState  Video")
                handleVideoMedia(cmi)
            }
        }

        MyApp.observer.notifyCallMediaState(this)
    }

Can anyone help me with this?

Thank you in advance!

Aanal Shah
  • 1,946
  • 2
  • 20
  • 30

1 Answers1

0

I found my own answer. It was because of incorrect videoCount I was setting at time of answer call.

Make sure that you are setting videoCount = 1 when you call call.answer method in Incoming Call callback.

eg.

     if (m?.what == Constants.MSGTYPE.INCOMING_CALL) {
        ...
        try {
                        val callSetting = prm.opt
                        callSetting?.audioCount = 1
                        // I have corrected this videoCount
                        if (call.info.remOfferer && call.info.remVideoCount == 1L) { 
                            callSetting?.videoCount = 1
                        } else callSetting?.videoCount = 0
                        call.answer(prm)
                    } catch (e: Exception) {
                        println(e)
                    }

        ...
        }
Aanal Shah
  • 1,946
  • 2
  • 20
  • 30
  • does video call feature is already implemented on pjsua2 android sample app – tomtom Jul 09 '20 at 14:14
  • 1
    It does support Video call. – Aanal Shah Jul 20 '20 at 07:38
  • @ANAL Mehta : i am not able to build Openh264 library for android ndk21 for pjsip ..please give a look at my post .. here https://stackoverflow.com/questions/63069460/building-openh264-library-with-android-ndk21-for-pjsip-android-fails – tomtom Jul 24 '20 at 12:59