HTTP supports redirection just fine without it. Originally committed as revision 20361 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.6
@@ -1201,7 +1201,6 @@ mp4_muxer_select="mov_muxer" | |||||
mpegtsraw_demuxer_select="mpegts_demuxer" | mpegtsraw_demuxer_select="mpegts_demuxer" | ||||
mxf_d10_muxer_select="mxf_muxer" | mxf_d10_muxer_select="mxf_muxer" | ||||
psp_muxer_select="mov_muxer" | psp_muxer_select="mov_muxer" | ||||
redir_demuxer_deps="network" | |||||
rtp_muxer_deps="network rtp_protocol" | rtp_muxer_deps="network rtp_protocol" | ||||
rtsp_demuxer_deps="sdp_demuxer" | rtsp_demuxer_deps="sdp_demuxer" | ||||
sdp_demuxer_deps="rtp_protocol mpegts_demuxer" | sdp_demuxer_deps="rtp_protocol mpegts_demuxer" | ||||
@@ -188,7 +188,6 @@ OBJS-$(CONFIG_QCP_DEMUXER) += qcp.o | |||||
OBJS-$(CONFIG_R3D_DEMUXER) += r3d.o | OBJS-$(CONFIG_R3D_DEMUXER) += r3d.o | ||||
OBJS-$(CONFIG_RAWVIDEO_DEMUXER) += raw.o | OBJS-$(CONFIG_RAWVIDEO_DEMUXER) += raw.o | ||||
OBJS-$(CONFIG_RAWVIDEO_MUXER) += raw.o | OBJS-$(CONFIG_RAWVIDEO_MUXER) += raw.o | ||||
OBJS-$(CONFIG_REDIR_DEMUXER) += rtsp.o | |||||
OBJS-$(CONFIG_RL2_DEMUXER) += rl2.o | OBJS-$(CONFIG_RL2_DEMUXER) += rl2.o | ||||
OBJS-$(CONFIG_RM_DEMUXER) += rmdec.o rm.o | OBJS-$(CONFIG_RM_DEMUXER) += rmdec.o rm.o | ||||
OBJS-$(CONFIG_RM_MUXER) += rmenc.o rm.o | OBJS-$(CONFIG_RM_MUXER) += rmenc.o rm.o | ||||
@@ -162,7 +162,6 @@ void av_register_all(void) | |||||
REGISTER_DEMUXER (QCP, qcp); | REGISTER_DEMUXER (QCP, qcp); | ||||
REGISTER_DEMUXER (R3D, r3d); | REGISTER_DEMUXER (R3D, r3d); | ||||
REGISTER_MUXDEMUX (RAWVIDEO, rawvideo); | REGISTER_MUXDEMUX (RAWVIDEO, rawvideo); | ||||
REGISTER_DEMUXER (REDIR, redir); | |||||
REGISTER_DEMUXER (RL2, rl2); | REGISTER_DEMUXER (RL2, rl2); | ||||
REGISTER_MUXDEMUX (RM, rm); | REGISTER_MUXDEMUX (RM, rm); | ||||
REGISTER_MUXDEMUX (ROQ, roq); | REGISTER_MUXDEMUX (ROQ, roq); | ||||
@@ -1777,69 +1777,3 @@ AVInputFormat sdp_demuxer = { | |||||
sdp_read_close, | sdp_read_close, | ||||
}; | }; | ||||
#endif | #endif | ||||
#if CONFIG_REDIR_DEMUXER | |||||
/* dummy redirector format (used directly in av_open_input_file now) */ | |||||
static int redir_probe(AVProbeData *pd) | |||||
{ | |||||
const char *p; | |||||
p = pd->buf; | |||||
skip_spaces(&p); | |||||
if (av_strstart(p, "http://", NULL) || | |||||
av_strstart(p, "rtsp://", NULL)) | |||||
return AVPROBE_SCORE_MAX; | |||||
return 0; | |||||
} | |||||
static int redir_read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
{ | |||||
char buf[4096], *q; | |||||
int c; | |||||
AVFormatContext *ic = NULL; | |||||
ByteIOContext *f = s->pb; | |||||
/* parse each URL and try to open it */ | |||||
c = url_fgetc(f); | |||||
while (c != URL_EOF) { | |||||
/* skip spaces */ | |||||
for(;;) { | |||||
if (!redir_isspace(c)) | |||||
break; | |||||
c = url_fgetc(f); | |||||
} | |||||
if (c == URL_EOF) | |||||
break; | |||||
/* record url */ | |||||
q = buf; | |||||
for(;;) { | |||||
if (c == URL_EOF || redir_isspace(c)) | |||||
break; | |||||
if ((q - buf) < sizeof(buf) - 1) | |||||
*q++ = c; | |||||
c = url_fgetc(f); | |||||
} | |||||
*q = '\0'; | |||||
//printf("URL='%s'\n", buf); | |||||
/* try to open the media file */ | |||||
if (av_open_input_file(&ic, buf, NULL, 0, NULL) == 0) | |||||
break; | |||||
} | |||||
if (!ic) | |||||
return AVERROR(EIO); | |||||
*s = *ic; | |||||
url_fclose(f); | |||||
return 0; | |||||
} | |||||
AVInputFormat redir_demuxer = { | |||||
"redir", | |||||
NULL_IF_CONFIG_SMALL("Redirector format"), | |||||
0, | |||||
redir_probe, | |||||
redir_read_header, | |||||
NULL, | |||||
NULL, | |||||
}; | |||||
#endif |