Video works when A calls B not when B calls A

Hi there,

I posted this also to the FreePBX forums, as I am not sure whether the issue is related to Asterisk or FreePBX.

If my video intercom (ext 8001) calls my laptop (ext 8005), the call includes video and all works well. But if I do things the other way around (laltop calls video intercom), the call does not include video. I have included the debug info below showing the call without video.

I can see an error in there:

No joint capabilities for ‘video’ media stream between our configuration((h264|h263p|h263|h261)) and incoming SDP((ulaw|ilbc))

BTW, since I am using PJSIP, I needed to manually enable video for each extension by setting each extension’s Allowed Codecs setting to ‘h264&h263p&h263&h261&ulaw&alaw&gsm&g726’. In other words, I needed to explicitly list h264 in there to get any video working at all.

Any ideas?

Thanks,
Pete

<--- Received SIP request (641 bytes) from UDP:192.168.1.1:5060 --->
OPTIONS sip:mydomain.net SIP/2.0
Call-ID: 1dcfce881510532bf6eaa37f217dc761@0:0:0:0:0:0:0:0
CSeq: 1484 OPTIONS
From: "8005" <sip:8005@mydomain.net>;tag=7b49e2c5
To: "8005" <sip:8005@mydomain.net>
Via: SIP/2.0/UDP 192.168.1.1:5060;branch=z9hG4bK-353534-3998fdb1f040812d7bd6512ada2eeb4f
Max-Forwards: 70
Contact: "8005" <sip:8005@192.168.1.1:5060;transport=udp;registering_acc=mydomain_net>
User-Agent: Jitsi2.8.5426Windows 8
Allow: INFO,UPDATE,OPTIONS,MESSAGE,BYE,REFER,SUBSCRIBE,ACK,CANCEL,PUBLISH,NOTIFY,INVITE
Allow-Events: refer,conference,remote-control,presence,presence.winfo,message-summary
Content-Length: 0


<--- Transmitting SIP response (575 bytes) to UDP:192.168.1.1:5060 --->
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 192.168.1.1:5060;rport=5060;received=192.168.1.1;branch=z9hG4bK-353534-3998fdb1f040812d7bd6512ada2eeb4f
Call-ID: 1dcfce881510532bf6eaa37f217dc761@0:0:0:0:0:0:0:0
From: "8005" <sip:8005@mydomain.net>;tag=7b49e2c5
To: "8005" <sip:8005@mydomain.net>;tag=z9hG4bK-353534-3998fdb1f040812d7bd6512ada2eeb4f
CSeq: 1484 OPTIONS
WWW-Authenticate: Digest  realm="asterisk",nonce="1476602018/a24308ade57c599a10f6ac5fc78c3371",opaque="71df285a0c4bcc2d",algorithm=md5,qop="auth"
Server: FPBX-13.0.188.8(13.11.2)
Content-Length:  0


<--- Received SIP request (1424 bytes) from UDP:192.168.1.1:5060 --->
INVITE sip:8001@mydomain.net SIP/2.0
Call-ID: a12a40a29bdf6119d9a33f8a95524db6@0:0:0:0:0:0:0:0
CSeq: 1 INVITE
From: "8005" <sip:8005@mydomain.net>;tag=632a848f
To: <sip:8001@mydomain.net>
Via: SIP/2.0/UDP 192.168.1.1:5060;branch=z9hG4bK-353534-553fa82d926557ea2b0c35cba85a5af3
Max-Forwards: 70
Contact: "8005" <sip:8005@192.168.1.1:5060;transport=udp;registering_acc=mydomain_net>
User-Agent: Jitsi2.8.5426Windows 8
Content-Type: application/sdp
Content-Length: 933

v=0
o=8005-jitsi.org 0 0 IN IP4 192.168.1.1
s=-
c=IN IP4 192.168.1.1
t=0 0
m=audio 5114 RTP/AVP 96 97 98 9 100 102 0 8 103 3 104 4 101
a=rtpmap:96 opus/48000/2
a=fmtp:96 usedtx=1
a=rtpmap:97 SILK/24000
a=rtpmap:98 SILK/16000
a=rtpmap:9 G722/8000
a=rtpmap:100 speex/32000
a=rtpmap:102 speex/16000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:103 iLBC/8000
a=rtpmap:3 GSM/8000
a=rtpmap:104 speex/8000
a=rtpmap:4 G723/8000
a=fmtp:4 annexa=no;bitrate=6.3
a=rtpmap:101 telephone-event/8000
a=extmap:1 urn:ietf:params:rtp-hdrext:csrc-audio-level
a=extmap:2 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=rtcp-xr:voip-metrics
m=video 5116 RTP/AVP 105 99
a=recvonly
a=rtpmap:105 H264/90000
a=fmtp:105 profile-level-id=4DE01f;packetization-mode=1
a=imageattr:105 send * recv [x=[0-1366],y=[0-768]]
a=rtpmap:99 H264/90000
a=fmtp:99 profile-level-id=4DE01f
a=imageattr:99 send * recv [x=[0-1366],y=[0-768]]

