sip phone hinter fritzbox, kein ankommendes audio

Abkadu

Neuer User
Mitglied seit
8 Apr 2020
Beiträge
10
Punkte für Reaktionen
0
Punkte
1
Hallo zusammen !
Eigentlich wollte ich nur ein wenig Musik aufnehmen - über IP in Corona Zeiten - aber ich bekomme kein ankommendes Audio .......wie schon x Threads in diesem Forum.
Ich habe mich jetzt schon Tage reingekniet aber ich schaffe es nicht...
Mein Versuchsaufbau:
SIP Server Asterisk auf externem Server mit folgender SIP.conf:


Code:
[general]
context=default                 ; !!! default context for incoming calls
allowguest=no                   ; disable unauthenticated calls
srvlookup=yes                   ; enabled DNS SRV record lookup on outbound calls
udpbindaddr=0.0.0.0:5060       ; listen for UDP requests on all interfaces
tcpenable=no                    ; disable TCP support
callcounter=yes
rtptimeout=20
tcpbindaddr=0.0.0.0:5060
transport=udp
disallow=all        ; reset which voice codecs this device will accept or offer
allow=g722
allow=opus
nat=yes

[xxx1]
type=friend
host=dynamic
secret=yyyy

[xxx2]
type=friend
host=dynamic
secret=yyyy

[xxx3]
type=friend
host=dynamic
secret=yyyy

[xxx4]
type=friend
host=dynamic
secret=yyyy

die dazugehörende Extension.conf:

Code:
[general]
static=yes
writeprotect=no
priorityjumping=no
autofallthrough=yes
clearglobalvars=no

[default]
exten => xxx1,1,Dial(SIP/xxx1,10)
exten => xxx2,1,Dial(SIP/xxx2,10)
exten => xxx3,1,Dial(SIP/xxx3,10)
exten => xxx4,1,Dial(SIP/xxx4,10)

und die rtp.conf:

Code:
[general]
rtpstart=10000
rtpend=20000

In der Fritzbox sind für die Hostrechner jeweils zwei UDP Ports geöffnet und die :5060 weitergeleitet. Beide Rechner sind für selbstständige Portweiterleitungen freigegeben. Es handelt sich um ein Linphone Desktop und eine DAW mit UDP receiver (Lucy). Auf meinem Smartphone habe ich wahlweise Linphone oder Zoiper. Ist das Handy im WLAN funktioniert alles prima, ist es im Mobilfunknetz, also außerhalb, habe ich ankommendes Audio auf dem Smartphone, das Audio des Smartphones kann aber nicht empfangen werden. Ein Wireshark auf dem internen Desktop zeigt, daß der ankommende RDP Stream fehlt. Das Logfile des Linphone Desktops sagt aber etwas anderes, sind extrem lang und deshalb im nächsten Post.


Den darin abzulesenden Stream mit der UDP 61011 kriege ich nicht eingefangen. Er liegt außerhalb der rtp.conf des Asterisk und liegt jedesmal woanders. Ist das mein fehlender RTP Stream und wenn ja, wie kriege ich den eingefangen (Portfreigabe nur der notwendigsten Ports)?

Schon vorab vielen lieben Dank, ich habe bislang schon viel gelernt, aber wenn es funktionieren würde wäre es großartig !

Viele Grüße,
Abkadu

-- Zusammenführung Doppelpost by stoney

tschuldigung Linphone war sehr gesprächig, ich wußte nicht was ich weglassen kann......
 
Moinsen


Im NAT muss Asterisk erkennen können wann es extern (NAT) oder intern (no NAT) unterwegs sein muss.
Dafür braucht es...
( ganz durchlesen )
externhost oder externip.

Außerdem registriert sich Linphone an der FRITZ!Box (no NAT).
Ich sehe in der Asterisk sip.conf weder ein register= noch einen Peer für die FRITZBox.
...und wenn Linphone sich an der FRITZ!Box registriert: Mach STUN aus
...STUN ist ein NAT-Überwindungsmechanismus.
...bei dem keine Portfreigaben benötigt werden.
 
Zuletzt bearbeitet:
Sehe ich das richtig streamt der Linphonedesktop auf udp Port 61011. Das ist weit aus jeder rtp.conf. Die Rückantwort auf udp 61011 könnte das fehlende Audio sein. Wie engt man so etwas ein?
 
