Hi, all!
Preamble: I got new equipment - videophone. I tried to make it work with OpenSER (version 1.1.0). Schema: VIDEOPHONE -> OpenSER -> VIDEOPHONE I tried to make simple call.
It works but not behind NAT.
With rtpproxy OpenSER logs show such messages: ERROR: force_rtp_proxy2: can't extract media port from the message Calls last only few seconds than it get disconnected.
With mediaproxy OpenSER logs show following: Oct 16 18:01:22 sip mediaproxy[20251]: error: uncaptured python exception, closing channel <rtphandler.CommandHandler connected '' at 0x68 2ecc> (exceptions.ValueError:invalid literal for int(): 5012/1 [/usr/lib/python2.3/asyncore.pyc|readwrite|86] [/usr/lib/python2.3/asyncore .pyc|handle_read_event|390] [/usr/local/mediaproxy/modules/rtphandler.py|handle_read|441] [/usr/local/mediaproxy/modules/rtphandler.py|pro cess|531] [/usr/local/mediaproxy/modules/rtphandler.py|__init__|988] [/usr/local/mediaproxy/modules/rtphandler.py|setCaller|880])
I found that source of these troubles is that videophone generates INVITE`s in different format than for example Sipura does. Media streams are described like these: m=audio 5012/1 RTP/AVP 98 0 8. m=video 5010/1 RTP/SAVPF 99.
As you can see, sub-field "port" is not in usual format, but it contains number of ports according to RFC2327: m=<media> <port>/<number of ports> <transport> <fmt list>
So, I spended few hours examinating sources of rtpproxy and mediaproxy modules and made small trick (patch) to mediaproxy module. I didn't understand logic of rtpproxy module because lack of time. Here it is: --- ./modules/mediaproxy/mediaproxy.c 2006-03-24 21:04:56 +0300 +++ ./modules/mediaproxy/mediaproxy_new.c 2006-10-17 17:53:54 +0400 @@ -825,7 +825,7 @@ getMediaStreams(str *sdp, str *sessionIP, StreamInfo *streams, int limit) { str tokens[2], block, zone; - char *ptr, *sdpEnd; + char *ptr, *sdpEnd, *tmpptr; int i, count, streamCount, result;
sdpEnd = sdp->s + sdp->len; @@ -845,6 +845,9 @@ "line in SDP body\n"); return -1; } + + tmpptr=strchr(tokens[1].s,'/'); + if ((tmpptr-tokens[1].s)<tokens[1].len ) tokens[1].len=tmpptr-tokens[1].s;
streams[i].type = tokens[0]; streams[i].port = tokens[1];
It works for me, but I know it is not correct solution. I hope my small investigation would be useful. Thanks for your attention.
With best regards, Artur Yakupov