summaryrefslogtreecommitdiffstats
path: root/stream/stream.c
diff options
context:
space:
mode:
authorulion <ulion@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-11-26 00:41:21 +0000
committerulion <ulion@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-11-26 00:41:21 +0000
commit0bb30d41b375a5316a42a8d98af6d63bd09ef24f (patch)
treeb6db85356932524723249e91f0a424194127ebf1 /stream/stream.c
parent88f37769f2612da8e5a32733e8283268e8a1b64b (diff)
downloadmpv-0bb30d41b375a5316a42a8d98af6d63bd09ef24f.tar.bz2
mpv-0bb30d41b375a5316a42a8d98af6d63bd09ef24f.tar.xz
Support stream redirection from http to mms, fix bug #927.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25163 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'stream/stream.c')
-rw-r--r--stream/stream.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/stream/stream.c b/stream/stream.c
index 450360f182..12b0944024 100644
--- a/stream/stream.c
+++ b/stream/stream.c
@@ -145,7 +145,8 @@ stream_info_t* auto_open_streams[] = {
};
stream_t* open_stream_plugin(stream_info_t* sinfo,char* filename,int mode,
- char** options, int* file_format, int* ret) {
+ char** options, int* file_format, int* ret,
+ char** redirected_url) {
void* arg = NULL;
stream_t* s;
m_struct_t* desc = (m_struct_t*)sinfo->opts;
@@ -178,6 +179,16 @@ stream_t* open_stream_plugin(stream_info_t* sinfo,char* filename,int mode,
s->flags |= mode;
*ret = sinfo->open(s,mode,arg,file_format);
if((*ret) != STREAM_OK) {
+#ifdef MPLAYER_NETWORK
+ if (*ret == STREAM_REDIRECTED && redirected_url) {
+ if (s->streaming_ctrl && s->streaming_ctrl->url
+ && s->streaming_ctrl->url->url)
+ *redirected_url = strdup(s->streaming_ctrl->url->url);
+ else
+ *redirected_url = NULL;
+ }
+ streaming_ctrl_free(s->streaming_ctrl);
+#endif
free(s->url);
free(s);
return NULL;
@@ -204,6 +215,7 @@ stream_t* open_stream_full(char* filename,int mode, char** options, int* file_fo
int i,j,l,r;
stream_info_t* sinfo;
stream_t* s;
+ char *redirected_url = NULL;
for(i = 0 ; auto_open_streams[i] ; i++) {
sinfo = auto_open_streams[i];
@@ -218,9 +230,17 @@ stream_t* open_stream_full(char* filename,int mode, char** options, int* file_fo
((strncmp(sinfo->protocols[j],filename,l) == 0) &&
(strncmp("://",filename+l,3) == 0))) {
*file_format = DEMUXER_TYPE_UNKNOWN;
- s = open_stream_plugin(sinfo,filename,mode,options,file_format,&r);
+ s = open_stream_plugin(sinfo,filename,mode,options,file_format,&r,
+ &redirected_url);
if(s) return s;
- if(r != STREAM_UNSUPPORTED) {
+ if(r == STREAM_REDIRECTED && redirected_url) {
+ mp_msg(MSGT_OPEN,MSGL_V, "[%s] open %s redirected to %s\n",
+ sinfo->info, filename, redirected_url);
+ s = open_stream_full(redirected_url, mode, options, file_format);
+ free(redirected_url);
+ return s;
+ }
+ else if(r != STREAM_UNSUPPORTED) {
mp_msg(MSGT_OPEN,MSGL_ERR, MSGTR_FailedToOpen,filename);
return NULL;
}