My URL looks the following: rtmp://vod.daserste.de:8080/ardfs/mp4:videoportal/mediathek/Plusminus/c_320000/321891/format406703.mp4?&sen=Plusminus&clip=%27Al… and the parser creates interprets this as: app : 'ardfs/mp4:videoportal/mediathek' path: 'mp4:Plusminus/c_320000/321891/format406703?&sen=Plusminus&cl… The application is too long, as it is only "ardfs" and as a result the playpath gets wrong. I have no idea why it looks for so many slashes because the application should end after the first slash before the mp4: string. Commit f3e3e6b5 ("Look for a fourth slash when splitting the url into app+playpath") added even another one and I have no idea why. For the time now I ignore all slashes past "mp[34]:" since this should be this should mark the end the application and the start of the playpath. Signed-off-by: Sebastian Andrzej Siewior <sebastian@breakpoint.cc> --- librtmp/parseurl.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/librtmp/parseurl.c b/librtmp/parseurl.c index 646c70c..95562d4 100644 --- a/librtmp/parseurl.c +++ b/librtmp/parseurl.c @@ -34,6 +34,7 @@ int RTMP_ParseURL(const char *url, int *protocol, AVal *host, unsigned int *port AVal *playpath, AVal *app) { char *p, *end, *col, *ques, *slash; + char *mp_str; RTMP_Log(RTMP_LOGDEBUG, "Parsing..."); @@ -130,6 +131,9 @@ parsehost: } p = slash+1; + mp_str = strstr(p, "mp4:"); + if (!mp_str) + mp_str = strstr(p, "mp3:"); { /* parse application * @@ -141,10 +145,16 @@ parsehost: int applen, appnamelen; slash2 = strchr(p, '/'); - if(slash2) + if(slash2) { slash3 = strchr(slash2+1, '/'); - if(slash3) + if (mp_str && slash3 > mp_str) + slash3 = NULL; + } + if(slash3) { slash4 = strchr(slash3+1, '/'); + if (mp_str && slash4 > mp_str) + slash4 = NULL; + } applen = end-p; /* ondemand, pass all parameters as app */ appnamelen = applen; /* ondemand length */ -- 1.7.10.4