<--- Transmitting SIP response (564 bytes) to UDP:192.168.1.1:5060 --->
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 192.168.1.1:5060;rport=5060;received=192.168.1.1;branch=z9hG4bK-353534-553fa82d926557ea2b0c35cba85a5af3
Call-ID: a12a40a29bdf6119d9a33f8a95524db6@0:0:0:0:0:0:0:0
From: "8005" <sip:8005@mydomain.net>;tag=632a848f
To: <sip:8001@mydomain.net>;tag=z9hG4bK-353534-553fa82d926557ea2b0c35cba85a5af3
CSeq: 1 INVITE
WWW-Authenticate: Digest  realm="asterisk",nonce="1476602019/7aa91e420a34d2adb4b2be27abd9fcb2",opaque="3c3fbc6344a11717",algorithm=md5,qop="auth"
Server: FPBX-13.0.188.8(13.11.2)
Content-Length:  0


<--- Received SIP request (377 bytes) from UDP:192.168.1.1:5060 --->
ACK sip:8001@mydomain.net SIP/2.0
Call-ID: a12a40a29bdf6119d9a33f8a95524db6@0:0:0:0:0:0:0:0
Max-Forwards: 70
From: "8005" <sip:8005@mydomain.net>;tag=632a848f
To: <sip:8001@mydomain.net>;tag=z9hG4bK-353534-553fa82d926557ea2b0c35cba85a5af3
Via: SIP/2.0/UDP 192.168.1.1:5060;branch=z9hG4bK-353534-553fa82d926557ea2b0c35cba85a5af3
CSeq: 1 ACK
Content-Length: 0


<--- Received SIP request (1681 bytes) from UDP:192.168.1.1:5060 --->
INVITE sip:8001@mydomain.net SIP/2.0
Call-ID: a12a40a29bdf6119d9a33f8a95524db6@0:0:0:0:0:0:0:0
CSeq: 2 INVITE
From: "8005" <sip:8005@mydomain.net>;tag=632a848f
To: <sip:8001@mydomain.net>
Max-Forwards: 70
Contact: "8005" <sip:8005@192.168.1.1:5060;transport=udp;registering_acc=mydomain_net>
User-Agent: Jitsi2.8.5426Windows 8
Content-Type: application/sdp
Via: SIP/2.0/UDP 192.168.1.1:5060;branch=z9hG4bK-353534-155af64740ec711b81d78256433f2fb8
Authorization: Digest username="8005",realm="asterisk",nonce="1476602019/7aa91e420a34d2adb4b2be27abd9fcb2",uri="sip:8001@mydomain.net",response="dea5ae3b76aac4c45ab32655b1f63531",algorithm=md5,opaque="3c3fbc6344a11717",qop=auth,cnonce="xyz",nc=00000001
Content-Length: 933

v=0
o=8005-jitsi.org 0 0 IN IP4 192.168.1.1
s=-
c=IN IP4 192.168.1.1
t=0 0
m=audio 5114 RTP/AVP 96 97 98 9 100 102 0 8 103 3 104 4 101
a=rtpmap:96 opus/48000/2
a=fmtp:96 usedtx=1
a=rtpmap:97 SILK/24000
a=rtpmap:98 SILK/16000
a=rtpmap:9 G722/8000
a=rtpmap:100 speex/32000
a=rtpmap:102 speex/16000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:103 iLBC/8000
a=rtpmap:3 GSM/8000
a=rtpmap:104 speex/8000
a=rtpmap:4 G723/8000
a=fmtp:4 annexa=no;bitrate=6.3
a=rtpmap:101 telephone-event/8000
a=extmap:1 urn:ietf:params:rtp-hdrext:csrc-audio-level
a=extmap:2 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=rtcp-xr:voip-metrics
m=video 5116 RTP/AVP 105 99
a=recvonly
a=rtpmap:105 H264/90000
a=fmtp:105 profile-level-id=4DE01f;packetization-mode=1
a=imageattr:105 send * recv [x=[0-1366],y=[0-768]]
a=rtpmap:99 H264/90000
a=fmtp:99 profile-level-id=4DE01f
a=imageattr:99 send * recv [x=[0-1366],y=[0-768]]

