Module: sems
Branch: master
Commit: b878ab370de15c9ecd42be5ef72a212825e756fa
URL:    
http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=b878ab370de15c9ecd42be5ef72a212825e756fa

Author: Raphael Coeffic <[email protected]>
Committer: Raphael Coeffic <[email protected]>
Date:   Mon Mar  5 11:18:11 2012 +0100

sdp/rtp: SDP reply with same dynamic payload types

Enables SEMS to cope with Jitsi's expectations, which does not support 
different payload types in SDP answer.

---

 core/AmRtpStream.cpp |   17 ++++++++++++-----
 core/AmSdp.cpp       |    8 +++++---
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/core/AmRtpStream.cpp b/core/AmRtpStream.cpp
index 21c7390..e875612 100644
--- a/core/AmRtpStream.cpp
+++ b/core/AmRtpStream.cpp
@@ -533,18 +533,25 @@ int AmRtpStream::init(const AmSdp& local,
   // first pass on local SDP - fill pl_map with intersection of codecs
   while(p_it != payloads.end()) {
 
-    amci_payload_t* a_pl = payload_provider->payload(sdp_it->payload_type);
+    int int_pt = payload_provider->getDynPayload(sdp_it->encoding_name,
+                                                sdp_it->clock_rate,
+                                                sdp_it->encoding_param);
+    amci_payload_t* a_pl = NULL;
+    if(int_pt >= 0) 
+      a_pl = payload_provider->payload(int_pt);
+
     if(a_pl == NULL){
-      ERROR("No internal payload corresponding to type %i\n",
-           sdp_it->payload_type);
+      ERROR("No internal payload corresponding to type %s/%i\n",
+           sdp_it->encoding_name.c_str(),
+           sdp_it->clock_rate);
       return -1;//TODO
     };
     
     p_it->pt         = sdp_it->payload_type;
-    p_it->name       = a_pl->name;
+    p_it->name       = sdp_it->encoding_name;
     p_it->codec_id   = a_pl->codec_id;
     p_it->clock_rate = a_pl->sample_rate;
-    p_it->advertised_clock_rate = a_pl->advertised_sample_rate;
+    p_it->advertised_clock_rate = sdp_it->clock_rate;
 
     pl_map[sdp_it->payload_type].index     = i;
     pl_map[sdp_it->payload_type].remote_pt = -1;
diff --git a/core/AmSdp.cpp b/core/AmSdp.cpp
index b365e00..ab775f5 100644
--- a/core/AmSdp.cpp
+++ b/core/AmSdp.cpp
@@ -450,7 +450,10 @@ void SdpMedia::calcAnswer(const AmPayloadProvider* 
payload_prov,
     }
 
     if( a_pl) {
-      
answer.payloads.push_back(SdpPayload(a_pl->payload_id,a_pl->name,a_pl->sample_rate,0));
+      answer.payloads.push_back(SdpPayload(a_pl->payload_id,
+                                          a_pl->name,
+                                          a_pl->advertised_sample_rate,
+                                          0));
     }
     else {
       // Try dynamic payloads
@@ -463,8 +466,7 @@ void SdpMedia::calcAnswer(const AmPayloadProvider* 
payload_prov,
                      it->clock_rate,
                      it->encoding_param);
       if(int_pt != -1){
-       answer.payloads.push_back(SdpPayload(int_pt,
-               it->encoding_name,it->clock_rate,it->encoding_param));
+       answer.payloads.push_back(*it);
       }
     }
   }

_______________________________________________
Semsdev mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/semsdev

Reply via email to