diff stream/realrtsp/real.c @ 22749:f088d69b1667

Fix for realrtsp urls with more than 2 streams: - do setup for all the streams we subscribed to - Use all bits of stream id, not only the lsbit Fixes rtsp://vodreal.stanford.edu/opa/philo/061022.rm
author rtogni
date Tue, 20 Mar 2007 22:30:51 +0000
parents 6c1fe779b704
children 8e7b3260e985
line wrap: on
line diff
--- a/stream/realrtsp/real.c	Tue Mar 20 09:53:31 2007 +0000
+++ b/stream/realrtsp/real.c	Tue Mar 20 22:30:51 2007 +0000
@@ -392,7 +392,7 @@
   
   ph.object_version=0;
   ph.length=size;
-  ph.stream_number=(flags1>>1)&1;
+  ph.stream_number=(flags1>>1)&0x1f;
   ph.timestamp=ts;
   ph.reserved=0;
   if ((flags2&1) == 0 && (prev_ts != ts || prev_stream_number != ph.stream_number))
@@ -452,6 +452,7 @@
   int status;
   uint32_t maxbandwidth = bandwidth;
   char* authfield = NULL;
+  int i;
   
   /* get challenge */
   challenge1=strdup(rtsp_search_answers(rtsp_session,"RealChallenge1"));
@@ -591,14 +592,15 @@
   sprintf(buf, "%s/streamid=0", mrl);
   rtsp_request_setup(rtsp_session,buf,NULL);
 
-  if (h->prop->num_streams > 1) {
+  /* Do setup for all the other streams we subscribed to */
+  for (i = 1; i < h->prop->num_streams; i++) {
     rtsp_schedule_field(rtsp_session, "Transport: x-pn-tng/tcp;mode=play,rtp/avp/tcp;unicast;mode=play");
     buf = xbuffer_ensure_size(buf, strlen(session_id) + 32);
     sprintf(buf, "If-Match: %s", session_id);
     rtsp_schedule_field(rtsp_session, buf);
 
     buf = xbuffer_ensure_size(buf, strlen(mrl) + 32);
-    sprintf(buf, "%s/streamid=1", mrl);
+    sprintf(buf, "%s/streamid=%d", mrl, i);
     rtsp_request_setup(rtsp_session,buf,NULL);
   }
   /* set stream parameter (bandwidth) with our subscribe string */