<--- Transmitting SIP response (359 bytes) to UDP:192.168.1.1:5060 --->
SIP/2.0 100 Trying
Via: SIP/2.0/UDP 192.168.1.1:5060;rport=5060;received=192.168.1.1;branch=z9hG4bK-353534-155af64740ec711b81d78256433f2fb8
Call-ID: a12a40a29bdf6119d9a33f8a95524db6@0:0:0:0:0:0:0:0
From: "8005" <sip:8005@mydomain.net>;tag=632a848f
To: <sip:8001@mydomain.net>
CSeq: 2 INVITE
Server: FPBX-13.0.188.8(13.11.2)
Content-Length:  0


    -- Executing [8001@from-internal:1] GotoIf("PJSIP/8005-00000004", "1?ext-local,8001,1:followme-check,8001,1") in new stack
    -- Goto (ext-local,8001,1)
    -- Executing [8001@ext-local:1] Set("PJSIP/8005-00000004", "__RINGTIMER=15") in new stack
    -- Executing [8001@ext-local:2] Macro("PJSIP/8005-00000004", "exten-vm,novm,8001,0,0,0") in new stack
    -- Executing [s@macro-exten-vm:1] Macro("PJSIP/8005-00000004", "user-callerid,") in new stack
    -- Executing [s@macro-user-callerid:1] Set("PJSIP/8005-00000004", "TOUCH_MONITOR=1476602019.4") in new stack
    -- Executing [s@macro-user-callerid:2] Set("PJSIP/8005-00000004", "AMPUSER=8005") in new stack
    -- Executing [s@macro-user-callerid:3] GotoIf("PJSIP/8005-00000004", "0?report") in new stack
    -- Executing [s@macro-user-callerid:4] ExecIf("PJSIP/8005-00000004", "1?Set(REALCALLERIDNUM=8005)") in new stack
    -- Executing [s@macro-user-callerid:5] Set("PJSIP/8005-00000004", "AMPUSER=8005") in new stack
    -- Executing [s@macro-user-callerid:6] GotoIf("PJSIP/8005-00000004", "0?limit") in new stack
    -- Executing [s@macro-user-callerid:7] Set("PJSIP/8005-00000004", "AMPUSERCIDNAME=Laptop") in new stack
    -- Executing [s@macro-user-callerid:8] GotoIf("PJSIP/8005-00000004", "0?report") in new stack
    -- Executing [s@macro-user-callerid:9] Set("PJSIP/8005-00000004", "AMPUSERCID=8005") in new stack
    -- Executing [s@macro-user-callerid:10] Set("PJSIP/8005-00000004", "__DIAL_OPTIONS=Ttr") in new stack
    -- Executing [s@macro-user-callerid:11] Set("PJSIP/8005-00000004", "CALLERID(all)="Laptop" <8005>") in new stack
    -- Executing [s@macro-user-callerid:12] GotoIf("PJSIP/8005-00000004", "0?limit") in new stack
    -- Executing [s@macro-user-callerid:13] ExecIf("PJSIP/8005-00000004", "0?Set(GROUP(concurrency_limit)=8005)") in new stack
    -- Executing [s@macro-user-callerid:14] GotoIf("PJSIP/8005-00000004", "0?continue") in new stack
    -- Executing [s@macro-user-callerid:15] Set("PJSIP/8005-00000004", "__TTL=64") in new stack
    -- Executing [s@macro-user-callerid:16] GotoIf("PJSIP/8005-00000004", "1?continue") in new stack
    -- Goto (macro-user-callerid,s,27)
    -- Executing [s@macro-user-callerid:27] Set("PJSIP/8005-00000004", "CALLERID(number)=8005") in new stack
    -- Executing [s@macro-user-callerid:28] Set("PJSIP/8005-00000004", "CALLERID(name)=Laptop") in new stack
    -- Executing [s@macro-user-callerid:29] GotoIf("PJSIP/8005-00000004", "0?cnum") in new stack
    -- Executing [s@macro-user-callerid:30] Set("PJSIP/8005-00000004", "CDR(cnam)=Laptop") in new stack
    -- Executing [s@macro-user-callerid:31] Set("PJSIP/8005-00000004", "CDR(cnum)=8005") in new stack
    -- Executing [s@macro-user-callerid:32] Set("PJSIP/8005-00000004", "CHANNEL(language)=en") in new stack
    -- Executing [s@macro-exten-vm:2] Set("PJSIP/8005-00000004", "RingGroupMethod=none") in new stack
    -- Executing [s@macro-exten-vm:3] Set("PJSIP/8005-00000004", "__EXTTOCALL=8001") in new stack
    -- Executing [s@macro-exten-vm:4] Set("PJSIP/8005-00000004", "__PICKUPMARK=8001") in new stack
    -- Executing [s@macro-exten-vm:5] Set("PJSIP/8005-00000004", "RT=") in new stack
    -- Executing [s@macro-exten-vm:6] Gosub("PJSIP/8005-00000004", "sub-record-check,s,1(exten,8001,dontcare)") in new stack
    -- Executing [s@sub-record-check:1] GotoIf("PJSIP/8005-00000004", "0?initialized") in new stack
    -- Executing [s@sub-record-check:2] Set("PJSIP/8005-00000004", "__REC_STATUS=INITIALIZED") in new stack
    -- Executing [s@sub-record-check:3] Set("PJSIP/8005-00000004", "NOW=1476602019") in new stack
    -- Executing [s@sub-record-check:4] Set("PJSIP/8005-00000004", "__DAY=16") in new stack
    -- Executing [s@sub-record-check:5] Set("PJSIP/8005-00000004", "__MONTH=10") in new stack
    -- Executing [s@sub-record-check:6] Set("PJSIP/8005-00000004", "__YEAR=2016") in new stack
    -- Executing [s@sub-record-check:7] Set("PJSIP/8005-00000004", "__TIMESTR=20161016-181339") in new stack
    -- Executing [s@sub-record-check:8] Set("PJSIP/8005-00000004", "__FROMEXTEN=8005") in new stack
    -- Executing [s@sub-record-check:9] Set("PJSIP/8005-00000004", "__MON_FMT=wav") in new stack
    -- Executing [s@sub-record-check:10] NoOp("PJSIP/8005-00000004", "Recordings initialized") in new stack
    -- Executing [s@sub-record-check:11] ExecIf("PJSIP/8005-00000004", "0?Set(ARG3=dontcare)") in new stack
    -- Executing [s@sub-record-check:12] Set("PJSIP/8005-00000004", "REC_POLICY_MODE_SAVE=") in new stack
    -- Executing [s@sub-record-check:13] ExecIf("PJSIP/8005-00000004", "0?Set(REC_STATUS=NO)") in new stack
    -- Executing [s@sub-record-check:14] GotoIf("PJSIP/8005-00000004", "5?checkaction") in new stack
    -- Goto (sub-record-check,s,17)
    -- Executing [s@sub-record-check:17] GotoIf("PJSIP/8005-00000004", "1?sub-record-check,exten,1") in new stack
    -- Goto (sub-record-check,exten,1)
    -- Executing [exten@sub-record-check:1] NoOp("PJSIP/8005-00000004", "Exten Recording Check between 8005 and 8001") in new stack
    -- Executing [exten@sub-record-check:2] Set("PJSIP/8005-00000004", "CALLTYPE=internal") in new stack
    -- Executing [exten@sub-record-check:3] ExecIf("PJSIP/8005-00000004", "0?Set(CALLTYPE=)") in new stack
    -- Executing [exten@sub-record-check:4] Set("PJSIP/8005-00000004", "CALLEE=dontcare") in new stack
    -- Executing [exten@sub-record-check:5] ExecIf("PJSIP/8005-00000004", "0?Set(CALLEE=dontcare)") in new stack
    -- Executing [exten@sub-record-check:6] GotoIf("PJSIP/8005-00000004", "0?callee") in new stack
    -- Executing [exten@sub-record-check:7] GotoIf("PJSIP/8005-00000004", "1?caller") in new stack
    -- Goto (sub-record-check,exten,13)
    -- Executing [exten@sub-record-check:13] Set("PJSIP/8005-00000004", "RECMODE=dontcare") in new stack
    -- Executing [exten@sub-record-check:14] ExecIf("PJSIP/8005-00000004", "0?Set(RECMODE=dontcare)") in new stack
    -- Executing [exten@sub-record-check:15] ExecIf("PJSIP/8005-00000004", "1?Set(RECMODE=dontcare)") in new stack
    -- Executing [exten@sub-record-check:16] Gosub("PJSIP/8005-00000004", "recordcheck,1(dontcare,internal,8001)") in new stack
    -- Executing [recordcheck@sub-record-check:1] NoOp("PJSIP/8005-00000004", "Starting recording check against dontcare") in new stack
    -- Executing [recordcheck@sub-record-check:2] Goto("PJSIP/8005-00000004", "dontcare") in new stack
    -- Goto (sub-record-check,recordcheck,3)
    -- Executing [recordcheck@sub-record-check:3] Return("PJSIP/8005-00000004", "") in new stack
    -- Executing [exten@sub-record-check:17] Return("PJSIP/8005-00000004", "") in new stack
    -- Executing [s@macro-exten-vm:7] GotoIf("PJSIP/8005-00000004", "1?macrodial") in new stack
    -- Goto (macro-exten-vm,s,13)
    -- Executing [s@macro-exten-vm:13] GosubIf("PJSIP/8005-00000004", "0?clrheader,1()") in new stack
    -- Executing [s@macro-exten-vm:14] Macro("PJSIP/8005-00000004", "dial-one,,Ttr,8001") in new stack
    -- Executing [s@macro-dial-one:1] Set("PJSIP/8005-00000004", "DEXTEN=8001") in new stack
    -- Executing [s@macro-dial-one:2] Set("PJSIP/8005-00000004", "DIALSTATUS_CW=") in new stack
    -- Executing [s@macro-dial-one:3] GosubIf("PJSIP/8005-00000004", "0?screen,1()") in new stack
    -- Executing [s@macro-dial-one:4] GosubIf("PJSIP/8005-00000004", "0?cf,1()") in new stack
    -- Executing [s@macro-dial-one:5] GotoIf("PJSIP/8005-00000004", "1?skip1") in new stack
    -- Goto (macro-dial-one,s,8)
    -- Executing [s@macro-dial-one:8] GotoIf("PJSIP/8005-00000004", "0?nodial") in new stack
    -- Executing [s@macro-dial-one:9] GotoIf("PJSIP/8005-00000004", "0?continue") in new stack
    -- Executing [s@macro-dial-one:10] Set("PJSIP/8005-00000004", "EXTHASCW=ENABLED") in new stack
    -- Executing [s@macro-dial-one:11] GotoIf("PJSIP/8005-00000004", "0?next1:cwinusebusy") in new stack
    -- Goto (macro-dial-one,s,23)
    -- Executing [s@macro-dial-one:23] GotoIf("PJSIP/8005-00000004", "0?next3:continue") in new stack
    -- Goto (macro-dial-one,s,25)
    -- Executing [s@macro-dial-one:25] GotoIf("PJSIP/8005-00000004", "0?nodial") in new stack
    -- Executing [s@macro-dial-one:26] GosubIf("PJSIP/8005-00000004", "1?dstring,1():dlocal,1()") in new stack
    -- Executing [dstring@macro-dial-one:1] Set("PJSIP/8005-00000004", "DSTRING=") in new stack
    -- Executing [dstring@macro-dial-one:2] Set("PJSIP/8005-00000004", "DEVICES=8001") in new stack
    -- Executing [dstring@macro-dial-one:3] ExecIf("PJSIP/8005-00000004", "0?Return()") in new stack
    -- Executing [dstring@macro-dial-one:4] ExecIf("PJSIP/8005-00000004", "0?Set(DEVICES=001)") in new stack
    -- Executing [dstring@macro-dial-one:5] Set("PJSIP/8005-00000004", "LOOPCNT=1") in new stack
    -- Executing [dstring@macro-dial-one:6] Set("PJSIP/8005-00000004", "ITER=1") in new stack
    -- Executing [dstring@macro-dial-one:7] Set("PJSIP/8005-00000004", "THISDIAL=PJSIP/8001") in new stack
    -- Executing [dstring@macro-dial-one:8] GosubIf("PJSIP/8005-00000004", "1?zap2dahdi,1()") in new stack
    -- Executing [zap2dahdi@macro-dial-one:1] ExecIf("PJSIP/8005-00000004", "0?Return()") in new stack
    -- Executing [zap2dahdi@macro-dial-one:2] Set("PJSIP/8005-00000004", "NEWDIAL=") in new stack
    -- Executing [zap2dahdi@macro-dial-one:3] Set("PJSIP/8005-00000004", "LOOPCNT2=1") in new stack
    -- Executing [zap2dahdi@macro-dial-one:4] Set("PJSIP/8005-00000004", "ITER2=1") in new stack
    -- Executing [zap2dahdi@macro-dial-one:5] Set("PJSIP/8005-00000004", "THISPART2=PJSIP/8001") in new stack
    -- Executing [zap2dahdi@macro-dial-one:6] ExecIf("PJSIP/8005-00000004", "0?Set(THISPART2=DAHDIIP/8001)") in new stack
    -- Executing [zap2dahdi@macro-dial-one:7] Set("PJSIP/8005-00000004", "NEWDIAL=PJSIP/8001&") in new stack
    -- Executing [zap2dahdi@macro-dial-one:8] Set("PJSIP/8005-00000004", "ITER2=2") in new stack
    -- Executing [zap2dahdi@macro-dial-one:9] GotoIf("PJSIP/8005-00000004", "0?begin2") in new stack
    -- Executing [zap2dahdi@macro-dial-one:10] Set("PJSIP/8005-00000004", "THISDIAL=PJSIP/8001") in new stack
    -- Executing [zap2dahdi@macro-dial-one:11] Return("PJSIP/8005-00000004", "") in new stack
    -- Executing [dstring@macro-dial-one:9] GotoIf("PJSIP/8005-00000004", "0?docheck") in new stack
    -- Executing [dstring@macro-dial-one:10] NoOp("PJSIP/8005-00000004", "Debug: Found PJSIP Destination PJSIP/8001, updating with PJSIP_DIAL_CONTACTS") in new stack
    -- Executing [dstring@macro-dial-one:11] Set("PJSIP/8005-00000004", "THISDIAL=PJSIP/8001/sip:8001@192.168.1.110:5060") in new stack
    -- Executing [dstring@macro-dial-one:12] GotoIf("PJSIP/8005-00000004", "0?skipset") in new stack
    -- Executing [dstring@macro-dial-one:13] Set("PJSIP/8005-00000004", "DSTRING=PJSIP/8001/sip:8001@192.168.1.110:5060&") in new stack
    -- Executing [dstring@macro-dial-one:14] Set("PJSIP/8005-00000004", "ITER=2") in new stack
    -- Executing [dstring@macro-dial-one:15] GotoIf("PJSIP/8005-00000004", "0?begin") in new stack
    -- Executing [dstring@macro-dial-one:16] ExecIf("PJSIP/8005-00000004", "0?Return()") in new stack
    -- Executing [dstring@macro-dial-one:17] Set("PJSIP/8005-00000004", "DSTRING=PJSIP/8001/sip:8001@192.168.1.110:5060") in new stack
    -- Executing [dstring@macro-dial-one:18] Return("PJSIP/8005-00000004", "") in new stack
    -- Executing [s@macro-dial-one:27] GotoIf("PJSIP/8005-00000004", "0?nodial") in new stack
    -- Executing [s@macro-dial-one:28] GotoIf("PJSIP/8005-00000004", "0?skiptrace") in new stack
    -- Executing [s@macro-dial-one:29] GosubIf("PJSIP/8005-00000004", "1?ctset,1():ctclear,1()") in new stack
    -- Executing [ctset@macro-dial-one:1] Set("PJSIP/8005-00000004", "DB(CALLTRACE/8001)=8005") in new stack
    -- Executing [ctset@macro-dial-one:2] Return("PJSIP/8005-00000004", "") in new stack
    -- Executing [s@macro-dial-one:30] Set("PJSIP/8005-00000004", "D_OPTIONS=Ttr") in new stack
    -- Executing [s@macro-dial-one:31] NoOp("PJSIP/8005-00000004", "Blind Transfer: , Attended Transfer: , User: 8005, Alert Info: ") in new stack
    -- Executing [s@macro-dial-one:32] ExecIf("PJSIP/8005-00000004", "1?Set(ALERT_INFO=)") in new stack
    -- Executing [s@macro-dial-one:33] ExecIf("PJSIP/8005-00000004", "0?Set(ALERT_INFO=)") in new stack
    -- Executing [s@macro-dial-one:34] ExecIf("PJSIP/8005-00000004", "0?Set(ALERT_INFO=)") in new stack
    -- Executing [s@macro-dial-one:35] GosubIf("PJSIP/8005-00000004", "0?func-set-sipheader,s,1(Alert-Info,)") in new stack
    -- Executing [s@macro-dial-one:36] ExecIf("PJSIP/8005-00000004", "0?Set(CHANNEL(musicclass)=)") in new stack
    -- Executing [s@macro-dial-one:37] GosubIf("PJSIP/8005-00000004", "0?qwait,1()") in new stack
    -- Executing [s@macro-dial-one:38] Set("PJSIP/8005-00000004", "__CWIGNORE=") in new stack
    -- Executing [s@macro-dial-one:39] Set("PJSIP/8005-00000004", "__KEEPCID=TRUE") in new stack
    -- Executing [s@macro-dial-one:40] GotoIf("PJSIP/8005-00000004", "0?usegoto,1") in new stack
    -- Executing [s@macro-dial-one:41] GotoIf("PJSIP/8005-00000004", "0?godial") in new stack
    -- Executing [s@macro-dial-one:42] Gosub("PJSIP/8005-00000004", "sub-presencestate-display,s,1(8001)") in new stack
    -- Executing [s@sub-presencestate-display:1] Goto("PJSIP/8005-00000004", "state-not_set,1") in new stack
    -- Goto (sub-presencestate-display,state-not_set,1)
    -- Executing [state-not_set@sub-presencestate-display:1] Set("PJSIP/8005-00000004", "PRESENCESTATE_DISPLAY=") in new stack
    -- Executing [state-not_set@sub-presencestate-display:2] Return("PJSIP/8005-00000004", "") in new stack
    -- Executing [s@macro-dial-one:43] Set("PJSIP/8005-00000004", "CONNECTEDLINE(name,i)=Doorbell") in new stack
    -- Executing [s@macro-dial-one:44] Set("PJSIP/8005-00000004", "CONNECTEDLINE(num)=8001") in new stack
    -- Executing [s@macro-dial-one:45] Set("PJSIP/8005-00000004", "D_OPTIONS=TtrI") in new stack
    -- Executing [s@macro-dial-one:46] Macro("PJSIP/8005-00000004", "dialout-one-predial-hook,") in new stack
    -- Executing [s@macro-dialout-one-predial-hook:1] MacroExit("PJSIP/8005-00000004", "") in new stack
    -- Executing [s@macro-dial-one:47] ExecIf("PJSIP/8005-00000004", "0?Set(D_OPTIONS=trII)") in new stack
    -- Executing [s@macro-dial-one:48] Dial("PJSIP/8005-00000004", "PJSIP/8001/sip:8001@192.168.1.110:5060,,TtrIb(func-apply-sipheaders^s^1)") in new stack
    -- PJSIP/8001-00000005 Internal Gosub(func-apply-sipheaders,s,1) start
    -- Executing [s@func-apply-sipheaders:1] NoOp("PJSIP/8001-00000005", "Applying SIP Headers to channel") in new stack
    -- Executing [s@func-apply-sipheaders:2] Set("PJSIP/8001-00000005", "SIPHEADERKEYS=") in new stack
    -- Executing [s@func-apply-sipheaders:3] While("PJSIP/8001-00000005", "0") in new stack
    -- Jumping to priority 6
    -- Executing [s@func-apply-sipheaders:7] Return("PJSIP/8001-00000005", "") in new stack
  == Spawn extension (from-internal, 8001, 1) exited non-zero on 'PJSIP/8001-00000005'
    -- PJSIP/8001-00000005 Internal Gosub(func-apply-sipheaders,s,1) complete GOSUB_RETVAL=
    -- Called PJSIP/8001/sip:8001@192.168.1.110:5060
