Video present in log , but not showing , while all looks OK

Hey guys, need some help from a specialist here
I have some hikvision hardware in my house as door intercom, i traced with wireshark how it works, and tried to simulate in on Asterisk
In screenshot below, 192.168.0.70 => outdoor intercom, when someone calls, the primary indoor 192.168.0.71 starts ringing, ans is also forwarding the call to the second indoor screen, 192.168.0.72
for test i pickup on second indoor screen, and the H264 video is sending from 192.168.0.70 to 192.168.0.72

Quite easy approach:


sip log:
asterisk1.txt (14.4 KB)

Now in asterisk i also setup a trunk for incoming call based on IP auth, i added another indoor registration, asterisk IP = 192.168.0.17 , with extension nr: 10000000005 (compared to 10000000001 in log above)
So in asterisk i receive an incoming call from 192.168.0.70 to 192.168.0.71 that forwards to 192.168.0.17 (ip auth trunk on asterisk)
Its actually identical as above screenshot
I see the call coming in on my softphone (6000), i can answer, i can hear audio , but the video is just missing? Whats wrong? Below is a full debug log with also rtp logging enabled (asterisk2.txt)

Can someone help me with this?

[hikvision]
type=aor
contact=sip:10010100000@192.168.0.71:5060

[hikvision]
type=endpoint
context=default
disallow=all
allow=ulaw,alaw
allow=h264,vp8
aors=hikvision

[hikvision]
type=identify
endpoint=hikvision
match=192.168.0.71

With easy dialplan below

exten => 10000000005,1,NoOp()
 same => n,Dial(PJSIP/6000)

asterisk2.txt (139.1 KB)

splitted logs with sngrep:
sip2.txt (8.3 KB)
sip1.txt (6.1 KB)

Please explain the address 192.168.0.231. which doesn’t seem to appear in your narrative, but does appear in the asterisk2 log.

Hey, thats the softphone client (extension 6000)

when i receive an call on 192.168.0.17, ip auth trunk, i dial 6000

exten => 10000000005,1,NoOp()
 same => n,Dial(PJSIP/6000)

this is config for 6000:

[6000]
type=endpoint
context=default
disallow=all
allow=ulaw,alaw
allow=h264,vp8
auth=auth6000
aors=6000
rtp_symmetric=yes
force_rport=yes
rewrite_contact=yes
direct_media=yes
max_audio_streams=10
max_video_streams=10
from_domain=mydomain.com
 
[auth6000]
type=auth
auth_type=userpass
password=xxx
username=6000
 
[6000]
type=aor
qualify_frequency=30
max_contacts=1
remove_existing=yes
remove_unavailable=yes

any idea whats missing in the config @david551 or why am i not seeing video?

thnx

Please do not tag people. If they wish to participate, then they will when they can.

Ok , sorry for inconvenience

PS: now tested also with chan_sip, but same behaviour , so not related to pjsip
I have no idea where to look :frowning: , everything looks fine to me

bump…
Anyone here with an idea what i can test/do to troubleshoot this issue?

Why do you have allow twice in your endpoint. I am not an expert in asterisk but shouldn’t it be something like allow=!all, ulaw,alaw,h264,vp8

thnx, yeah, thats maybe wrong, but it doesnt make any difference

Whilst in mixes styles, it isn’t wrong. I’d say the most common style was actually Disallow followed by multiple allows, with one codec per line.

Aren’t values overwritten when declared twice ? That is common sense in most programming languages.

There wouldn’t need to be a disallow setting, in that case.

Config files are declarative, not procedural.

The first stage parsing of config files in Asterisk keeps all the lines. The second stage is done by the individual modules and there are actually two basic strategies, which cause different behaviour for duplicates. Whilst most now process lines in order and look them up in a list of possible settings, some have a list of valid keywords and will look these up in the parsed configuration, which means that the first occurrence wins, and that invalid keywords will be silently ignored.

Allow and disallow are handled specially in that they update the codecs list incrementally. This is taken from chan_sip, as I know my way around it, but I think is true of all channel types:

			} else if (!strcasecmp(v->name, "allow")) {
				int error = ast_format_cap_update_by_allow_disallow(peer->caps, v->value, TRUE);
				if (error) {
					ast_log(LOG_WARNING, "Codec configuration errors found in line %d : %s = %s\n", v->lineno, v->name, v->value);
				}
			} else if (!strcasecmp(v->name, "disallow")) {
				int error =  ast_format_cap_update_by_allow_disallow(peer->caps, v->value, FALSE);
				if (error) {
					ast_log(LOG_WARNING, "Codec configuration errors found in line %d : %s = %s\n", v->lineno, v->name, v->value);
				}

And this is what actually updates the lists:

1 Like

hi, found this thread :

could be this my issue too? i run asterisk 18.12.1

hmm, nevermind, the 2 fixes here :

are already implemented it seems in 18.12.x