【问题标题】:Android pjsip: First Incoming Video call gives CallmediaInfo status PJSUA_CALL_MEDIA_NONEAndroid pjsip:第一个传入视频呼叫提供 CallmediaInfo 状态 PJSUA_CALL_MEDIA_NONE
【发布时间】:2019-09-05 11:16:04
【问题描述】:

我正在使用 Pjsip(v2.6) 进行 VoIP 音频和视频通话。

我在第一次来电时遇到问题。当我注册用户并进行视频通话时,它总是失败。

在调试代码时,我发现我收到的 CallMediaInfo 状态为 PJSUA_CALL_MEDIA_NONE。 当我再次尝试时,我收到了 PJSUA_CALL_MEDIA_ACTIVE 并显示了预览。

这是我的 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
    }

这是我执行 Incoming_Call 通知的代码:

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
            }
        }

当我接听电话时,我收到了 onCallMediaState 回调:

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)
    }

谁能帮我解决这个问题?

提前谢谢你!

【问题讨论】:

    标签: android pjsip pjsua2 voip-android


    【解决方案1】:

    我找到了自己的答案。 这是因为我在接听电话时设置的 videoCount 不正确。

    确保在来电回调中调用 call.answer 方法时设置 videoCount = 1。

    例如。

         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)
                        }
    
            ...
            }
    

    【讨论】:

    • 视频通话功能是否已经在 pjsua2 android 示例应用上实现了
    • 确实支持视频通话。
    • @ANAL Mehta:我无法为 pjsip 的 android ndk21 构建 Openh264 库 ..请看一下我的帖子 .. 这里 stackoverflow.com/questions/63069460/…
    猜你喜欢
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多