<--- Transmitting SIP response (547 bytes) to UDP:192.168.1.1:5060 --->
SIP/2.0 180 Ringing
Via: SIP/2.0/UDP 192.168.1.1:5060;rport=5060;received=192.168.1.1;branch=z9hG4bK-353534-155af64740ec711b81d78256433f2fb8
Call-ID: a12a40a29bdf6119d9a33f8a95524db6@0:0:0:0:0:0:0:0
From: "8005" <sip:8005@mydomain.net>;tag=632a848f
To: <sip:8001@mydomain.net>;tag=8253e5a2-79ff-4e8c-828e-e0f57b174e8e
CSeq: 2 INVITE
Server: FPBX-13.0.188.8(13.11.2)
Contact: <sip:192.168.1.220:5060>
Allow: OPTIONS, SUBSCRIBE, NOTIFY, PUBLISH, INVITE, ACK, BYE, CANCEL, UPDATE, PRACK, REGISTER, REFER, MESSAGE
Content-Length:  0


    -- Connected line update to PJSIP/8005-00000004 prevented.
<--- Transmitting SIP request (1175 bytes) to UDP:192.168.1.110:5060 --->
INVITE sip:8001@192.168.1.110:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.1.220:5060;rport;branch=z9hG4bKPj6293df21-6ba4-4c01-ac26-889157260ca0
From: "Laptop" <sip:8005@192.168.1.220>;tag=2c9bbe4c-a2e4-4c7e-89b8-82c34e927e45
To: <sip:8001@192.168.1.110>
Contact: <sip:asterisk@192.168.1.220:5060>
Call-ID: e2b71c3a-c2b7-45c1-9061-0139ddb94e6e
CSeq: 31258 INVITE
Allow: OPTIONS, SUBSCRIBE, NOTIFY, PUBLISH, INVITE, ACK, BYE, CANCEL, UPDATE, PRACK, REGISTER, REFER, MESSAGE
Supported: 100rel, timer, replaces, norefersub
Session-Expires: 1800
Min-SE: 90
Max-Forwards: 70
User-Agent: FPBX-13.0.188.8(13.11.2)
Content-Type: application/sdp
Content-Length:   500