Code:
Contact: <sip:xxx1@Ext-IP-Fritzbox<IPv4? IPv6?>:61011;transport=udp>;+sip.instance="<urn:uuid:<hash>>"
*
Ist der SIP "Rückkanal", nicht RTP.
Der wird benutzt weil...
1. Linphone STUN nutzt
2. Deswegen auch keine Portfreigaben von Nöten sind
3. Und: Dieser Port muss von Innen für eingehende Anrufe offengehalten werden
(Aufgabe von Linphone, bei STUN Nutzung)
4. STUN - Wenn dann über SIP die RTP Ports mitgeteilt wurden, gilt Obiges auch für RTP
...für die Dauer des Telefonats.

Die wirklich wichtigen Logausgaben hast du leider unterschlagen ;)

Tipp: Achte aufs CSeq: und User-Agent: oder Server:
Beispiel für das was wir hier nicht brauchen...
CSeq: PUBLISH
CSeq: SUBSCRIBE

Beispiel für die interessanten Sachen...
CSeq: REGISTER
CSeq: INVITE
...und vielleicht noch...
CSeq: ACK
CSeq: BYE


* Unleserliches mit <hash> verkürzen IPs nach Art: <IPv6> oder <IPv4>
 
Zuletzt bearbeitet:
Hallo Koyaanisqatsi, das was du da gefunden hast habe ich übersehen. Die Log Einträge sind 1 zu 1, habe nur die Usernamen und IPs ersetzt. Das muß ich prüfen was das ist.

Den Stun Server von Ekiga hatte ich mal drin, der ist aber schon vor den Logs entfernt gewesen. Deine Tipps setz ich um, bis später und vielen Dank !
 
OK, lassen wir mal STUN außer Acht.
Vielleicht haste ein Codec Problem.

Konfiguriere im Asterisk diese Codecs in einem Rutsch...
Code:
[general]
;disallow=all        ; reset which voice codecs this device will accept or offer
;allow=g722
;allow=opus
allow:!all,alaw,ulaw
Und nicht vergessen in der *-Konsole: sip reload
SIP Settings, ob alles übernommen wurde: sip show settings
Das ist die meinerseits sogenannte "Weltcodecprioritätenliste".
Server-, Gerätekombatibilität: Europa, Asien, Amerika, ... etc. etc.
( Codecs in Linphone nicht vergessen ;) )
...gehts dann?

Anschliessend kannst du zusätzliche Codecs im Peer/User Abschnitt ausprobieren...
Code:
[xxx1]
allow=!all,g722,opus,alaw,ulaw
...so siehste auch gleich die Prioritätenreihenfolge.
( Beste Zuerst, Schlechteste Zuletzt )
Wurde es so auch nach sip reload übernommen?
*-Konsole: sip show peer xxx1

Laufende Verbindung mit Codec: sip show channels

( Sicher, dass Linphone kein STUN nutzt? )
 
Zuletzt bearbeitet:
Die neue Sip.conf wäre dann:

Code:
[general]
context=default                 ; !!! default context for incoming calls
realm:SIP-Server        ; systemname of server
allowguest=no                   ; disable unauthenticated calls
srvlookup=yes                   ; enabled DNS SRV record lookup on outbound calls
udpbindaddr=0.0.0.0:5060        ; listen for UDP requests on all interfaces
tcpenable=no                    ; disable TCP support
rtptimeout=20
tcpbindaddr=0.0.0.0:5060
transport=udp
nat=yes
allow:!all,alaw,ulaw


[xxx1]
type=friend
host=dynamic
secret=xxxx

[xxx2]
type=friend
host=dynamic
secret=xxxx

[xxx3]
type=friend
host=dynamic
secret=xxxx

[xxx4]
type=friend
host=dynamic
secret=xxxx

Daraufhin ging mein Zoiper nicht mehr. Ich weiß noch nicht wie man da Codecs einstellt. Deswegen die Linphone desktop logs jetzt mit einem Android Smartphone und Linphone verbunden.
 
In CSeq: 21 INVITE:
a=candidate:1 1 UDP 2130706431 Intern Desktop <IPv4> 5011 typ host
a=candidate:1 2 UDP 2130706430 Intern Desktop <IPv4> 5012 typ host
a=candidate:2 1 UDP 1694498815 Fritzbox-ext<IPv4> 5011 typ srflx raddr Intern Desktop <IPv4> rport 5011
a=candidate:2 2 UDP 1694498814 Fritzbox-ext<IPv4> 5012 typ srflx raddr Intern Desktop <IPv4> rport 5012
Sind das die beiden RTPs für Audio? Diese beiden Ports UDP 5011 und UDP 5012 sind für den Desktop auf der Fritzbox auf. Desweiteren habe ich die UDP Ports 60.000 bis 65.535 und die 5060 bis 5061 weitergeleitet.

