Generate and install an import lib for the built DLL
[rtmpdump.git] / README
blob865c6c467ba86dba5c476440327d5b7c914cdbc9
1 RTMP Dump v2.4
2 (C) 2009 Andrej Stepanchuk
3 (C) 2009-2011 Howard Chu
4 (C) 2010 2a665470ced7adb7156fcef47f8199a6371c117b8a79e399a2771e0b36384090
5 (C) 2011 33ae1ce77301f4b4494faaa5f609f3c48b9dcf82
6 License: GPLv2
7 librtmp license: LGPLv2.1
8 http://rtmpdump.mplayerhq.hu/
10 To compile type "make" with SYS=<platform name>, e.g.
12   $ make SYS=posix
14 for Linux, Unix, etc. or
16   $ make SYS=darwin
18 for MacOSX or
20   $ make SYS=mingw
22 for Windows.
24 You can cross-compile for other platforms using the CROSS_COMPILE variable:
26   $ make CROSS_COMPILE=arm-none-linux- INC=-I/my/cross/includes
28 Please read the Makefile to see what other make variables are used.
30 This code also requires you to have OpenSSL and zlib installed. You may
31 optionally use GnuTLS or polarssl instead of OpenSSL if desired. You may
32 also build with just rtmpe support, and no rtmps/https support, by
33 specifying -DNO_SSL in the XDEF macro, e.g.
35   $ make XDEF=-DNO_SSL
39   $ make CRYPTO=POLARSSL XDEF=-DNO_SSL
41 You may also turn off all crypto support if desired
43   $ make CRYPTO=
45 A shared library is now built by default, in addition to the static
46 library. You can also turn it off if desired
48   $ make SHARED=
50 The rtmpdump programs still link to the static library, regardless.
52 Note that if using OpenSSL, you must have version 0.9.8 or newer.
54 Credit goes to team boxee for the XBMC RTMP code originally used in RTMPDumper.
55 The current code is based on the XBMC code but rewritten in C by Howard Chu.
58 SWF Verification
59 ----------------
61 Note: these instructions for manually generating the SWFVerification
62 info are provided only for historical documentation. The software can now
63 generate this info automatically, so it is no longer necessary to
64 run the commands described here. Just use the -W (--swfVfy) option
65 to perform automatic SWFVerification.
67 Download the swf player you want to use for SWFVerification, unzip it using
69  $ flasm -x file.swf
71 It will show the decompressed filesize, use it for --swfsize
73 Now generate the hash
75  $ openssl sha -sha256 -hmac "Genuine Adobe Flash Player 001" file.swf
77 and use the --swfhash "01234..." option to pass it.
79 e.g. $ ./rtmpdump --swfhash "123456..." --swfsize 987...
82 Connect Parameters
83 ------------------
85 Some servers expect additional custom parameters to be attached to the
86 RTMP connect request. The "--auth" option handles a specific case, where
87 a boolean TRUE followed by the given string are added to the request.
88 Other servers may require completely different parameters, so the new
89 "--conn" option has been added. This option can be set multiple times
90 on the command line, adding one parameter each time.
92 The argument to the option must take the form <type> : <value> where
93 type can be B for boolean, S for string, N for number, and O for object.
94 For booleans the value must be 0 or 1. Also, for objects the value must
95 be 1 to start a new object, or 0 to end the current object.
97 Examples:
98   --conn B:0 --conn S:hello --conn N:3.14159
100 Named parameters can be specified by prefixing 'N' to the type. Then the
101 name should come next, and finally the value:
102   --conn NB:myflag:1 --conn NS:category:something --conn NN:pi:3.14159
104 Objects may be added sequentially:
105   -C O:1 -C NB:flag:1 -C NS:status:success -C O:0 -C O:1 -C NN:time:12.30 -C O:0
106 or nested:
107   -C O:1 -C NS:code:hello -C NO:extra:1 -C NS:data:stuff -C O:0 -C O:0
110 Building OpenSSL 0.9.8k
111 -----------------------
112 arm:
113 ./Configure -DL_ENDIAN --prefix=`pwd`/armlibs linux-generic32
115 Then replace gcc, cc, ar, ranlib in Makefile and crypto/Makefile by arm-linux-* variants  and use make && make install_sw
117 win32:
118 Try ./Configure mingw --prefix=`pwd`/win32libs -DL_ENDIAN -DOPENSSL_NO_HW
119 Replace gcc, cc, ... by mingw32-* variants in Makefile and crypto/Makefile
120 make && make install_sw
122 OpenSSL cross-compiling can be a difficult beast.
124 Precompiled OpenSSL binaries for Windows are available on
125 http://www.slproweb.com/products/Win32OpenSSL.html
127 If you're just running a pre-built Windows rtmpdump binary, then all you
128 need is the "Light" installer. If you want to compile rtmpdump yourself,
129 you'll need the full installer.
132 Example Servers
133 ---------------
134 Three different types of servers are also present in this distribution:
135  rtmpsrv - a stub server
136  rtmpsuck - a transparent proxy
137  rtmpgw - an RTMP to HTTP gateway
139 rtmpsrv - Note that this is very incomplete code, and I haven't yet decided
140 whether or not to finish it. It is useful for obtaining all the parameters
141 that a real Flash client would send to an RTMP server, so that they can be
142 used with rtmpdump. The current version now invokes rtmpdump automatically
143 after parsing a client request.
145 rtmpsuck - proxy server. See below...
147 All you need to do is redirect your Flash clients to the machine running this
148 server and it will dump out all the connect / play parameters that the Flash
149 client sent. The simplest way to cause the redirect is by editing /etc/hosts
150 when you know the hostname of the RTMP server, and point it to localhost while
151 running rtmpsrv on your machine. (This approach should work on any OS; on
152 Windows you would edit %SystemRoot%\system32\drivers\etc\hosts.)
154 On Linux you can also use iptables to redirect all outbound RTMP traffic. You
155 need to be running as root in order to use the iptables command.
157 In my original plan I would have the transparent proxy running as a special
158 user (e.g. user "proxy"), and regular Flash clients running as any other user.
159 In that case the proxy would make the connection to the real RTMP server. The
160 iptables rule would look like this:
162 iptables -t nat -A OUTPUT -p tcp --dport 1935 -m owner \! --uid-owner proxy \
163  -j REDIRECT
165 A rule like the above will be needed to use rtmpsuck. Note that you should
166 replace "proxy" in the above command with an account that actually exists
167 on your machine.
169 Using it in this mode takes advantage of the Linux support for IP redirects;
170 in particular it uses a special getsockopt() call to retrieve the original
171 destination address of the connection. That way the proxy can create the
172 real outbound connection without any other help from the user. The equivalent
173 functionality may exist on other OSs but needs more investigation.
175 (Based on reading the BSD ipfw manpage, this rule ought to work on BSD:
177 ipfw add 40 fwd 127.0.0.1,1935 tcp from any to any 1935 not uid proxy
179 Some confirmation from any BSD users would be nice.)
181 (We have a solution for Windows based on a TDI driver; this is known to
182 work on Win2K and WinXP but is assumed to not work on Vista or Win7 as the
183 TDI is no longer used on those OS versions. Also, none of the known
184 solutions are available as freeware.)
186 The rtmpsuck command has only one option: "-z" to turn on debug logging.
187 It listens on port 1935 for RTMP sessions, but you can also redirect other
188 ports to it as needed (read the iptables docs). It first performs an RTMP
189 handshake with the client, then waits for the client to send a connect
190 request. It parses and prints the connect parameters, then makes an
191 outbound connection to the real RTMP server. It performs an RTMP handshake
192 with that server, forwards the connect request, and from that point on it
193 just relays packets back and forth between the two endpoints.
195 It also checks for a few packets that it treats specially: a play packet
196 from the client will get parsed so that the playpath can be displayed. It
197 also handles SWF Verification requests from the server, without forwarding
198 them to the client. (There would be no point, since the response is tied to
199 each session's handshake.)
201 Once the play command is processed, all subsequent audio/video data received
202 from the server will be written to a file, as well as being delivered back
203 to the client.
205 The point of all this, instead of just using a sniffer, is that since rtmpsuck
206 has performed real handshakes with both the client and the server, it can
207 negotiate whatever encryption keys are needed and so record the unencrypted
208 data.
210 rtmpgw - HTTP gateway: this is an HTTP server that accepts requests that
211 consist of rtmpdump parameters. It then connects to the specified RTMP
212 server and returns the retrieved data in the HTTP response. The only valid
213 HTTP request is "GET /" but additional options can be provided in normal
214 URL-encoded fashion. E.g.
215   GET /?r=rtmp:%2f%2fserver%2fmyapp&y=somefile HTTP/1.0
217 is equivalent the rtmpdump parameters "-r rtmp://server/myapp -y somefile".
219 Note that only the shortform (single letter) rtmpdump options are supported.