diff --git a/libavformat/rdt.c b/libavformat/rdt.c
index bb7f278163cc68956a03fc54bce8d014072564bd..a9bf4762762b3fb2301f4c5f491358f035f33390 100644
--- a/libavformat/rdt.c
+++ b/libavformat/rdt.c
@@ -63,7 +63,7 @@ ff_rdt_parse_open(AVFormatContext *ic, int first_stream_of_set_idx,
     do {
         s->n_streams++;
     } while (first_stream_of_set_idx + s->n_streams < ic->nb_streams &&
-             s->streams[s->n_streams]->priv_data == s->streams[0]->priv_data);
+             s->streams[s->n_streams]->id == s->streams[0]->id);
     s->prev_set_id    = -1;
     s->prev_stream_id = -1;
     s->prev_timestamp = -1;
@@ -76,11 +76,6 @@ ff_rdt_parse_open(AVFormatContext *ic, int first_stream_of_set_idx,
 void
 ff_rdt_parse_close(RDTDemuxContext *s)
 {
-    int i;
-
-    for (i = 1; i < s->n_streams; i++)
-        s->streams[i]->priv_data = NULL;
-
     av_free(s);
 }
 
@@ -422,7 +417,7 @@ rdt_parse_sdp_line (AVFormatContext *s, int st_index,
         int n, first = -1;
 
         for (n = 0; n < s->nb_streams; n++)
-            if (s->streams[n]->priv_data == stream->priv_data) {
+            if (s->streams[n]->id == stream->id) {
                 int count = s->streams[n]->index + 1;
                 if (first == -1) first = n;
                 if (rdt->nb_rmst < count) {
@@ -463,10 +458,9 @@ add_dstream(AVFormatContext *s, AVStream *orig_st)
 {
     AVStream *st;
 
-    if (!(st = av_new_stream(s, 0)))
+    if (!(st = av_new_stream(s, orig_st->id)))
         return NULL;
     st->codec->codec_type = orig_st->codec->codec_type;
-    st->priv_data         = orig_st->priv_data;
     st->first_dts         = orig_st->first_dts;
 
     return st;
diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index d3e88e9a5cd25437821f71da842bf07ad0b23c6e..41427ae08e5880de9171bcb9f0e1648f96953bb6 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -322,7 +322,7 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1,
         if (!strcmp(ff_rtp_enc_name(rtsp_st->sdp_payload_type), "MP2T")) {
             /* no corresponding stream */
         } else {
-            st = av_new_stream(s, 0);
+            st = av_new_stream(s, rt->nb_rtsp_streams - 1);
             if (!st)
                 return;
             rtsp_st->stream_index = st->index;
diff --git a/libavformat/rtspdec.c b/libavformat/rtspdec.c
index 45ed7bb9bbda8cd905c425157247b1f231644ab1..e484347896543a9ab906866524fa10f827cb9698 100644
--- a/libavformat/rtspdec.c
+++ b/libavformat/rtspdec.c
@@ -283,7 +283,7 @@ retry:
             for (i = 0; i < rt->nb_rtsp_streams; i++) {
                 rule_nr = 0;
                 for (r = 0; r < s->nb_streams; r++) {
-                    if (s->streams[r]->priv_data == rt->rtsp_streams[i]) {
+                    if (s->streams[r]->id == i) {
                         if (s->streams[r]->discard != AVDISCARD_ALL) {
                             if (!first)
                                 av_strlcat(rt->last_subscription, ",",