[rtmpdump] Parsing an RTMPE URL

Anony Mous anonymous247 at gmail.com
Sun Apr 11 05:36:46 CEST 2010


FYI: Found this site which provides some interesting info about akamai streams:


On 4/10/2010 8:57 PM, Anony Mous wrote:
> Hey Howard,
>
> Thanks for the info. I tried your suggestion (with & without the 'mp4:'
> prefix), but neither seemed to work. The first one looked like this:
>
> rtmpe://cp45924.edgefcs.net/ondemand
> ?fcs_vhost=cp45924.edgefcs.net
> &auth=dbEbUdPcIdjcZd9bTdycGafdObBaqb6bRdV-blWtBI-eS-iYG-uxF3roMCo
> &aifp=v001
> &slist=s_!ctv/shows/2010/03/31/ALLMYCH-10344-EP.CLIP01.mp4
> swfUrl=http://watch.ctv.ca/Flash/player.swf
> swfVfy=1
> playpath=s_!ctv/shows/2010/03/31/ALLMYCH-10344-EP.CLIP01.mp4
>
> with this as the sent data during the connect:
>
> DEBUG2: RTMP_SendPacket: fd=21112, size=557
> 0000: 03 00 00 00 00 02 2d 14 00 00 00 00 ......-.....
> 0000: 02 00 07 63 6f 6e 6e 65 63 74 00 3f f0 00 00 00 ...connect.?....
> 0010: 00 00 00 03 00 03 61 70 70 02 00 ab 6f 6e 64 65 ......app...onde
> 0020: 6d 61 6e 64 3f 66 63 73 5f 76 68 6f 73 74 3d 63 mand?fcs_vhost=c
> 0030: 70 34 35 39 32 34 2e 65 64 67 65 66 63 73 2e 6e p45924.edgefcs.n
> 0040: 65 74 26 61 75 74 68 3d 64 62 45 62 55 64 50 63 et&auth=dbEbUdPc
> 0050: 49 64 6a 63 5a 64 39 62 54 64 79 63 47 61 66 64 IdjcZd9bTdycGafd
> 0060: 4f 62 42 61 71 62 36 62 52 64 56 2d 62 6c 57 74 ObBaqb6bRdV-blWt
> 0070: 42 49 2d 65 53 2d 69 59 47 2d 75 78 46 33 72 6f BI-eS-iYG-uxF3ro
> 0000: c3 .
> 0000: 4d 43 6f 26 61 69 66 70 3d 76 30 30 31 26 73 6c MCo&aifp=v001&sl
> 0010: 69 73 74 3d 73 5f 21 63 74 76 2f 73 68 6f 77 73 ist=s_!ctv/shows
> 0020: 2f 32 30 31 30 2f 30 33 2f 33 31 2f 41 4c 4c 4d /2010/03/31/ALLM
> 0030: 59 43 48 2d 31 30 33 34 34 2d 45 50 2e 43 4c 49 YCH-10344-EP.CLI
> 0040: 50 30 31 2e 6d 70 34 00 06 73 77 66 55 72 6c 02 P01.mp4..swfUrl.
> 0050: 00 24 68 74 74 70 3a 2f 2f 77 61 74 63 68 2e 63 .$http://watch.c
> 0060: 74 76 2e 63 61 2f 46 6c 61 73 68 2f 70 6c 61 79 tv.ca/Flash/play
> 0070: 65 72 2e 73 77 66 00 05 74 63 55 72 6c 02 00 c7 er.swf..tcUrl...
> 0000: c3 .
> 0000: 72 74 6d 70 65 3a 2f 2f 63 70 34 35 39 32 34 2e rtmpe://cp45924.
> 0010: 65 64 67 65 66 63 73 2e 6e 65 74 2f 6f 6e 64 65 edgefcs.net/onde
> 0020: 6d 61 6e 64 3f 66 63 73 5f 76 68 6f 73 74 3d 63 mand?fcs_vhost=c
> 0030: 70 34 35 39 32 34 2e 65 64 67 65 66 63 73 2e 6e p45924.edgefcs.n
> 0040: 65 74 26 61 75 74 68 3d 64 62 45 62 55 64 50 63 et&auth=dbEbUdPc
> 0050: 49 64 6a 63 5a 64 39 62 54 64 79 63 47 61 66 64 IdjcZd9bTdycGafd
> 0060: 4f 62 42 61 71 62 36 62 52 64 56 2d 62 6c 57 74 ObBaqb6bRdV-blWt
> 0070: 42 49 2d 65 53 2d 69 59 47 2d 75 78 46 33 72 6f BI-eS-iYG-uxF3ro
> 0000: c3 .
> 0000: 4d 43 6f 26 61 69 66 70 3d 76 30 30 31 26 73 6c MCo&aifp=v001&sl
> 0010: 69 73 74 3d 73 5f 21 63 74 76 2f 73 68 6f 77 73 ist=s_!ctv/shows
> 0020: 2f 32 30 31 30 2f 30 33 2f 33 31 2f 41 4c 4c 4d /2010/03/31/ALLM
> 0030: 59 43 48 2d 31 30 33 34 34 2d 45 50 2e 43 4c 49 YCH-10344-EP.CLI
> 0040: 50 30 31 2e 6d 70 34 00 04 66 70 61 64 01 00 00 P01.mp4..fpad...
> 0050: 0c 63 61 70 61 62 69 6c 69 74 69 65 73 00 40 2e .capabilities. at .
> 0060: 00 00 00 00 00 00 00 0b 61 75 64 69 6f 43 6f 64 ........audioCod
> 0070: 65 63 73 00 40 a8 ee 00 00 00 00 00 00 0b 76 69 ecs. at .........vi
> 0000: c3 .
> 0000: 64 65 6f 43 6f 64 65 63 73 00 40 6f 80 00 00 00 deoCodecs. at o....
> 0010: 00 00 00 0d 76 69 64 65 6f 46 75 6e 63 74 69 6f ....videoFunctio
> 0020: 6e 00 3f f0 00 00 00 00 00 00 00 00 09 n.?..........
> DEBUG: Invoking connect
>
>
> If I use the 'mp4:' prefix, things look like this:
>
> rtmpe://cp45924.edgefcs.net/ondemand?fcs_vhost=cp45924.edgefcs.net
> &auth=dbEcBdbbJdic7c3cXdPdhbTcocSafdaa3ax-blWtHY-eS-iYG-vxF2soLCw
> &aifp=v001
> &slist=mp4:s_!ctv/shows/2010/03/31/ALLMYCH-10344-EP.CLIP01.mp4
> swfUrl=http://watch.ctv.ca/Flash/player.swf
> swfVfy=1
> playpath=mp4:s_!ctv/shows/2010/03/31/ALLMYCH-10344-EP.CLIP01.mp4
>
>
> DEBUG2: RTMP_SendPacket: fd=21212, size=565
> 0000: 03 00 00 00 00 02 35 14 00 00 00 00 ......5.....
> 0000: 02 00 07 63 6f 6e 6e 65 63 74 00 3f f0 00 00 00 ...connect.?....
> 0010: 00 00 00 03 00 03 61 70 70 02 00 af 6f 6e 64 65 ......app...onde
> 0020: 6d 61 6e 64 3f 66 63 73 5f 76 68 6f 73 74 3d 63 mand?fcs_vhost=c
> 0030: 70 34 35 39 32 34 2e 65 64 67 65 66 63 73 2e 6e p45924.edgefcs.n
> 0040: 65 74 26 61 75 74 68 3d 64 62 45 63 42 64 62 62 et&auth=dbEcBdbb
> 0050: 4a 64 69 63 37 63 33 63 58 64 50 64 68 62 54 63 Jdic7c3cXdPdhbTc
> 0060: 6f 63 53 61 66 64 61 61 33 61 78 2d 62 6c 57 74 ocSafdaa3ax-blWt
> 0070: 48 59 2d 65 53 2d 69 59 47 2d 76 78 46 32 73 6f HY-eS-iYG-vxF2so
> 0000: c3 .
> 0000: 4c 43 77 26 61 69 66 70 3d 76 30 30 31 26 73 6c LCw&aifp=v001&sl
> 0010: 69 73 74 3d 6d 70 34 3a 73 5f 21 63 74 76 2f 73 ist=mp4:s_!ctv/s
> 0020: 68 6f 77 73 2f 32 30 31 30 2f 30 33 2f 33 31 2f hows/2010/03/31/
> 0030: 41 4c 4c 4d 59 43 48 2d 31 30 33 34 34 2d 45 50 ALLMYCH-10344-EP
> 0040: 2e 43 4c 49 50 30 31 2e 6d 70 34 00 06 73 77 66 .CLIP01.mp4..swf
> 0050: 55 72 6c 02 00 24 68 74 74 70 3a 2f 2f 77 61 74 Url..$http://wat
> 0060: 63 68 2e 63 74 76 2e 63 61 2f 46 6c 61 73 68 2f ch.ctv.ca/Flash/
> 0070: 70 6c 61 79 65 72 2e 73 77 66 00 05 74 63 55 72 player.swf..tcUr
> 0000: c3 .
> 0000: 6c 02 00 cb 72 74 6d 70 65 3a 2f 2f 63 70 34 35 l...rtmpe://cp45
> 0010: 39 32 34 2e 65 64 67 65 66 63 73 2e 6e 65 74 2f 924.edgefcs.net/
> 0020: 6f 6e 64 65 6d 61 6e 64 3f 66 63 73 5f 76 68 6f ondemand?fcs_vho
> 0030: 73 74 3d 63 70 34 35 39 32 34 2e 65 64 67 65 66 st=cp45924.edgef
> 0040: 63 73 2e 6e 65 74 26 61 75 74 68 3d 64 62 45 63 cs.net&auth=dbEc
> 0050: 42 64 62 62 4a 64 69 63 37 63 33 63 58 64 50 64 BdbbJdic7c3cXdPd
> 0060: 68 62 54 63 6f 63 53 61 66 64 61 61 33 61 78 2d hbTcocSafdaa3ax-
> 0070: 62 6c 57 74 48 59 2d 65 53 2d 69 59 47 2d 76 78 blWtHY-eS-iYG-vx
> 0000: c3 .
> 0000: 46 32 73 6f 4c 43 77 26 61 69 66 70 3d 76 30 30 F2soLCw&aifp=v00
> 0010: 31 26 73 6c 69 73 74 3d 6d 70 34 3a 73 5f 21 63 1&slist=mp4:s_!c
> 0020: 74 76 2f 73 68 6f 77 73 2f 32 30 31 30 2f 30 33 tv/shows/2010/03
> 0030: 2f 33 31 2f 41 4c 4c 4d 59 43 48 2d 31 30 33 34 /31/ALLMYCH-1034
> 0040: 34 2d 45 50 2e 43 4c 49 50 30 31 2e 6d 70 34 00 4-EP.CLIP01.mp4.
> 0050: 04 66 70 61 64 01 00 00 0c 63 61 70 61 62 69 6c .fpad....capabil
> 0060: 69 74 69 65 73 00 40 2e 00 00 00 00 00 00 00 0b ities. at .........
> 0070: 61 75 64 69 6f 43 6f 64 65 63 73 00 40 a8 ee 00 audioCodecs. at ...
> 0000: c3 .
> 0000: 00 00 00 00 00 0b 76 69 64 65 6f 43 6f 64 65 63 ......videoCodec
> 0010: 73 00 40 6f 80 00 00 00 00 00 00 0d 76 69 64 65 s. at o........vide
> 0020: 6f 46 75 6e 63 74 69 6f 6e 00 3f f0 00 00 00 00 oFunction.?.....
> 0030: 00 00 00 00 09 .....
> DEBUG: Invoking connect
>
>
> I have to guess that the problem is with the app or tcUrl parameters in
> the connect packet. Because the failure happens as part of the connect,
> it hasn't even gotten far enough to to send the playpath. The app and
> tcUrl are the only important things I'm aware of in the connect packet.
> I know capabilities, audiocodecs, videocodecs and videofunction are in
> there, but they're pretty hard coded. There's also pageUrl, and I guess
> its possible I need to include that... but seems doubtful to me.
>
> Any other suggestions? Did I make a mistake somewhere along the way?
>
> BTW: I've gotten librtmp compiling under win32/VisualStudio2008. There
> were a bunch of edits made to allow things to compile under visual
> studio (it didn't like the implicit casts from void * that were done in
> librtmp). Would anyone be interested in taking these changes into svn?
>
>
>
> On 4/9/2010 11:40 PM, Howard Chu wrote:
>> Anony Mous wrote:
>>> Hello,
>>>
>>> So I've been experimenting with using librtmp (the latest version from
>>> svn) integrated into XBMC.
>>> For the most part things work well, but I've been having a problem
>>> trying to connect to a video URL
>>> from a flash based TV website in Canada named CTV (only accessible
>>> from Canada I believe). I should
>>> point out that I'm only having these problems because of the different
>>> URL format of the RTMPE
>>> streams. RTMP streams work fine, it is only the encrypted streams that
>>> fail, and as I said, I think
>>> it is because of the URL format, not an encryption issue. The complete
>>> URL looks like this (notice,
>>> I'm breaking it up across multiple lines to avoid 80 char line limits):
>>>
>>> rtmpe://cp45924.edgefcs.net/ondemand/s_!ctv/shows/2010/03/31/ALLMYCH-10344-EP.CLIP01.mp4
>>>
>>>
>>> ?auth=dbEbzdDd4bLcKdgdwcAdKczdsdPaAdTd5dk-blWaqa-eS-iYG-txN4tmKCt
>>> &aifp=v001
>>> &slist=/s_!ctv/shows/2010/03/31/
>>
>> Looks like your slist= part of the URL is truncated here.
>>
>>> So I take this URL and programatically change it to this before it is
>>> passed to librtmp:
>>>
>>> rtmpe://cp45924.edgefcs.net/ondemand/s_!ctv/shows/2010/03/31/ALLMYCH-10344-EP.CLIP01.mp4
>>>
>>>
>>> swfUrl=http://watch.ctv.ca/Flash/player.swf
>>> swfVfy=true
>>> auth=dbEbzdDd4bLcKdgdwcAdKczdsdPaAdTd5dk-blWaqa-eS-iYG-txN4tmKCt
>>> authflag=true
>>> app=ondemand
>>> tcUrl=/s_!ctv/shows/2010/03/31/
>>>
>>> So this results in a connect packet like this being sent out:
>>
>>> Now, I don't think the way this video service is unique in the way it
>>> uses auth, aifp, and slist
>>> params, I'm just hoping someone knows how to transform this URL format
>>> into a connect packet that
>>> will succeed. Any advice?
>>
>> That looks like a typical Akamai CDN URL. The librtmp auth= parameter is
>> not what you think it is. I have no idea which CDN uses it, but Akamai
>> definitely does not. For the most part, you should never use the auth=
>> parameter.
>>
>> The correct URL for Akamai looks something like this:
>>
>> rtmpe://cp45924.edgefcs.net/ondemand?fcs_vhost=cp45924.edgefcs.net&auth=dbEbzdDd4bLcKdgdwcAdKczdsdPaAdTd5dk-blWaqa-eS-iYG-txN4tmKCt&aifp=v001&slist=s_!ctv/shows/2010/03/31/ALLMYCH-10344-EP.CLIP01.mp4
>>
>>
>>
>> Though I believe you also need to fix the filename and extension in this
>> case:
>>
>> rtmpe://cp45924.edgefcs.net/ondemand?fcs_vhost=cp45924.edgefcs.net&auth=dbEbzdDd4bLcKdgdwcAdKczdsdPaAdTd5dk-blWaqa-eS-iYG-txN4tmKCt&aifp=v001&slist=mp4:s_!ctv/shows/2010/03/31/ALLMYCH-10344-EP.CLIP01.mp4
>>
>>
>>
>> (Not sure though. Try it both ways.)
>>
>> So the entire string to pass to librtmp should include
>>
>> rtmpe://cp45924.edgefcs.net/ondemand?fcs_vhost=cp45924.edgefcs.net&auth=dbEbzdDd4bLcKdgdwcAdKczdsdPaAdTd5dk-blWaqa-eS-iYG-txN4tmKCt&aifp=v001&slist=s_!ctv/shows/2010/03/31/ALLMYCH-10344-EP.CLIP01.mp4
>>
>> swfurl=whatever swfvfy=1
>> playpath=s_!ctv/shows/2010/03/31/ALLMYCH-10344-EP.CLIP01.mp4
>>
>> I don't think it should need anything else.
>>
> _______________________________________________
> rtmpdump mailing list
> rtmpdump at mplayerhq.hu
> https://lists.mplayerhq.hu/mailman/listinfo/rtmpdump
>


More information about the rtmpdump mailing list