[rtmpdump] rtmpdump recording help
Allan Frank
allan-rtmpdump at teamcow.dk
Sun Nov 20 11:52:13 CET 2011
Hi
I've been successfully recording tv from my cable companys web offering (
yousee.tv). It's not public so I can't show you how it looks.
Unfortunately it stopped working a little over a week ago - maybe they
switched server versions.
This was the command I used to successfully record with before:
./rtmpdump -r rtmpe://live.fmis.yousee.tv/live -v -o tmp.flv -V -W
http://yousee.tv/design/swf/YouSeeVideoPlayer_beta.swf --pageUrl
http://yousee.tv/livetv/dr1?remote -y "encoder1_1200" -f "WIN 10,0,32,18"
-live -C O:1
Now this gives me:
DEBUG: Property: <Name: no-name., STRING: _error>
DEBUG: Property: <Name: no-name., NUMBER: 1.00>
DEBUG: Property: NULL
DEBUG: Property: <Name: no-name., OBJECT>
DEBUG: (object begin)
DEBUG: Property: <Name: level, STRING: error>
DEBUG: Property: <Name: code, STRING:
NetConnection.Connect.Rejected>
DEBUG: Property: <Name: description, STRING: Connection failed.>
DEBUG: Property: <Name: application, BOOLEAN: FALSE>
So I went to use rtmpsuck to see if I needed to include additional data on
the connect request using the --conn/-C command. The normal flash client
includes a HUGE amount of request data (compared to others I've seen
discussed on the net). I've included the request below but edited it
heavily to not flood you:
DEBUG: ServePacket, client sent packet type 14, size 17601 bytes
DEBUG: (object begin)
DEBUG: Property: <Name: no-name., STRING: connect>
DEBUG: Property: <Name: no-name., NUMBER: 1.00>
DEBUG: Property: <Name: no-name., OBJECT>
DEBUG: (object begin)
DEBUG: Property: <Name: app, STRING: live>
DEBUG: Property: <Name: flashVer, STRING: WIN 11,0,1,152>
DEBUG: Property: <Name: swfUrl, STRING:
http://yousee.tv/design/swf/YouSeeVideoPlayer_beta.swf>
DEBUG: Property: <Name: tcUrl, STRING: rtmpe://
live.fmis.yousee.tv/live>
DEBUG: Property: <Name: fpad, BOOLEAN: FALSE>
DEBUG: Property: <Name: capabilities, NUMBER: 239.00>
DEBUG: Property: <Name: audioCodecs, NUMBER: 3575.00>
DEBUG: Property: <Name: videoCodecs, NUMBER: 252.00>
DEBUG: Property: <Name: videoFunction, NUMBER: 1.00>
DEBUG: Property: <Name: pageUrl, STRING:
http://yousee.tv/livetv/dr1/>
DEBUG: Property: <Name: objectEncoding, NUMBER: 3.00>
DEBUG: (object end)
DEBUG: Property: <Name: no-name., OBJECT>
DEBUG: (object begin)
DEBUG: Property: <Name: channelData, OBJECT>
DEBUG: (object begin)
DEBUG: Property: <Name: channelAry, OBJECT>
DEBUG: (object begin)
DEBUG: Property: <Name: 0, OBJECT>
DEBUG: (object begin)
DEBUG: Property: <Name: url, STRING: /livetv/dr1>
DEBUG: Property: <Name: totalMillisecond, NUMBER: nan>
DEBUG: Property: <Name: logo_large, STRING:
http://cloud.yousee.tv/static/img/logos/large_dr1.png>
DEBUG: Property: <Name: id, STRING: dr1>
DEBUG: Property: <Name: xml, STRING:
http://yousee.tv/feeds/player/livetv/dr1/?1321388604.7347>
DEBUG: Property: <Name: name, STRING: DR1>
DEBUG: Property: <Name: logo_small, STRING:
http://cloud.yousee.tv/static/img/logos/small_dr1.png>
DEBUG: Property: <Name: logoUrl, STRING:
http://cloud.yousee.tv/static/img/logos/small_dr1.png>
DEBUG: Property: <Name: startMillisecond, NUMBER: nan>
DEBUG: (object end)
DEBUG: Property: <Name: 1, OBJECT>
DEBUG: (object begin)
DEBUG: Property: <Name: url, STRING: /livetv/dr2>
DEBUG: Property: <Name: totalMillisecond, NUMBER: nan>
DEBUG: Property: <Name: logo_large, STRING:
http://cloud.yousee.tv/static/img/logos/large_dr2.png>
DEBUG: Property: <Name: id, STRING: dr2>
... this continues to all the way up to object 24 - one for each channel ...
DEBUG: (object end)
DEBUG: (object end)
DEBUG: Property: NULL
DEBUG: (object end)
DEBUG: Property: <Name: token, STRING:
/cCFV5CFanarewY0IjC+kpU/3qe8cPd+esf+2TTbQNsslV7Ie81V86iVsoZ/nOtBQJZy1h1NXFN4Dw31uDXEFPfwhyccZ8RVij+sXYb27n2msR3k3ulETYD
z+KhYqA4VWbqR8MUMKyx7F5xFEYMlBmnH99acxwnJuLBEuNXZd/WIkvHGRsTDIigJEm0KJv4I7qox7BoK+rUvZgaa5ju4rPGkkDD6sN9hbsSBXZJt3eZoG61JpSeDxv>
DEBUG: Property: <Name: servertime, STRING: 2011/11/15 21:23:24
UTC+0100>
DEBUG: Property: <Name: skin, STRING: yousee>
DEBUG: Property: <Name: description, STRING: >
DEBUG: Property: <Name: timelineData, OBJECT>
DEBUG: (object begin)
DEBUG: Property: <Name: itemAry, OBJECT>
DEBUG: (object begin)
DEBUG: Property: <Name: 0, OBJECT>
DEBUG: (object begin)
DEBUG: Property: NULL
DEBUG: Property: <Name: description, STRING: >
DEBUG: Property: <Name: duration, NUMBER: 0.00>
DEBUG: Property: <Name: endMillisecond, NUMBER: 1321388700000.00>
DEBUG: Property: <Name: title, STRING: TV AVISEN>
DEBUG: Property: <Name: timeLabel, STRING: 21:00-21:25>
DEBUG: Property: <Name: original_title, STRING: >
DEBUG: Property: <Name: start, STRING: 2011/11/15 21:00:00
UTC+0100>
DEBUG: Property: <Name: startMillisecond, NUMBER: 1321387200000.00>
DEBUG: Property: <Name: director, STRING: >
DEBUG: Property: <Name: end, STRING: 2011/11/15 21:25:00
UTC+0100>DEBUG: (object end)
DEBUG: Property: <Name: 1, OBJECT>
DEBUG: (object begin)
DEBUG: Property: NULL
DEBUG: Property: <Name: description, STRING: Glem alt om hurtig
sagsbehandling, hvis du går til politiet og anmelder, at du har været udsat
for bedrageri. Efterfor
skning af økonomisk kriminalitet foregår ofte dræbende langsomt , og imens
de kriminelle fortsætter deres fupnumre, må l>
... this continues with further objects, 5 in total, which correspond to
the channel schedule ...
DEBUG: (object end)
DEBUG: (object end)
DEBUG: Property: NULL
DEBUG: Property: <Name: totalMillisecond, NUMBER: 15900000.00>
DEBUG: Property: NULL
DEBUG: Property: <Name: startMillisecond, NUMBER: 1321387200000.00>
DEBUG: Property: NULL
DEBUG: Property: <Name: currentMillisecond, NUMBER: 1321388604000.00>
DEBUG: (object end)
DEBUG: Property: <Name: streamList, OBJECT>
DEBUG: (object begin)
DEBUG: Property: <Name: 0, OBJECT>
DEBUG: (object begin)
DEBUG: Property: <Name: bitrate, NUMBER: 600.00>
DEBUG: Property: <Name: streamName, STRING: encoder1_600>
DEBUG: (object end)
DEBUG: Property: <Name: 1, OBJECT>
DEBUG: (object begin)
DEBUG: Property: <Name: bitrate, NUMBER: 1200.00>
DEBUG: Property: <Name: streamName, STRING: encoder1_1200>
DEBUG: (object end)
DEBUG: (object end)
DEBUG: Property: <Name: ratiochangeable, BOOLEAN: FALSE>
DEBUG: Property: <Name: subtitles, BOOLEAN: FALSE>
DEBUG: Property: NULL
DEBUG: Property: <Name: serverMillionSecon, NUMBER: 1321388604000.00>
DEBUG: Property: <Name: channelLogoUrl, STRING:
http://cloud.yousee.tv/static/img/logos/small_dr1.png>
DEBUG: Property: NULL
DEBUG: Property: <Name: meta, STRING: 96600|YSBB|yousee.tv
|Livetv:dr1|webtv|livetv|605991935|>
DEBUG: Property: <Name: channelName, STRING: DR1>
DEBUG: Property: <Name: type, STRING: livetv>
DEBUG: Property: NULL
DEBUG: Property: <Name: serverurl, STRING: rtmpe://
live.fmis.yousee.tv/live>
DEBUG: (object end)
DEBUG: (object end)
DEBUG: ServeInvoke, client invoking <connect>
Which concludes the client request.
Server replies with:
DEBUG: Property: <Name: code, STRING:
NetConnection.Connect.Success>
And the client is connected.
As you can see, the request is _very_ large. II've been trying with various
combinations of -C data, serverurl, channelName, type, tcUrl, etc. but with
no luck. Either my attempt results in:
DEBUG: RTMP_ClientPacket, received: invoke 126 bytes
DEBUG: (object begin)
DEBUG: Property: <Name: no-name., STRING: _error>
DEBUG: Property: <Name: no-name., NUMBER: 1.00>
DEBUG: Property: NULL
DEBUG: Property: <Name: no-name., OBJECT>
DEBUG: (object begin)
DEBUG: Property: <Name: level, STRING: error>
DEBUG: Property: <Name: code, STRING:
NetConnection.Connect.Rejected>
DEBUG: Property: <Name: description, STRING: Connection failed.>
DEBUG: Property: <Name: application, BOOLEAN: FALSE>
DEBUG: (object end)
DEBUG: (object end)
Or in:
DEBUG: RTMP_ClientPacket, received: invoke 239 bytes
DEBUG: (object begin)
DEBUG: Property: <Name: no-name., STRING: _error>
DEBUG: Property: <Name: no-name., NUMBER: 1.00>
DEBUG: Property: NULL
DEBUG: Property: <Name: no-name., OBJECT>
DEBUG: (object begin)
DEBUG: Property: <Name: level, STRING: error>
DEBUG: Property: <Name: code, STRING:
NetConnection.Connect.Rejected>
DEBUG: Property: <Name: description, STRING: Connection failed.>
DEBUG: Property: <Name: description, STRING: [ Server.Reject ] :
Adaptor: _defaultRoot_, VHost: _defaultVHost_, App: live/_definst_,
(onConnect call failed)>
DEBUG: (object end)
DEBUG: (object end)
For example the above command gives first error, whereas -C O:0 gives
second error - maybe because request no longer is valid?
I've even been trying to change the code to set serverurl, channelName with
additional AMF_EncodeNamedString() calls in SendConnectPacket, but that
also didn't work.
Server version seems to be:
DEBUG: HandShake: FMS Version : 4.0.3.1
Do you have any hints that might help? Since the client request captured
via rtmpsuck is so large, I cannot realistically produce the same via -C
options. I've been thinking about overwriting the connect packet with the
captured one and see if that would work. It's either that or finding a
DVB-C capture card... :)
The email got rather long (sorry), but if you need additional data/logs,
please say so.
Thanks,
/Allan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mplayerhq.hu/pipermail/rtmpdump/attachments/20111120/42bf59f3/attachment.html>
More information about the rtmpdump
mailing list