From: hyc Date: Sat, 20 Feb 2010 02:37:51 +0000 (+0000) Subject: Derive output name from playpath. (Code copied from rtmpsuck) X-Git-Tag: v2.4~265 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f51f554ee4fdc9e23cb5fb425795fb765dd025df;p=rtmpdump Derive output name from playpath. (Code copied from rtmpsuck) git-svn-id: svn://svn.mplayerhq.hu/rtmpdump/trunk@255 400ebc74-4327-4243-bc38-086b20814532 --- diff --git a/rtmpsrv.c b/rtmpsrv.c index 9eead68..0ec6b2e 100644 --- a/rtmpsrv.c +++ b/rtmpsrv.c @@ -388,6 +388,7 @@ ServeInvoke(STREAMING_SERVER *server, RTMP * r, RTMPPacket *packet, unsigned int } else if (AVMATCH(&method, &av_play)) { + char *file, *p, *q; RTMPPacket pc = {0}; AMFProp_GetString(AMF_GetProp(&obj, NULL, 3), &r->Link.playpath); r->Link.seekTime = AMFProp_GetNumber(AMF_GetProp(&obj, NULL, 4)); @@ -412,9 +413,45 @@ ServeInvoke(STREAMING_SERVER *server, RTMP * r, RTMPPacket *packet, unsigned int dumpAMF(&r->Link.extras); AMF_Reset(&r->Link.extras); } - printf(" -y \"%.*s\" -o output.flv\n\n", - r->Link.playpath.av_len, r->Link.playpath.av_val); + if (r->Link.playpath.av_val) + { + AVal av = r->Link.playpath; + /* strip trailing URL parameters */ + q = memchr(av.av_val, '?', av.av_len); + if (q) + av.av_len = q - av.av_val; + /* strip leading slash components */ + for (p=av.av_val+av.av_len-1; p>=av.av_val; p--) + if (*p == '/') + { + p++; + av.av_len -= p - av.av_val; + av.av_val = p; + break; + } + /* skip leading dot */ + if (av.av_val[0] == '.') + { + av.av_val++; + av.av_len--; + } + file = malloc(av.av_len+1); + + memcpy(file, av.av_val, av.av_len); + file[av.av_len] = '\0'; + for (p=file; *p; p++) + if (*p == ':') + *p = '_'; + } + else + { + file="output.flv"; + } + printf(" -y \"%.*s\" -o %s\n\n", + r->Link.playpath.av_len, r->Link.playpath.av_val, file); fflush(stdout); + if (r->Link.playpath.av_val) + free(file); } pc.m_body = server->connect; server->connect = NULL;