v=0
o=- 2130796319 2130796319 IN IP4 192.168.1.220
s=Asterisk
c=IN IP4 192.168.1.220
t=0 0
m=audio 18162 RTP/AVP 0 8 3 111 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:3 GSM/8000
a=rtpmap:111 G726-32/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=ptime:20
a=maxptime:150
a=sendrecv
m=video 12826 RTP/AVP 99 98 34 31
a=rtpmap:99 H264/90000
a=fmtp:99 profile-level-id=4DE01F
a=rtpmap:98 h263-1998/90000
a=rtpmap:34 H263/90000
a=rtpmap:31 H261/90000
a=sendrecv

<--- Received SIP response (377 bytes) from UDP:192.168.1.110:5060 --->
SIP/2.0 100 Trying
Via: SIP/2.0/UDP 192.168.1.220:5060;rport=5060;branch=z9hG4bKPj6293df21-6ba4-4c01-ac26-889157260ca0
From: "Laptop" <sip:8005@192.168.1.220>;tag=2c9bbe4c-a2e4-4c7e-89b8-82c34e927e45
To: <sip:8001@192.168.1.110>
Call-ID: e2b71c3a-c2b7-45c1-9061-0139ddb94e6e
CSeq: 31258 INVITE
User-Agent: Dahua UAC/3.0 VTO2000A V1.200.1000.0
Content-Length: 0


