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 | |||||