diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index c01f954c845d339058b971ec682e38be27f4e3c2..8e639e092f6d2591d0d9ffea7d809edd5a27bf27 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -299,11 +299,17 @@ static void add_pid_to_pmt(MpegTSContext *ts, unsigned int programid,
                            unsigned int pid)
 {
     struct Program *p = get_program(ts, programid);
+    int i;
     if (!p)
         return;
 
     if (p->nb_pids >= MAX_PIDS_PER_PROGRAM)
         return;
+
+    for (i = 0; i < MAX_PIDS_PER_PROGRAM; i++)
+        if (p->pids[i] == pid)
+            return;
+
     p->pids[p->nb_pids++] = pid;
 }