<--- Received SIP response (500 bytes) from UDP:192.168.1.110:5060 --->
SIP/2.0 180 Ringing
Via: SIP/2.0/UDP 192.168.1.220:5060;rport=5060;branch=z9hG4bKPj6293df21-6ba4-4c01-ac26-889157260ca0
From: "Laptop" <sip:8005@192.168.1.220>;tag=2c9bbe4c-a2e4-4c7e-89b8-82c34e927e45
To: <sip:8001@192.168.1.110>;tag=156114505
Call-ID: e2b71c3a-c2b7-45c1-9061-0139ddb94e6e
CSeq: 31258 INVITE
Contact: <sip:8001@192.168.1.110:5060>
User-Agent: Dahua UAC/3.0 VTO2000A V1.200.1000.0
MaxRingingTime: 30
MaxConnectingTime: 120
DependentInfo: 0.0.0.0
Content-Length: 0


    -- PJSIP/8001-00000005 is ringing
<--- Transmitting SIP response (547 bytes) to UDP:192.168.1.1:5060 --->
SIP/2.0 180 Ringing
Via: SIP/2.0/UDP 192.168.1.1:5060;rport=5060;received=192.168.1.1;branch=z9hG4bK-353534-155af64740ec711b81d78256433f2fb8
Call-ID: a12a40a29bdf6119d9a33f8a95524db6@0:0:0:0:0:0:0:0
From: "8005" <sip:8005@mydomain.net>;tag=632a848f
To: <sip:8001@mydomain.net>;tag=8253e5a2-79ff-4e8c-828e-e0f57b174e8e
CSeq: 2 INVITE
Server: FPBX-13.0.188.8(13.11.2)
Allow: OPTIONS, SUBSCRIBE, NOTIFY, PUBLISH, INVITE, ACK, BYE, CANCEL, UPDATE, PRACK, REGISTER, REFER, MESSAGE
Contact: <sip:192.168.1.220:5060>
Content-Length:  0


