iptables rtmpsuck rtmpdump mplayer
i always forget this stuff, but it’s useful when i want to watch stream in mplayer (which means i can put it on my tv or projector).
first, a history of recent commands used to watch a baseball game.
~$ sudo iptables -t nat -A OUTPUT -p tcp --dport 1935 -m owner \! --uid-owner root -j REDIRECT ~$ sudo rtmpsuck ~$ sudo iptables -t nat -D OUTPUT -p tcp --dport 1935 -m owner \! --uid-owner root -j REDIRECT ~$ rtmpdump -r rtmp://126.96.36.199/cdnlive -a cdnlive -y 2oneh -W http://static.bublu.pw/player/player4.0.swf -p 'http://www.bublu.pw/embed.php?v=2oneh&vw=660&vh=420' -f 'LNX 11,2,202,280' | mplayer -
now what do they mean.
iptables is taking all traffic to port 1935 and will change the
destination to the local machine for everyone except root. so then,
rtmpsuck, the rtmp proxy, is run as root. then all you do is open up
the webpage with the stream you want. if you run under a user other
than root (and you should), then the rtmp stream gets sent to the
proxy (via iptables), and the proxy sniffs out the details and reports
them to the console. since it is run as root, it can then reach the
final destination and you should be able to see the stream in the
webpage. rtmpsuck will show something like:
~$ sudo rtmpsuck RTMP Proxy Server v2.4 (c) 2010 Andrej Stepanchuk, Howard Chu; license: GPL Streaming on rtmp://0.0.0.0:1935 WARNING: Trying different position for client digest! Processing connect app: redirect flashVer: LNX 11,2,202,280 swfUrl: http://static.bublu.pw/player/player4.0.swf tcUrl: rtmp://live.bublu.pw/redirect pageUrl: http://www.bublu.pw/embed.php?v=2oneh&vw=660&vh=420 ERROR: WriteN, RTMP send error 9 (16 bytes) ERROR: RTMP_ReadPacket, failed to read RTMP packet header Closing connection... done! WARNING: Trying different position for client digest! Processing connect app: cdnlive flashVer: LNX 11,2,202,280 swfUrl: http://static.bublu.pw/player/player4.0.swf tcUrl: rtmp://188.8.131.52/cdnlive pageUrl: http://www.bublu.pw/embed.php?v=2oneh&vw=660&vh=420 Playpath: 2oneh Saving as: 2oneh INFO: Metadata: INFO: author INFO: copyright INFO: description INFO: keywords INFO: rating INFO: title INFO: presetname Custom INFO: creationdate Sun May 05 18:20:13 2013 INFO: videodevice Hauppauge Cx23100 Video Capture INFO: framerate 30.00 INFO: width 512.00 INFO: height 288.00 INFO: videocodecid avc1 INFO: videodatarate 500.00 INFO: avclevel 31.00 INFO: avcprofile 77.00 INFO: videokeyframe_frequency2.00 INFO: audiodevice Microphone (4- USB Headphone Se INFO: audiosamplerate 22050.00 INFO: audiochannels 1.00 INFO: audioinputvolume 4.00 INFO: audiocodecid .mp3 INFO: audiodatarate 32.00 WARNING: ignoring too small audio packet: size: 0 ^CCaught signal: 2, cleaning up, just a second...
then after we have gotten this information, kill the rtmpsuck process, and delete the iptables rule we made earlier.
using the fields above as variables, we can construct the rtmpdump command that pipes to mplayer and shows up on our screen:
~$ rtmpdump -r $tcUrl \ -a $app \ -y $PlayPath \ -W $swfUrl \ -p $pageUrl \ -f $flashVer | mplayer -
this should work for just about any stream.