Difficulties understanding SDP Offer/Answer when running pjsua

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Many thanks Regis,

I don't understand what 'pjsua cannot handle multiple codecs' or 'can only handle one codec' means in the context of sending and receiving SDP negotiation information via SIP INVITEs. 

RFC 3264:

OFFER page 6:
....
For sendrecv RTP streams, the payload type numbers indicate the value of the payload type field the offerer expects to receive, and would prefer to send.
....
In all cases, the formats in the "m=" line MUST be listed in order of?? preference, with the first format listed being preferred.? In this case, preferred means that the recipient of the offer SHOULD use the format with the highest preference that is acceptable to it.

ANSWER page 9:

For streams marked as sendrecv in the answer, the "m=" line MUST contain at least one codec the answerer is willing to both send and receive, from amongst those listed in the offer. The stream MAY indicate additional media formats, not listed in the corresponding stream in the offer, that the answerer is willing to send or receive.

OFFERER PROCESSING ANSWER page 11:
...
It (offerer) MUST send using a media format listed in the answer,
and it SHOULD use the first media format listed in the answer when it
does send.

MODIFYING ,,, page12:

At any point during the session, either participant MAY issue a new
offer to modify characteristics of the session... using
the exact same offer/answer procedure defined above...


If I have understood the RFC, the negotiation could/should be over after the initial offer and initial answer, since both parties have what they want and can process (format speex/8000). Then I don't understand why the negotiation continues with a second offer&answer pair since that adds one more round-trip to the connect processing with no new wishes provided and exchanged. It is probably blatantly obvious, but I am new to this and cannot see it.

Still struggling.....? 

Ken


--- On Sun, 4/3/12, R?gis Montoya <r3gis.3r at gmail.com> wrote:

From: R?gis Montoya <r3gis.3r@xxxxxxxxx>
Subject: Re: Difficulties understanding SDP Offer/Answer when running pjsua
To: "pjsip list" <pjsip at lists.pjsip.org>
Date: Sunday, 4 March, 2012, 7:43 PM


  

    
  
  
    Hi,

    

    I think that you'll get the answer here :

    https://trac.pjsip.org/repos/ticket/476

    

    In fact pjsip does not support multiple codec at a time. That's the
    reason why it tries to fix codec.

    That's totally RFC valid (an app can decide to change codec during
    the communication), and should normally not be a functional problem
    if the remote side behaves correctly.

    

    However, in real life it's very annoying. I don't know if the point
    is still in roadmap of enhancement of pjsip stack, but I have to say
    that this point (at least for CSipSimple users) is one of those that
    is often raised for several real world cases. 

    

    For example when remote side that does not support UPDATE correctly
    - for example some grandstream devices (I had to create a patch to
    add a "force no update" option) (I agree that in this case we can't
    blame pjsip at all ;) ).

    Or when the user first reach a server that supports all codecs
    before sending it to the real remote side : example, first reach
    some server that is media proxy when in communication but can be
    also add something in media stream using one of the codec. Then
    pjsip will force the first codec, and when the negociation will be
    done on other side you'll not get a real negotiation because only
    one codec will be proposed to remote side.

    

    So in these cases I've to tell users to force the codec they want to
    use in settings. It's often due to a bug on remote side, but
    sometimes it's also simply a use case that can't be done due to this
    limitation of pjsip. And in this case I would say that it would be
    more legitimate to say that the fix of ticket 476 is a workaround in
    pjsua rather than a real fix that would allow pjsua/pmedia to
    support multiple codecs at a time. 

    Or at least an option to do so, because I also agree to say that in
    other cases, mounting in memory all codecs instances uses more
    memory and could be something not wanted.

    

    Regards,

    R?gis

    

    On 04/03/2012 10:32, Ken Resander wrote:
    
      
        
          
            I have only just
              started using pjsua from the command line and have
              difficulties understanding the the last bit of the log
              output for sip:music at iptel.org that plays music. 

              

              Log extracts:

              

              Make call: sip:music at iptel.org

              17:35:23.976?? pjsua_call.c? Making call with acc #1 to
              sip:music at iptel.org

              

              OFFER:

              >>>INVITE sip:music at iptel.org SIP/2.0

              ...

              m=audio 40000 RTP/AVP 98 97 99 104 3 0 8 9 96

              c=IN IP4 192.168.0.2

              a=rtcp:40001 IN IP4 192.168.0.2

              a=sendrecv

              a=rtpmap:98 speex/16000

              a=rtpmap:97 speex/8000

              a=rtpmap:99 speex/32000

              a=rtpmap:104 iLBC/8000

              a=fmtp:104 mode=30

              a=rtpmap:3 GSM/8000

              a=rtpmap:0 PCMU/8000

              a=rtpmap:8 PCMA/8000

              a=rtpmap:9 G722/8000

              a=rtpmap:96 telephone-event/8000

              a=fmtp:96 0-15

              <<< INVITE 100 Trying...

              ANSWER:

              <<< INVITE 200 response

              ...

              m=audio 28108 RTP/AVP 97 104 3 0 8 96

              a=rtpmap:97 speex/8000

              a=rtpmap:104 iLBC/8000

              a=fmtp:104 mode=30

              a=rtpmap:3 GSM/8000

              a=rtpmap:0 PCMU/8000

              a=rtpmap:8 PCMA/8000

              a=rtpmap:96 telephone-event/8000

              a=fmtp:96 0-15

              

              >>>ACK sip:music at 217.9.36.144:5080 SIP/2.0

              

              

              Respondent wants speex/8000 the second item in the choice
              list of the offer. I don't understand why the offerer
              continues with the negotiation?: 

              

              OFFER:

              >>>INVITE sip:music at 217.9.36.144:5080 SIP/2.0

              m=audio 40000 RTP/AVP 97 96

              c=IN IP4 192.168.0.2

              a=rtcp:40001 IN IP4 192.168.0.2

              a=sendrecv

              a=rtpmap:97 speex/8000

              a=rtpmap:96 telephone-event/8000

              a=fmtp:96 0-15

              <<<INVITE 100 trying

              ANSWER:

              <<<INVITE 200 response

              ...

              m=audio 28108 RTP/AVP 97 96

              a=rtpmap:97 speex/8000

              a=rtpmap:96 telephone-event/8000

              a=fmtp:96 0-15

              

              

              I read RFC3264 - An Offer/Answer Model with the Session
              Description Protocol (SDP), but could not see an
              explanation for this continued negotiation. Maybe I
              misunderstood the RFC.

              

              I would like to understand this a bit better... Guidance
              most welcome.

              

              Ken

              

            
          
        
      
      

      
      

      _______________________________________________
Visit our blog: http://blog.pjsip.org

pjsip mailing list
pjsip at lists.pjsip.org
http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org

    
    

  


-----Inline Attachment Follows-----

_______________________________________________
Visit our blog: http://blog.pjsip.org

pjsip mailing list
pjsip at lists.pjsip.org
http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/attachments/20120305/f415a218/attachment-0001.html>


[Index of Archives]     [Asterisk Users]     [Asterisk App Development]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [Linux API]
  Powered by Linux