<--- Received SIP response (714 bytes) from UDP:192.168.1.110:5060 --->
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.1.220:5060;rport=5060;branch=z9hG4bKPj6293df21-6ba4-4c01-ac26-889157260ca0
From: "Laptop" <sip:8005@192.168.1.220>;tag=2c9bbe4c-a2e4-4c7e-89b8-82c34e927e45
To: <sip:8001@192.168.1.110>;tag=156114505
Call-ID: e2b71c3a-c2b7-45c1-9061-0139ddb94e6e
CSeq: 31258 INVITE
Contact: <sip:8001@192.168.1.110:5060>
User-Agent: Dahua UAC/3.0 VTO2000A V1.200.1000.0
Content-Type: application/sdp
Content-Length:   252

v=0
o=0 0 0 IN IP4 192.168.1.110
s=Dahua VT 1.5
c=IN IP4 192.168.1.110
t=0 0
m=video 20001 RTP/AVP 96
a=framerate:25.000000
a=rtpmap:96 H264/90000
a=sendrecv
m=audio 20000 RTP/AVP 97 0
a=rtpmap:97 PCM/16000
a=rtpmap:0 PCMU/8000
a=sendrecv

[2016-10-16 18:13:39] NOTICE[10668]: res_pjsip_sdp_rtp.c:335 set_caps: No joint capabilities for 'video' media stream between our configuration((h264|h263p|h263|h261)) and incoming SDP((ulaw|ilbc))
<--- Transmitting SIP request (411 bytes) to UDP:192.168.1.110:5060 --->
ACK sip:8001@192.168.1.110:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.1.220:5060;rport;branch=z9hG4bKPj48694f45-0615-4ee5-987d-26f538003651
From: "Laptop" <sip:8005@192.168.1.220>;tag=2c9bbe4c-a2e4-4c7e-89b8-82c34e927e45
To: <sip:8001@192.168.1.110>;tag=156114505
Call-ID: e2b71c3a-c2b7-45c1-9061-0139ddb94e6e
CSeq: 31258 ACK
Max-Forwards: 70
User-Agent: FPBX-13.0.188.8(13.11.2)
Content-Length:  0


    -- PJSIP/8001-00000005 answered PJSIP/8005-00000004
<--- Transmitting SIP response (992 bytes) to UDP:192.168.1.1:5060 --->
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.1.1:5060;rport=5060;received=192.168.1.1;branch=z9hG4bK-353534-155af64740ec711b81d78256433f2fb8
Call-ID: a12a40a29bdf6119d9a33f8a95524db6@0:0:0:0:0:0:0:0
From: "8005" <sip:8005@mydomain.net>;tag=632a848f
To: <sip:8001@mydomain.net>;tag=8253e5a2-79ff-4e8c-828e-e0f57b174e8e
CSeq: 2 INVITE
Server: FPBX-13.0.188.8(13.11.2)
Allow: OPTIONS, SUBSCRIBE, NOTIFY, PUBLISH, INVITE, ACK, BYE, CANCEL, UPDATE, PRACK, REGISTER, REFER, MESSAGE
Contact: <sip:192.168.1.220:5060>
Supported: 100rel, timer, replaces, norefersub
Content-Type: application/sdp
Content-Length:   368