Leider bislang ohne Erfolg...........
 
Zoiper.jpg
Codecs auf Zoiper umgestellt. RTP Flow auf Linphone Desktop Wireshark bleibt einbeinig
 
Du musst G.711* im Klienten aktivieren.
Das ist das Mindeste was ein SIP-Klient für Audio immer draufhaben muss, sonst nichts Blabla.
...erst danach die guten Codecs zusätzlich, aber immer mit G.711 zum Laufen bringen.
Die "anspruchsvolleren" Codecs immer an den Anfang, ich empfehle mal: G.722 (g722)
Also im Falle von Asterisk: allow=!all,g722,alaw,ulaw
Und das empfehle ich auch für die Klienten.
Aber es gilt immer noch: Absatz 1, 1. Satz ;)

Sind das die beiden RTPs für Audio?
Ja + Nein, die findest du in der SDP** unter m ...
Code:
m=audio 5011 RTP/AVPF 96 97 98 0 8 3 9 18 99 100 10 11 101 102 103 104 105
...direkt hinter audio.
Hinter RTP/AVPF befinden sich diese a's...
Code:
a=rtpmap:96 opus/48000/2
a=fmtp:96 useinbandfec=1
a=rtpmap:97 speex/16000
a=fmtp:97 vbr=on
a=rtpmap:98 speex/8000
a=fmtp:98 vbr=on
a=fmtp:18 annexb=yes
a=rtpmap:99 speex/32000
a=fmtp:99 vbr=on
a=rtpmap:100 BV16/8000
a=rtpmap:101 telephone-event/48000
a=rtpmap:102 telephone-event/16000
a=rtpmap:103 telephone-event/8000
a=rtpmap:104 telephone-event/32000
a=rtpmap:105 telephone-event/44100
(Kein G.711 :( )
...welche die Codecprioritätenliste repräsentieren.
Die nächsten a "Kanditaten" ...
Code:
a=candidate:1 1 UDP 2130706431 Intern Desktop <IPv4> 5011 typ host
a=candidate:1 2 UDP 2130706430 Intern Desktop <IPv4> 5012 typ host
a=candidate:2 1 UDP 1694498815 Fritzbox-ext<IPv4> 5011 typ srflx raddr Intern Desktop <IPv4> rport 5011
a=candidate:2 2 UDP 1694498814 Fritzbox-ext<IPv4> 5012 typ srflx raddr Intern Desktop <IPv4> rport 5012
...scheint der Weg zu sein den RTP nehmen will.

Probier Linphone mal ohne ICE, nur mit STUN Server.
( Wenn die <IPv4>'s und rport nicht logisch sind )


* aLAW, uLAW auch bekannt als PCMA, PCMU
** Content-Type: application/sdp
 
Zuletzt bearbeitet:
Code:
s=Asterisk PBX 13.18.3~dfsg-1ubuntu4
c=IN IP4 <IPv4-Public>
t=0 0
m=audio 36598 RTP/AVPF 0 8 3 103
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:3 GSM/8000
PCMA/aLAW in Europa, für den Rest der Welt dann: PCMU/uLAW ;)
GSM brauchste nicht, ist nur für die internen Asterisk Sprachprompts.
...und wird nicht in der Codecliste benötigt.
...die *.gsm Sprachprompts müssen sowieso (nach alaw, ulaw, g722, etc.) transkodiert werden.

Also Linphone bietet Asterisk an...
Code:
a=rtpmap:96 opus/48000/2
a=fmtp:96 useinbandfec=1
a=rtpmap:97 speex/16000
a=fmtp:97 vbr=on
a=rtpmap:98 speex/8000
a=fmtp:98 vbr=on
a=fmtp:18 annexb=yes
a=rtpmap:99 speex/32000
a=fmtp:99 vbr=on
a=rtpmap:100 BV16/8000
a=rtpmap:101 telephone-event/48000
a=rtpmap:102 telephone-event/16000
a=rtpmap:103 telephone-event/8000
a=rtpmap:104 telephone-event/32000
a=rtpmap:105 telephone-event/44100
Wo ist da was von PCMA/PCMU zu sehen?
...und diese telephone-event mit Hz?
...das sind doch nur NOTIFY's (Text) auf ein SUBSCRIBE (BLF/MWI).
...versteh ich nicht.
Einmal versucht es Linphone sogar...
Code:
m=audio 5011 RTP/AVPF 0 103
a=rtpmap:103 telephone-event/8000
...ohne Codec.

Den User-Agent: von Zoiper kann ich nicht erkennen.
Du hast eindeutig ein Codec Problem.

Das Log kannste löschen, wenn du willst.
...ist nicht alles <Unkenntlich>
 
Hallo koyaanisqatsi, erstmal vielen lieben Dank. Habe Config gelöscht, ist eh nur mein Spielserver. Dann muß ich da mal auf die Suche gehen und war auf dem Holzweg. Zwei Fragen zum Verständnis:
Ich dachte Asterisk gibt die Codecs vor, egal was auf den Clients eingeschaltet ist ? Das scheint aber nicht der Fall zu sein.
Der Asterisk sendet zwischen dem ersten Invite und dem Re-invite (erkennbar an dem Flag) zwischen 6 und 10 Pakete auf die UDPs der Clients. Erst nach dem Reinvite wird die UDP Verbindung zwischen den Clients direkt gestartet. Was sendet Asterisk da?
 
Asterisk Konsole: sip set debug on
Für die SIP Aushandlungen.

Die zehn Pakete kamen bestimmt von: rtp set debug on
...zeigt dir den RTP Flow an.

Wenn dir die Ausgaben reichen jeweils: ... set debug off
 
Zuletzt bearbeitet:
Also Linphone bietet Asterisk an...
Code:
a=rtpmap:96 opus/48000/2
a=fmtp:96 useinbandfec=1
a=rtpmap:97 speex/16000
a=fmtp:97 vbr=on
a=rtpmap:98 speex/8000
a=fmtp:98 vbr=on
a=fmtp:18 annexb=yes
a=rtpmap:99 speex/32000
a=fmtp:99 vbr=on
a=rtpmap:100 BV16/8000
a=rtpmap:101 telephone-event/48000
a=rtpmap:102 telephone-event/16000
a=rtpmap:103 telephone-event/8000
a=rtpmap:104 telephone-event/32000
a=rtpmap:105 telephone-event/44100
Wo ist da was von PCMA/PCMU zu sehen?
...und diese telephone-event mit Hz?
...das sind doch nur NOTIFY's (Text) auf ein SUBSCRIBE (BLF/MWI).
...versteh ich nicht.
Hättest du vollständig zitierst, wäre dir aufgefallen, dass in der m-line 0 und 8 als statische Payloadtypes enthalten sind.
Bei statischen Payloadtypes sind keine Attribute (a-lines) notwendig...
Die telephone-events sind unterschiedliche DTMF-Übertragungen (RFC4733) für die verschiedenen Abtastraten der entsprechenden Codecs.

Einmal versucht es Linphone sogar...
Code:
m=audio 5011 RTP/AVPF 0 103
a=rtpmap:103 telephone-event/8000
...ohne Codec.

Den User-Agent: von Zoiper kann ich nicht erkennen.
Du hast eindeutig ein Codec Problem.

Das Log kannste löschen, wenn du willst.
...ist nicht alles <Unkenntlich>
Wie kommst du hier auf "ohne Codec"?
0 als statischer Payloadtype heißt doch einfach PCMU....
 
Danke, OK war mir nicht klar, bzw. wusste ich nicht.
 
Es war, ich traue es mich fast nicht zu sagen ein mega schlechter Empfang im Mobilfunknetz so dass das RTP Audio schlicht nicht empfangen und gesendet werden konnte.......Vielen Dank für die Unterstützung und viele Grüße
 
[…] in der m-line 0 und 8 als statische Payloadtypes enthalten sind. Bei statischen Payloadtypes sind keine Attribute (a-lines) notwendig.
Noch ein kleiner Nachtrag. Ja, das ist eine dieser Stellen wo man merkt, dass SDP und SIP nicht von den selben Autoren stammen bzw. SDP ein Stückchen älter als SIP ist. In SDP ist vieles nicht so selbstbeschreibend wie in SIP. Wie Meester Proper richtig schreibt, was zählt ist die Zeile media. koyaanisqatsi, alle statischen Types findest Du unter …

Wenn Du in Deinem Digium Asterisk die SIP-Compact-Header aktivierst, dann lässt der Asterisk die Beschreibungen von statischen Typen weg. Rein semantisch haben SIP-Compact-Header nichts mit den SDP-RTP-Payload-Types zu tun, aber wurde halt so in Asterisk umgesetzt …
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.