[FFmpeg-cvslog] r12504 - in trunk/libavformat: rtsp.c rtsp.h

Zuxy Meng zuxy.meng
Fri Mar 21 04:47:16 CET 2008


"rbultje" <subversion at mplayerhq.hu> ??????:20080319140509.1AE3B8C0C8 at natsuki.mplayerhq.hu...
> Author: rbultje
> Date: Wed Mar 19 15:05:08 2008
> New Revision: 12504
>
> Log:
> Allow cycling between different protocols (TCP, UDP or multicast) so that 
> if
> one doesn't work, we can try the next one (i.e. trial-error protocol auto-
> probing).
>
> Discussed and approved in "[PATCH] RTSP alternate protocol 2-3/3".
>
>
>
> Modified:
>   trunk/libavformat/rtsp.c
>   trunk/libavformat/rtsp.h
>
> Modified: trunk/libavformat/rtsp.c
> ==============================================================================
> --- trunk/libavformat/rtsp.c (original)
> +++ trunk/libavformat/rtsp.c Wed Mar 19 15:05:08 2008
> @@ -922,6 +922,10 @@ make_setup_request (AVFormatContext *s,
>                  "Transport: %s\r\n",
>                  rtsp_st->control_url, transport);
>         rtsp_send_cmd(s, cmd, reply, NULL);
> +        if (reply->status_code == 461 /* Unsupported protocol */ && i == 
> 0) {
> +            err = 1;
> +            goto fail;
> +        } else
>         if (reply->status_code != RTSP_STATUS_OK ||
>             reply->nb_transports != 1) {
>             err = AVERROR_INVALIDDATA;
> @@ -1003,6 +1007,12 @@ make_setup_request (AVFormatContext *s,
>     return 0;
>
> fail:
> +    for (i=0; i<rt->nb_rtsp_streams; i++) {
> +        if (rt->rtsp_streams[i]->rtp_handle) {
> +            url_close(rt->rtsp_streams[i]->rtp_handle);
> +            rt->rtsp_streams[i]->rtp_handle = NULL;
> +        }
> +    }
>     return err;
> }
>
> @@ -1045,7 +1055,7 @@ static int rtsp_read_header(AVFormatCont
>     }
>
>     if (!protocol_mask)
> -        protocol_mask = rtsp_default_protocols;
> +        protocol_mask = (1 << RTSP_PROTOCOL_RTP_LAST) - 1;
>
>     /* open the tcp connexion */
>     snprintf(tcpname, sizeof(tcpname), "tcp://%s:%d", host, port);
> @@ -1077,9 +1087,18 @@ static int rtsp_read_header(AVFormatCont
>         goto fail;
>     }
>
> -    err = make_setup_request(s, host, port, protocol_mask);
> -    if (err)
> +    do {
> +        int protocol = protocol_mask & ~(protocol_mask - 1);
> +
> +        err = make_setup_request(s, host, port, protocol);
> +        if (err < 0)
>         goto fail;
> +        protocol_mask &= ~protocol;
> +        if (protocol_mask == 0 && err == 1) {
> +            err = AVERROR(EPROTONOSUPPORT);

EPROTONOSUPPORT isn't defined on MinGW so build is broken.
-- 
Zuxy 






More information about the ffmpeg-cvslog mailing list