Re: [Opalvoip-user] Early media
Brought to you by:
csoutheren,
rjongbloed
|
From: Robert J. <ro...@vo...> - 2008-10-14 02:07:03
|
I don't have time to go through all this in detail. Note I don't KNOW the
answers, I have to work it out from the code. OPAL is far too complicated to
just know every possibly usage! So all I can do is give some comments on
what to look for.
First, you MUST do the OpenSourceMediaStreams BEFORE the call to OnAlerting
or it will not work. OnAlerting checks to see if media streams are open so
that it can send the appropriate command to the remote, e.g. an ALERTING
with fast connect media.
Second, yes, I think slow start H.323 might be a problem as we will not have
remote capabilities at the time that OpenSourceMediaStreams is called. There
are two thoughts I have:
. Initialise G.711 in the H.323 remote capabilities on creation of
the H323Connection. It is (nearly) compulsory according to H.323 and is
probably always there.
. Override OpalManager::OnAnswerCall() to return
AnswerCallAlertWithMedia. The down side of this is that it will only work if
you have control over the application. This might be the case for you, I
don't know.
Robert Jongbloed
OPAL/OpenH323/PTLib Architect and Co-founder.
From: Yuriy Cherniavsky [mailto:yur...@gm...]
Sent: Tuesday, 14 October 2008 2:02 AM
To: opa...@li...
Cc: 'Robert Jongbloed'
Subject: RE: [Opalvoip-user] Early media
Thanks for your reply Robert.
I already try this combination of OpenSourceMediaStreams and OnAlerting
order, and
Unfortunately it does not work for H323 incoming call.
I call from OpelPhone to my OPAL instance by H323 protocol. I need that
early media work for
calls with and without FastStart.
After OpenSourceMediaStreams in log file I see:
...
8:14.221 Opal Answer:5300 3 call.cxx(399)
Call OpenSourceMediaStreams opening audio session 0 on
Call[xde14d8357]-EP<voipadapt>[adaptconnection/7]
8:52.833 PTLib Housekeeper:5088 5 osutils.cxx(82)
PTLib Destroyed external thread 0x0B4DE118 for id 3120
9:00.001 Opal Answer:5300 5 adaptopalconnection.cpp(118)
AdaptOpalConnection ---=GetMediaFormats=---
9:06.980 Opal Answer:5300 5 adaptopalconnection.h(164)
AdaptOpalConnection ---=GetLocalMediaFormats=---
9:06.980 Opal Answer:5300 5 adaptopalconnection.h(169)
AdaptOpalConnection ---=AdjustMediaFormats=---
9:06.980 Opal Answer:5300 5 adaptopalendpoint.h(187)
AdaptOpalEndPoint ---=AdjustMediaFormats=---
9:06.981 Opal Answer:5300 5 adaptopalmanager.h(169)
AdaptOpalManager ---=AdjustMediaFormats=---
9:06.981 Opal Answer:5300 4 call.cxx(368)
Call GetMediaFormats for Call[xde14d8357]-EP<voipadapt>[adaptconnection/7]
9:06.989 Opal Answer:5300 2 call.cxx(502)
Call SelectMediaFormats could not find compatible media format:
source formats=G.711-uLaw-64k
sink formats=
...
This if happen because in after execution of
OpalMediaFormatList sinkMediaFormats = otherConnection->GetMediaFormats();
// call.cxx:413
sinkMediaFormats is empty!
When I try the following sequence of calling:
SetPhase(AlertingPhase);
OnAlerting();
ownerCall.OpenSourceMediaStreams(*this, OpalMediaType::Audio());
After OpenSourceMediaStreams in log file I see:
If fast start enable:
...
1:05.454 Opal Answer:3124 3 call.cxx(399)
Call OpenSourceMediaStreams opening audio session 0 on
Call[i7404d7ad2]-EP<voipadapt>[adaptconnection/2]
1:05.455 Opal Answer:3124 5 adaptopalconnection.cpp(118)
AdaptOpalConnection ---=GetMediaFormats=---
1:05.455 Opal Answer:3124 5 adaptopalconnection.h(164)
AdaptOpalConnection ---=GetLocalMediaFormats=---
1:05.460 Opal Answer:3124 5 adaptopalconnection.h(169)
AdaptOpalConnection ---=AdjustMediaFormats=---
1:05.460 Opal Answer:3124 5 adaptopalendpoint.h(187)
AdaptOpalEndPoint ---=AdjustMediaFormats=---
1:05.460 Opal Answer:3124 5 adaptopalmanager.h(169)
AdaptOpalManager ---=AdjustMediaFormats=---
1:05.465 Opal Answer:3124 4 call.cxx(368)
Call GetMediaFormats for Call[i7404d7ad2]-EP<voipadapt>[adaptconnection/2]
G.711-uLaw-64k
G.711-ALaw-64k
PCM-16
UserInput/RFC2833
1:05.479 Opal Answer:3124 5 transcoders.cxx(249)
Opal Initial source format from master:
Format Name = G.711-uLaw-64k
Media Type = audio
Payload Type = PCMU
Encoding Name = PCMU
Channels (R/W) = 1 UnsignedInt
Clock Rate (R/O) = 8000 UnsignedInt
Frame Time (R/O) = 8 UnsignedInt
Max Bit Rate (R/O) = 64000 UnsignedInt
Max Frame Size (R/O) = 8 UnsignedInt
Max Frames Per Packet (R/O) = 256 UnsignedInt
Needs Jitter (R/O) = 1 Boolean
Rx Frames Per Packet (R/W) = 240 UnsignedInt
Tx Frames Per Packet (R/W) = 20 UnsignedInt
1:05.495 Opal Answer:3124 4 mediafmt.cxx(935)
MediaFormat Merging G.711-uLaw-64k into G.711-uLaw-64k
1:05.497 Opal Answer:3124 5 transcoders.cxx(261)
Opal Initial destination format from master:
Format Name = G.711-uLaw-64k
Media Type = audio
Payload Type = PCMU
Encoding Name = PCMU
Channels (R/W) = 1 UnsignedInt
Clock Rate (R/O) = 8000 UnsignedInt
Frame Time (R/O) = 8 UnsignedInt
Max Bit Rate (R/O) = 64000 UnsignedInt
Max Frame Size (R/O) = 8 UnsignedInt
Max Frames Per Packet (R/O) = 256 UnsignedInt
Needs Jitter (R/O) = 1 Boolean
Rx Frames Per Packet (R/W) = 240 UnsignedInt
Tx Frames Per Packet (R/W) = 20 UnsignedInt
1:05.509 Opal Answer:3124 4 mediafmt.cxx(935)
MediaFormat Merging G.711-uLaw-64k into G.711-uLaw-64k
1:05.510 Opal Answer:3124 4 mediafmt.cxx(935)
MediaFormat Merging G.711-uLaw-64k into G.711-uLaw-64k
1:05.511 Opal Answer:3124 4 mediafmt.cxx(935)
MediaFormat Merging G.711-uLaw-64k into G.711-uLaw-64k
1:05.512 Opal Answer:3124 3 call.cxx(496)
Call Selected media formats G.711-uLaw-64k -> G.711-uLaw-64k
1:05.513 Opal Answer:3124 5 adaptopalconnection.h(174)
AdaptOpalConnection ---=OpenMediaStream=---
1:05.514 Opal Answer:3124 5 adaptopalconnection.cpp(130)
AdaptOpalConnection ---=CreateMediaStream=--- sessionID=1 isSource=1
1:05.515 Opal Answer:3124 5 mediastrm.cxx(78)
Media Created Source 0B4F7D60
1:05.516 Opal Answer:3124 5 adaptopalmediastream.cpp(21)
---=AdaptOpalMediaStream::AdaptOpalMediaStream(conn=Call[i7404d7ad2]-EP<voip
adapt>[adaptconnection/2] mediaFormat=G.711-uLaw-64k sessionID=1
isSource=1)=--- this:0B4F7D60
1:05.518 Opal Answer:3124 5 adaptopalmediastream.cpp(35)
AdaptOpalMediaStream ---=Open=---
1:05.518 Opal Answer:3124 5 adaptopalconnection.h(210)
AdaptOpalConnection ---=OnOpenMediaStream=---
1:05.519 Opal Answer:3124 5 adaptopalendpoint.h(192)
AdaptOpalEndPoint ---=OnOpenMediaStream=---
1:05.519 Opal Answer:3124 5 adaptopalmanager.h(179)
AdaptOpalManager ---=OnOpenMediaStream=---
1:05.520 Opal Answer:3124 3 manager.cxx(672)
OpalMan OnOpenMediaStream
Call[i7404d7ad2]-EP<voipadapt>[adaptconnection/2],AdaptOpalMediaStream-Sourc
e-G.711-uLaw-64k
1:05.521 Opal Answer:3124 3 connection.cxx(563)
OpalCon Opened source stream i7404d7ad2_1 with format G.711-uLaw-64k
1:07.885 Opal Answer:3124 3 h323caps.cxx(2229)
H323 Found capability: G.711-uLaw-64k <2>
1:07.885 Opal Answer:3124 2 h323.cxx(3646)
H323 OpenMediaStream could not open logical channel for G.711-uLaw-64k
1:07.886 Opal Answer:3124 5 adaptopalmediastream.cpp(43)
AdaptOpalMediaStream ---=Close=---
1:07.886 Opal Answer:3124 4 mediastrm.cxx(184)
Media Closing stream AdaptOpalMediaStream-Source-G.711-uLaw-64k
1:07.886 Opal Answer:3124 5 adaptopalconnection.h(184)
AdaptOpalConnection ---=CloseMediaStream1=---
1:07.887 Opal Answer:3124 5 adaptopalmediastream.cpp(43)
AdaptOpalMediaStream ---=Close=---
1:07.888 Opal Answer:3124 5 adaptopalconnection.h(215)
AdaptOpalConnection ---=OnClosedMediaStream=---
1:07.889 Opal Answer:3124 5 adaptopalendpoint.h(197)
AdaptOpalEndPoint ---=OnClosedMediaStream=---
1:07.892 Opal Answer:3124 5 adaptopalmanager.h(189)
AdaptOpalManager ---=OnClosedMediaStream=---
1:07.892 Opal Answer:3124 5 adaptopalmediastream.cpp(43)
AdaptOpalMediaStream ---=Close=---
...
If fast start disable:
...
4:10.776 Opal Answer:5252 3 call.cxx(399)
Call OpenSourceMediaStreams opening audio session 0 on
Call[r78b3ceeb1]-EP<voipadapt>[adaptconnection/1]
4:10.777 Opal Answer:5252 5 adaptopalconnection.cpp(118)
AdaptOpalConnection ---=GetMediaFormats=---
4:10.778 Opal Answer:5252 5 adaptopalconnection.h(164)
AdaptOpalConnection ---=GetLocalMediaFormats=---
4:10.782 Opal Answer:5252 5 adaptopalconnection.h(169)
AdaptOpalConnection ---=AdjustMediaFormats=---
4:10.782 Opal Answer:5252 5 adaptopalendpoint.h(187)
AdaptOpalEndPoint ---=AdjustMediaFormats=---
4:10.783 Opal Answer:5252 5 adaptopalmanager.h(169)
AdaptOpalManager ---=AdjustMediaFormats=---
4:10.785 Opal Answer:5252 4 call.cxx(368)
Call GetMediaFormats for Call[r78b3ceeb1]-EP<voipadapt>[adaptconnection/1]
G.711-uLaw-64k
G.711-ALaw-64k
PCM-16
UserInput/RFC2833
4:10.800 Opal Answer:5252 5 transcoders.cxx(249)
Opal Initial source format from master:
Format Name = G.711-uLaw-64k
Media Type = audio
Payload Type = PCMU
Encoding Name = PCMU
Channels (R/W) = 1 UnsignedInt
Clock Rate (R/O) = 8000 UnsignedInt
Frame Time (R/O) = 8 UnsignedInt
Max Bit Rate (R/O) = 64000 UnsignedInt
Max Frame Size (R/O) = 8 UnsignedInt
Max Frames Per Packet (R/O) = 256 UnsignedInt
Needs Jitter (R/O) = 1 Boolean
Rx Frames Per Packet (R/W) = 240 UnsignedInt
Tx Frames Per Packet (R/W) = 20 UnsignedInt
4:10.827 Opal Answer:5252 4 mediafmt.cxx(935)
MediaFormat Merging G.711-uLaw-64k into G.711-uLaw-64k
4:10.828 Opal Answer:5252 5 transcoders.cxx(261)
Opal Initial destination format from master:
Format Name = G.711-uLaw-64k
Media Type = audio
Payload Type = PCMU
Encoding Name = PCMU
Channels (R/W) = 1 UnsignedInt
Clock Rate (R/O) = 8000 UnsignedInt
Frame Time (R/O) = 8 UnsignedInt
Max Bit Rate (R/O) = 64000 UnsignedInt
Max Frame Size (R/O) = 8 UnsignedInt
Max Frames Per Packet (R/O) = 256 UnsignedInt
Needs Jitter (R/O) = 1 Boolean
Rx Frames Per Packet (R/W) = 240 UnsignedInt
Tx Frames Per Packet (R/W) = 20 UnsignedInt
4:10.844 Opal Answer:5252 4 mediafmt.cxx(935)
MediaFormat Merging G.711-uLaw-64k into G.711-uLaw-64k
4:10.852 Opal Answer:5252 4 mediafmt.cxx(935)
MediaFormat Merging G.711-uLaw-64k into G.711-uLaw-64k
4:10.854 Opal Answer:5252 4 mediafmt.cxx(935)
MediaFormat Merging G.711-uLaw-64k into G.711-uLaw-64k
4:10.862 Opal Answer:5252 3 call.cxx(496)
Call Selected media formats G.711-uLaw-64k -> G.711-uLaw-64k
4:10.864 Opal Answer:5252 5 adaptopalconnection.h(174)
AdaptOpalConnection ---=OpenMediaStream=---
4:10.864 Opal Answer:5252 5 adaptopalconnection.cpp(130)
AdaptOpalConnection ---=CreateMediaStream=--- sessionID=1 isSource=1
4:10.865 Opal Answer:5252 5 mediastrm.cxx(78)
Media Created Source 0B4E0288
4:10.865 Opal Answer:5252 5 adaptopalmediastream.cpp(21)
---=AdaptOpalMediaStream::AdaptOpalMediaStream(conn=Call[r78b3ceeb1]-EP<voip
adapt>[adaptconnection/1] mediaFormat=G.711-uLaw-64k sessionID=1
isSource=1)=--- this:0B4E0288
4:10.867 Opal Answer:5252 5 adaptopalmediastream.cpp(35)
AdaptOpalMediaStream ---=Open=---
4:10.867 Opal Answer:5252 5 adaptopalconnection.h(210)
AdaptOpalConnection ---=OnOpenMediaStream=---
4:10.867 Opal Answer:5252 5 adaptopalendpoint.h(192)
AdaptOpalEndPoint ---=OnOpenMediaStream=---
4:10.868 Opal Answer:5252 5 adaptopalmanager.h(179)
AdaptOpalManager ---=OnOpenMediaStream=---
4:10.869 Opal Answer:5252 3 manager.cxx(672)
OpalMan OnOpenMediaStream
Call[r78b3ceeb1]-EP<voipadapt>[adaptconnection/1],AdaptOpalMediaStream-Sourc
e-G.711-uLaw-64k
4:10.871 Opal Answer:5252 3 connection.cxx(563)
OpalCon Opened source stream r78b3ceeb1_1 with format G.711-uLaw-64k
4:17.929 Opal Answer:5252 3 h323caps.cxx(2229)
H323 Found capability: G.711-uLaw-64k <2>
4:17.929 Opal Answer:5252 3 call.cxx(523)
Call IsMediaBypassPossible
Call[r78b3ceeb1]-EP<h323>[tcp$127.0.0.1:3552/12447] session 1
4:17.930 Opal Answer:5252 5 adaptopalmanager.h(174)
AdaptOpalManager ---=IsMediaBypassPossible=---
4:17.930 Opal Answer:5252 3 manager.cxx(662)
OpalMan IsMediaBypassPossible: session 1
4:17.930 Opal Answer:5252 5 adaptopalconnection.h(230)
AdaptOpalConnection ---=IsMediaBypassPossible=---
4:17.930 Opal Answer:5252 4 connection.cxx(796)
OpalCon IsMediaBypassPossible: default returns false
4:17.931 Opal Answer:5252 3 rtpconn.cxx(481)
RTP Cannot find session 1
4:17.933 Opal Answer:5252 5 adaptopalmanager.h(273)
AdaptOpalManager ---=GetNatMethod=---
4:17.933 Opal Answer:5252 5 adaptopalmanager.h(258)
AdaptOpalManager ---=IsLocalAddress=---
4:17.934 Opal Answer:5252 4 rtp.cxx(1494)
RTP_UDP Session 1, created with NAT flag set to 0
4:17.941 Opal Answer:5252 3 rtp.cxx(1660)
RTP_UDP Session 1 created: 127.0.0.1:5000-5001 ssrc=2521618630
4:17.941 Opal Answer:5252 5 adaptopalmanager.h(268)
AdaptOpalManager ---=TranslateIPAddress=---
4:17.942 Opal Answer:5252 3 call.cxx(523)
Call IsMediaBypassPossible
Call[r78b3ceeb1]-EP<h323>[tcp$127.0.0.1:3552/12447] session 1
4:17.942 Opal Answer:5252 5 adaptopalmanager.h(174)
AdaptOpalManager ---=IsMediaBypassPossible=---
4:17.942 Opal Answer:5252 3 manager.cxx(662)
OpalMan IsMediaBypassPossible: session 1
4:17.942 Opal Answer:5252 5 adaptopalconnection.h(230)
AdaptOpalConnection ---=IsMediaBypassPossible=---
4:17.944 Opal Answer:5252 4 connection.cxx(796)
OpalCon IsMediaBypassPossible: default returns false
4:17.945 Opal Answer:5252 3 rtpconn.cxx(485)
RTP Found existing session 1
4:17.946 Opal Answer:5252 5 mediastrm.cxx(78)
Media Created Sink 0B4EAD40
4:17.946 Opal Answer:5252 3 channels.cxx(666)
H323RTP Transmitter created using session 1
...
After that I have PAssertNULL in h323.cxx:3650!
Yet I try another sequence of calling
SetPhase(AlertingPhase);
OnAlerting();
SetPhase(ConnectedPhase);
OnConnectedInternal();
with and without
ownerCall.OpenSourceMediaStreams(*this, OpalMediaType::Audio());
But the result that I have in OpelPhone is opening only one media stream
from OpenPhone to my OPAL instance or opening both media streams but only
after OnConnectedInternal.
Can you explain the logic of early media that I need to correspond for
properly work of my Connection with H323 and SIP incoming calls?
Truly yours, Yuriy.
> -----Original Message-----
> From: Robert Jongbloed [mailto:ro...@vo...]
> Sent: Monday, October 13, 2008 2:33 AM
> To: 'Yuriy Cherniavsky'; opa...@li...
> Subject: RE: [Opalvoip-user] Early media
>
> To do early media you simply call OpenSourceMediaStreams at the
> opportune moment.
>
> Have a look at OpalLineConnection::SetUpConnection() in lidep.cxx it
> has:
>
> PTRACE(3, "LID Con\tGot ring back on " << line);
> // Start media before the OnAlerting to get progress tones (e.g. SIP
> 183
> response)
> if (GetMediaStream(OpalMediaType::Audio(), true) == NULL)
> ownerCall.OpenSourceMediaStreams(*this, OpalMediaType::Audio());
> SetPhase(AlertingPhase);
> OnAlerting();
>
>
>
>
> Robert Jongbloed
> OPAL/OpenH323/PTLib Architect and Co-founder.
>
>
> > -----Original Message-----
> > From: Yuriy Cherniavsky [mailto:yur...@gm...]
> > Sent: Saturday, 11 October 2008 11:38 PM
> > To: opa...@li...
> > Subject: [Opalvoip-user] Early media
> >
> > Hi OPAL community.
> >
> > I implement my own OpalEndPoint with OpalConnection and
> > OpalMediaStream,
> > similar to OPAL OpalLocalEndPoint. My module implementing first of
> > all for
> > integrate H323 with my internal protocol. I look at possibility to
> > make
> > early medial for incoming H323 call to generate progress tones,
> > before call
> > establish.
> > What sequence of OpalConnection OnXXX method call and creation of
> > MediaStreams I need to do for use of H323 and SIP early media?
> >
> > Looking at doc and in OpalLocalConnection with OpalPCSSConnection I
> > understand that after incoming call, on my Connection:
> > - to indicate that call in ringing phase must be call
> > SetPhase(AlertingPhase);
> > OnAlerting();
> > methods.
> > - when call answer must be call
> > if (LockReadWrite()) {
> > OnConnectedInternal();
> > UnlockReadWrite();
> > }
> > methods.
> > - to drop call must be call
> > Release(reason);
> > methods.
> >
> > How and when do I need create or initialize my MediaStreams for
> > proper work
> > of early media?
> >
> > Any suggestion, advice or pointing in OPAL code will be very
> > thankful.
> >
> > Truly yours, Yuriy.
> >
> >
> > ---------------------------------------------------------------------
> > ----
> > This SF.Net email is sponsored by the Moblin Your Move Developer's
> > challenge
> > Build the coolest Linux based applications with Moblin SDK & win
> > great prizes
> > Grand prize is a trip for two to an Open Source event anywhere in the
> > world
> > http://moblin-contest.org/redirect.php?banner_id=100&url=/
> > _______________________________________________
> > Opalvoip-user mailing list
> > Opa...@li...
> > https://lists.sourceforge.net/lists/listinfo/opalvoip-user
|