v=0
o=- 0 2 IN IP4 192.168.1.220
s=Asterisk
c=IN IP4 192.168.1.220
t=0 0
m=audio 16374 RTP/AVP 0 8 3 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:3 GSM/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=ptime:20
a=maxptime:150
a=sendrecv
m=video 10656 RTP/AVP 105
a=rtpmap:105 H264/90000
a=fmtp:105 profile-level-id=4DE01F
a=sendonly

    -- Channel PJSIP/8001-00000005 joined 'simple_bridge' basic-bridge <675ee3cf-59d8-4bb1-a8ae-2fd2c383bcd8>
    -- Channel PJSIP/8005-00000004 joined 'simple_bridge' basic-bridge <675ee3cf-59d8-4bb1-a8ae-2fd2c383bcd8>
<--- Received SIP request (748 bytes) from UDP:192.168.1.1:5060 --->
ACK sip:192.168.1.220:5060 SIP/2.0
Call-ID: a12a40a29bdf6119d9a33f8a95524db6@0:0:0:0:0:0:0:0
CSeq: 2 ACK
Via: SIP/2.0/UDP 192.168.1.1:5060;branch=z9hG4bK-353534-9402b889ac05ec17fcd0f77bb28a447a
From: "8005" <sip:8005@mydomain.net>;tag=632a848f
To: <sip:8001@mydomain.net>;tag=8253e5a2-79ff-4e8c-828e-e0f57b174e8e
Max-Forwards: 70
Authorization: Digest username="8005",realm="asterisk",nonce="1476602019/7aa91e420a34d2adb4b2be27abd9fcb2",uri="sip:8001@mydomain.net",response="dea5ae3b76aac4c45ab32655b1f63531",algorithm=md5,opaque="3c3fbc6344a11717",qop=auth,cnonce="xyz",nc=00000001
Contact: "8005" <sip:8005@192.168.1.1:5060;transport=udp;registering_acc=mydomain_net>
User-Agent: Jitsi2.8.5426Windows 8
Content-Length: 0

Have you read about the Codec negotiation process ?
Codec negotiation

When Asterisk is receiving a call, the codec will initially be set to the
first codec in the allowed codecs defined for the user receiving the call
that the caller also indicates that it supports. But, after the caller
starts sending RTP, Asterisk will switch to using whatever codec the caller
is sending.

When Asterisk is placing a call, the codec used will be the first codec in
the allowed codecs that the callee indicates that it supports. Asterisk will
not switch to whatever codec the callee is sending.

Thanks for the info.

I’m still not sure why there is no video since both extensions support H.264 and both extensions have h264 listed as the first codec in their respective allowed lists.

Maybe I am missing something?

BTW, with Chan_SIP this worked fine, but since switching to PJSIP the video only works when initiated from the video intercom.

Cheers.

The information described earlier has been taken from sip.conf sample file, Related to pjsip I havent found any information about the codec negotiation, So we must assume that is the same process , and if not I hope some thoughts from the experts

Asterisk will prefer the codec selected on the incoming side for the outgoing side, at least for audio. I’m not sure that there is that deep support for video codecs.

I believe the “Dahua UAC” is broken in its support of SDP. We offer the first stream as audio, and the second stream as video. They answer with the first stream as video and the second stream as audio. This is against the SDP RFC and the SDP negotiator in PJSIP actually follows it. There’s no real way to fix it, except for hacking up the PJSIP SDP negotiator to support this broken device.

1 Like

Thanks for the info, Would it make sense for Asterisk’s PJSIP to support this ‘swapped’ order of audio and video streams? I wonder if there are other products out there that also offer video as the first stream.

They aren’t offering video as the first stream. They are ANSWERING video as the first stream, when we have offered audio. That’s the wrong part. The order of streams matters. It would not be easy to change this.

Ah OK. So it would be best for me to contact Dahua and hope that their developers can fix this in order to the follow the standards.

It would be easier than trying to change the PJSIP SDP negotiator to work in such a case.

This issue is a little unfortunate, as it started to happen when I migrated from chan_sip to pjsip. I also have a Dahua doorbell, with the latest firmware (published in 2022). I guess it will be a little difficult to convince the company to change it and release another firmware (especially considering that the existing one works with chan_sip).

Just to update, I reported this issue to Dahua today. I don’t know if someone else had reported as well. But since this is my first time contacting the company, I have no expectations of an outcome, especially of such a big company.

Meanwhile, if someone has any tip for implementing a fix for this issue in the Asterisk code base, even if it is not going to be accepted, it would be very useful so people who need can apply the patch in their own Asterisk.

For example, we are considering this for the Home Assistant Asterisk add-on, since in such situation the use case is critical.

I can’t reproduce the issue anymore since Asterisk 20. It would be nice if someone else could also verify that VTO now works ok with PJSIP.

Thanks for this tread - I’ve spent months to realize why Dahua doorbell not working with PJSIP. Now it’s clear
Just compiled asterisk 20.4.0 and checked. No success
res_pjsip_sdp_rtp.c:533 set_caps: No joint capabilities for ‘audio’ media stream between our configuration((ulaw|alaw)) and incoming SDP((h264))

Dahua SW 2020-03-11 V4.300.0000000.7.R, act as sip server (this allows maintain RFID keys on device)
Is somebody succeed with integration?