diff --git a/libavformat/udp.c b/libavformat/udp.c
index 3d159ef4f803435546f64ae6cabcdc3d2c352d26..f28bdcaa4c2c1f923bac8e2e6d246f8c7526abce 100644
--- a/libavformat/udp.c
+++ b/libavformat/udp.c
@@ -48,6 +48,7 @@ typedef struct {
  * option: 'multicast=1' : enable multicast 
  *         'ttl=n'       : set the ttl value (for multicast only)
  *         'localport=n' : set the local port
+ *         'pkt_size=n'  : set max packet size
  *
  * @param s1 media file context
  * @param uri of the remote server
@@ -104,6 +105,7 @@ static int udp_open(URLContext *h, const char *uri, int flags)
     char buf[256];
 
     h->is_streamed = 1;
+    h->max_packet_size = 1472;
 
     is_output = (flags & URL_WRONLY);
     
@@ -123,6 +125,9 @@ static int udp_open(URLContext *h, const char *uri, int flags)
         if (find_info_tag(buf, sizeof(buf), "localport", p)) {
             s->local_port = strtol(buf, NULL, 10);
         }
+        if (find_info_tag(buf, sizeof(buf), "pkt_size", p)) {
+            h->max_packet_size = strtol(buf, NULL, 10);
+        }
     }
 
     /* fill the dest addr */
@@ -191,7 +196,6 @@ static int udp_open(URLContext *h, const char *uri, int flags)
     }
 
     s->udp_fd = udp_fd;
-    h->max_packet_size = 1472; /* XXX: probe it ? */
     return 0;
  fail:
     if (udp_fd >= 0)