Android pjsip:第一个传入视频呼叫提供CallmediaInfo状态PJSUA\u call\u MEDIA\u NONE
我正在使用Pjsip(v2.6)进行VoIP音频和视频通话 我在第一次视频来电中遇到问题。当我注册用户并进行视频通话时,它总是失败 当我调试代码时,我发现我收到的CallMediaInfo状态为PJSUA\u CALL\u MEDIA\u NONE。 当我进行第二次尝试时,我将其作为PJSUA\u CALL\u MEDIA\u ACTIVE收到,并显示预览 以下是我的makeCall代码:Android pjsip:第一个传入视频呼叫提供CallmediaInfo状态PJSUA\u call\u MEDIA\u NONE,android,pjsip,pjsua2,voip-android,Android,Pjsip,Pjsua2,Voip Android,我正在使用Pjsip(v2.6)进行VoIP音频和视频通话 我在第一次视频来电中遇到问题。当我注册用户并进行视频通话时,它总是失败 当我调试代码时,我发现我收到的CallMediaInfo状态为PJSUA\u CALL\u MEDIA\u NONE。 当我进行第二次尝试时,我将其作为PJSUA\u CALL\u MEDIA\u ACTIVE收到,并显示预览 以下是我的makeCall代码: fun makeCall(id: String, isVideo: Boolean) {
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
}
以下是我执行传入呼叫通知的代码:
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)
}
有人能帮我吗
提前谢谢你 我找到了自己的答案。
这是因为我在接听电话时设置的视频计数不正确
在呼入呼叫回调中调用call.answer方法时,请确保将videoCount设置为1
例如
我找到了自己的答案。
这是因为我在接听电话时设置的视频计数不正确
在呼入呼叫回调中调用call.answer方法时,请确保将videoCount设置为1
例如
pjsua2 android示例应用程序是否已经实现了视频调用功能?它确实支持视频调用。@ANAL Mehta:我无法为pjsip的android ndk21构建Openh264库。请看我的帖子。。pjsua2 android示例应用程序上已经实现了视频调用功能。它确实支持视频调用。@ANAL Mehta:我无法为pjsip的android ndk21构建Openh264库。请看我的帖子。。在这里
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)
}
...
}