RTMP Protocol [DRAFT]

Introduction

RTMP is a protocol used by the Flash Player to deliver real time objects, video, and audio to clients using a binary TCP connection or polling HTTP tunnel.

The protocol is a container for data packets which may be AMF or raw audio/video data like found in the flv.

A single connection is capable of multiplexing many net streams using different channels. Within these channels packets are split up into fixed size body chunks.

RTMPT basically is a HTTP wrapper around the RTMP protocol that is sent using POST requests from the client to the server. Because of the non-persistent nature of HTTP connections, RTMPT requires the clients to poll for updates periodically in order to get notified about events that are generated by the server or other clients.

This document written by Joachim Bauch describes the RTMPT tunneling protocol as implemented by the Red5 Open Source Flash Server that hopefully helps other people to write software that makes use of RTMPT.

http://www.jp.com.br

Connection

Sample ActionScript for connecting and playing a stream:

var videoInstance:Video = your_video_instance;
var nc:NetConnection = new NetConnection();
var connected:Boolean = nc.connect("rtmp://evp.mm.uol.com.br/jovempan
/jp-cameras.sdp");
var ns:NetStream = new NetStream(nc);
videoInstance.attachVideo(ns);
ns.play("jp-cameras");

Default port is 1935

Handshake

Client → Server : Sends Handshake Request. This is not a protocol packet but a single byte (0x03) followed by 1536 bytes. This content does not seem to be vital for the protocol, but is not random either. See 1) 2)

Server → Client : Sends a Handshake Response. This is not a RTMP packet but a single byte (0x03) followed by two 1536 byte chunks (so a total of 3072 raw bytes). The second chunk of bytes is the original client request bytes sent in handshake request. The first chunk can be anything. Use null bytes it doesnt seem to matter.

Client→Server: Sends 1536 raw bytes which are the second 1536 chunk of server generated handshake.

At this time, handshake is done and further packets are RTMP ones.

Client → Server : send the Connect RTMP packet.

Server → Client : Server responds

…and so on…

RTMP Datatypes

0x01 Chunk Size changes the chunk size for packets
0x02 Unknown (AbortMessage) anyone know this one? (32bit stream_id payload)
0x03 Bytes Read send every x bytes read by both sides
0x04 Ping ping is a stream control message, has subtypes
0x05 Server BW the servers downstream bw
0x06 Client BW the clients upstream bw
0x07 Unknown anyone know this one?
0x08 Audio Data packet containing audio
0x09 Video Data packet containing video data
0x0A - 0xE Unknown anyone know?
0x0F Flex Stream Stream with variable length
0x10 Flex Shared Object Shared object with variable length
0x11 Flex Message Shared message with variable length
0x12 Notify an invoke which does not expect a reply
0x13 Shared Object has subtypes
0x14 Invoke like remoting call, used for stream actions too.
0x16 [FMS3] Set of one or more FLV tags, as documented on the flv page. Each tag will have an 11 byte header - [1 byte Type][3 bytes Size][3 bytes Timestamp][1 byte timestamp extention][3 bytes streamID], followed by the body, followed by a 4 byte footer containing the size of the body. FLV data

FIXME luke to add structure for rtmp types

Shared Object DataTypes

0x01 Connect
0x02 Disconnect
0x03 Set Attribute
0x04 Update Data
0x05 Update Attribute
0x06 Send Message
0x07 Status
0x08 Clear Data
0x09 Delete Data
0x0A Delete Attribute
0x0B Initial Data

FIXME joachim can you add details and structure for diff types of shared object

RTMP Packet Structure

FIXME (documentation started, not yet complete)

RTMP Packets consist of a fixed-length header and a variable length body that has a default of 128 bytes. The header can come in one of four sizes: 12, 8, 4, or 1 byte(s).

The two most significant bits of the first byte of the packet (which also counts as the first byte of the header) determine the length of the header. They can be extracted by ANDing the byte with the mask 0xC0. The possible header lengths are specified in the table below:

Bits Header Length
00 12 bytes
01 8 bytes
10 4 bytes
11 1 byte

The header excludes information in the shorter version and implies that the information that is excluded is the same as the last time that information was explicitly included in the header.

In a full 12 byte header is broken down as follows:

The first byte has the header size and the object id. The first two bits are the size of the header and the following 6 bits are the object id(note: when in video/audio rtmp, this 6 bits seem to include the stream id). This limits a RTMP packets to a maximum of 64 objects in one packet. This byte is always sent no matter the size of the header.

The next three bytes are the time stamp. This is a big-endian integer and it is sent whenever the header size is 4 bytes or larger(note: when the time stamp is 0xffffff, than you must use 4bytes after the header which will be the actual time stamp, making the data body length 4bytes longer).

The next three bytes are the length of the object body. This is an integer and is big-endian. The length of the object is the size of the AMF in the RTMP packet without the RTMP headers, so you need to remove any RTMP headers before this number matches properly. These bytes are sent whenever the header size is 8 or more.

The next single byte is the content type. The content types are listed in another section this page and are only included when the header is 8 bytes or longer.

The final 4 bytes of the header is a stream id. This is a 32 bit integer that is little-endian encoded. These bytes are only included when the header is a full 12 bytes. (As mentioned in Mick's Breakdown of RTMP linked below, it is possible that the stream id defines which NetStream/NetConnection object is the source or target of the message)

As mentioned above, in cases where the header is not a full 12 bytes any of the missing fields are assumed to be unchanged from the last header sent with this object ID. For example, if a four-byte header is sent without a length field, and the last object that was sent for the current stream has terminated (ie, there are zero bytes remaining in the last object's transmission), then it should be assumed that the length of the object that follows will be the same as the length of the object that was last transmitted. So if a packet is sent whose payload is 32 bytes, and then immediately afterwards another packet is transmitted with the same object ID, but without a length field, it is assumed that the length of this next packet is also 32 bytes.

Also, checkout the document below. Its mostly accurate, although where it talks about AMF its really RTMP. AMF is used in RTMP, but its not covered in the following document.

Mick's Breakdown of RTMP: JPG / PDF

Streaming

FIXME need more infos

For basic publish cycle this is what happens :

Client→Server : sends a CreateStream request ( is it a single RTMP packet ?)

The createstream request is a single AFM0 function call (remote method invocation) whose high-level equivalent function signature would be “createstream(double ClientStream, NULL)” The ClientStream variable starts at 1 and is incremented by one for every stream that is created in a connection. It is NOT used by the server to route data for multimedia streams.

Server→Client : sends a response with a streamIndex number

The response the server sends back is also an AMF0 call, this time targeted to the client-side function “_result(double ClientStream, NULL, double ServerStream)” where the ClientStream value is the same one provided in the request to create the stream supplied by the client, above, and the ServerStream value is generated by the server to identify the stream over which data will be routed. Most servers that work with Flash clients appear to simply increment a value starting from one, just like the client does, but the ClientStream does not have to match the ServerStream.

Client→Server : does a publish (what does it means in this context ?)

Yet another AMF0 call, this time to a server method “publish(double 0, NULL, “resource_name”, “options”)” The first variable has always been zero in the sessions I have captured, but I have no idea what it is intended to reflect. Ditto for the NULL in the second parameter position. The resource_name parameter is a string that identifies the resource to which the stream is to be attached. For FMS-like servers, this appears to simply be a file name in in a directory on the disk, although for real-time video stream reflection it is probably irrelevant as long as the server can associate it between connections.

Client→Server : send the audio video packets (the packets are sent from the source as indicated on the streamIndex via the same channel as the publish request)

Now, this is what's really confusing about this god-awful RTMP protocol. The authors of the protocol were either intentionally attempting to obfuscate it to prevent compatibility-related reverse engineering with packet sniffers (which is all that is legal), or they were simply using some sort of higher-level representation for the protocol that resulted in very inconsistent low-level data going out the wire (much more likely). The way that AV data is associated with a stream once a publish() command has succeeded, for example, is by virtue of an integer field in the RTMP packet header. That's where the hilarity begins.

The server tells the client what stream to use by sending a double-precision floating-point value in its _result() call to the client, as described above. Fine so far. The client, for live streams at least, then sends an RTMP-level set_buffer(S, T) command back to the server, where I'm using 'S' to represent the stream being targeted and 'T' as the buffering time desired. Both of these parameters are sent as 32-bit big-endian integers.

Finally, the server replies with an RTMP-level reset(S) command, also using a big-endian integer to identify the stream, and an AMF0-formatted status message of the following form:

 [C:-:S](RMI) onStatus(0, NULL, struct {
    "level" => "status",
    "code" => "NetStream.Publish.Start",
    "description" => "<resource> is now published.",
    "cliendid" => <some_double-precision_value>
 });

where I'm using the shorthand [C:T:S] to indicate the channel, time-index and stream values in the RTMP header, respectively. Here the stream identifier is sent in the header instead of as a call parameter (this is also how actual raw AV data is tagged). Guess what: that stream field in the header is a LITTLE-ENDIAN 32-bit integer.

So, the RTMP protocol uses 64-bit floats, 32-bit little-endian integers, and 32-bit big-endian integers to identify the exact same stream in three different contexts, in back-to-back messages sent between client and server.

If anyone is still interested, I may write up an annotated packet trace and post a PDF of it here. I wound up going back to the protocol analyzer because it turned out to be easier than trying to read the RED5 source :-) I'm just not a Java affictionado–actually, I'm writing up a real-time, media-only reflector in Erlang for an application that I cannot make public, but I am willing and able to provide any information I glean about RTMP back to the community (although it may not be much, in contrast to what RED5 appears to be capable of doing, which is why it was easier to analyze the wire rather than read the source). –ovrlod3

The PDF would be great to help on my Erlang version of this -SimpleEnigma

(this needs more detailed description I think, maybe adding an introduction explaining in general how streams are identified and that RTMP allow stream interleaving over the same connection)

Useful Links

1) yes it seems random, but there is a pattern in there, I dont think there is any data though. If you order the bytes in an editor (wrapped at about 20 bytes) you see cols going down with bytes going in sequence, between these cols seems to be random content. I spent a night or two head scratching trying to work out, but in the end gave up. Five bucks to the person who finds ETs message home hidden in the handshake. Oh I did find a tiny amount of data right at the start. There is a counter which goes up, it seemed to be the clients uptime (time since system started
2) It was suggested on Slashdot that this is most likely bandwidth test. Those bytes are constructed so they wouldn't be compressed much in transit, giving more accurate result. The uptime counter also hints at measuring bandwidth with this data block.

Discussion

TabathaMUNOZ19, 2011/06/28 01:28
I strictly recommend not to hold back until you earn enough money to buy different goods! You can get the <a href="http://bestfinance-blog.com/topics/credit-loans">credit loans</a> or just commercial loan and feel comfortable
hehehe, 2011/06/29 12:01
http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/rtmp/pdf/rtmp_specification_1.0.pdf
credit loans, 2011/06/30 23:28
I received my first credit loans when I was 20 and it supported my family very much. However, I need the car loan as well.
GreasseBeigue, 2012/01/16 01:34
Without doubt, Louis Vuitton is just about the preferred bag suppliers throughout recent way industry, this http://www.louisvuittonforyou.com/ legendary trend property happens to be putting excellent attempt to style along with <a href=http://www.louisvuittonforyou.com/>Louis Vuitton</a> make luxury house products <a href="http://www.louisvuittonforyou.com/">Louis Vuitton</a> handbags will be about efficiency plus superiority. They may be most of created from your top mark elements with fantastic pattern along with committed worth. There're which will end up being lightweight, sturdy, strong, and also flexible. Furthermore, they are perfect adornment on a womans shoulder refining this style fashion. Consequently, it's not at all astonishing quite possibly greatly desired by simply many people nowadays. They are mainly discovered around the biceps and triceps connected with celebrities and well-to-do those with main rank. A lot of the famous variations found while using LV company logo add some Rapid, the Neverfull, along with the.
tessorneneusa, 2012/01/16 10:04
Relating to purchase via a great store retail store, the idea you will get in your mind could be that the products and solutions offered with such <a href=http://www.officialcoachoutletonsale.com/>Coach Outlet Online</a> retail store are with excellent typical along with http://www.officialcoachoutletonsale.com/ level of quality. Every one of individuals merchandise tend to be assured while using material used, moreover the particular redecorating on the item will be perfect in addition to according to your turning enhancements throughout industry of design plus style. That awful adjustments throughout <a href="http://www.officialcoachoutletonsale.com/">Coach Outlet</a> vogue, introduced you towards frame position, these that will we have to maintain us up to date considering the usual alterations, different we will become left out. But unfortunately all those unique products and solutions through reputed companies became high priced and maybe they are out of each of our cost range, but on the same time we need to move using each of our fighters and so with this reproduction supplement got upwards already in the market. All these look-alike goods may not be upwards the tag, nonetheless continue to they are enough to pay up our desires regarding way. Furthermore, replica products and solutions have been message from the first items, and a lot connected with moments the producers utilizes this particular supplement buy and sell tag, which includes a minor variation within spelling, to ensure the consumers obtain baffled associated with that, all this way they will acquire reproduction merchandise rather than the main product.
tessorneneusa, 2012/01/16 15:02
Relating to look through the shop save, taking that approach you have in your thoughts would be that the products offered by this sort of <a href=http://www.coachhandbagsoutletstores.org/>coach store</a> save tend to be associated with good ordinary and http://www.coachhandbagsoutletstores.org/ good quality. All of these items are usually guaranteed with all the material utilised, furthermore the decorating on the item will be great in addition to reported by this turning advancements inside area connected with type plus fashion. The terrible adjustments inside <a href="http://www.coachhandbagsoutletstores.org/">coach outlet store</a> trend, introduced us all on the borders stage, like that we must keep our-self modified with all the normal changes, else we'll always be left out. Nonetheless alas individuals first items through most respected producers are very overpriced and they are outside of some of our budget range, but on the same time we will need to switch with our own fighters hence with this duplicate supplement followed way up already in the market. Most of these duplicate products and solutions usually are not up your recognise, nonetheless even now there're ample to repay upward our demands connected with style. On top of that, duplicate products are now copy on the initial products, and quite a few of times the manufacturers uses the exact item industry make, using a moderate distinction within spelling, to ensure the consumers obtain mixed up with the idea, and also this technique they will buy replica goods rather than an original item.
tessorneneusa, 2012/01/17 06:39
In terms of purchase via a great electric outlet retail store, the reasoning behind you become in your thoughts is that the items at these <a href=http://www.louisvuittonhandbagsforyou.com/>Louis Vuitton Handbags</a> retailer are generally regarding great common and also http://www.louisvuittonhandbagsforyou.com/ top quality. Most of all those products will be confirmed considering the fabric applied, furthermore the particular decorating belonging to the merchandise will be fantastic in addition to reported by that revolving enhancements in area associated with style and trend. The terrible adjustments around <a href="http://www.louisvuittonhandbagsforyou.com/">Louis Vuitton Outlet</a> fashion, introduced us towards the borders point, such which we will need to retain our-self updated considering the typical alterations, altogether different i will often be left out. Yet unfortunately people first merchandise through reputed suppliers have become expensive plus they are beyond the cost range, however on one time we have to transfer by using our own fighters hence that way replica product or service emerged " up " available in the market. These types of reproduction goods will not be upward the particular tag, yet continue to they're just enough to repay upward the desires with vogue. In addition, duplicate goods are actually replicate belonging to the initial products and solutions, many with times his or her producers utilizes this particular product or service industry indicate, that has a minor difference inside punctuational, therefore the consumers get lost of it, this also way many people get replica merchandise rather than the original product or service.
tessorneneusa, 2012/01/17 09:31
Memory foam will allow the bed to correct for a shape job in addition to assist you to <a href=http://www.lastingimpressionsfoam.com/>foam mattress</a> love provided you'll want, devoid of inducing problems and also driving <a href="http://www.lastingimpressionsfoam.com/">memory foam mattress topper</a> you drop close to many nighttime interested in a more comfy job. That means you possibly can sleep in your returning http://www.lastingimpressionsfoam.com/ using your skin affordable or perhaps upon you part provided you wish, without less than comfortable side effects. An individual getting up during the night may don't indicate getting your partner way up. From the storage foam technological know-how, your activities may have zero effect on a person's lover's part on the bed along with nor upon yours when your soulmate may be the you getting out of bed down the middle of the particular nights. Air mattresses was previously this beloved get together put for dust in addition to microbes, but the surface of the memory space foam bed would not let virtually any of that. Hence no more sneezing about, no more watering eyes, irritated pores and skin or perhaps rashes.
NatashaMah, 2012/02/12 06:37
Where download X Rumer 7.0.10 Elite??
Send me URL please!
It is the best program for mass posting on forums! XRumer can break most types of captchas!
bags, 2012/03/20 04:10
I like this website,here is another good shooping website http://www.wholesaleinternation.com/ just have a look in here.
5656, 2012/03/23 23:40
Cheap NFL,NBA,MLB,NHL [url=http://www.annajerseys.com/]Jerseys From China[/url].[url=http://www.annajerseys.com/]China Jerseys[/url],[url=http://www.annajerseys.com/]Sports Jerseys China[/url],[url=http://www.annajerseys.com/nfl-jerseys-c-1.html]NFL Jerseys China[/url],[url=http://www.annajerseys.com/nba-]NBA Jerseys China[/url],NHL Jerseys

China,[url=http://www.annajerseys.com/nba-jerseys-c-84.html]MLB Jerseys China[/url],NFL jerseys For Sale

online.All Our Jerseys Are Sewn On and Directly From Chinese Jerseys Factory
[/pre]
[pre]
We Are Professional China Brand Wholesaler,[url=http://www.anna-wholesale.com/brand-shoes-c-380.html]Wholesale Brand Shoes[/url],Handbags,[url=http://www.anna]Sports Jerseys China[/url],Jewelry,Hats,[url=http://www.anna-]Sunglasses From China[/url],Cheap China

Wholesael,[url=http://www.anna-wholesale.com]Wholesale From China[/url],Free Shipping,Cheap Price,7 Days

Deliver
[/pre]

Best Converse Online Store From UK,Sale 2011 Newest [url=http://www.sale-converse.com/]Converse All Stars[/url],[url=http://www.sale-converse.com/converse-flag-shoes-c]Converse Flag Shoes[/url],Black Converse,White Converse,Navy Converse And So on,[url=http://www.sale-]Converse UK[/url],Free Shipping
[/pre]

We are professional jerseys manufacturer from china,wholesal

sports [url=http://www.anna-jersey.com]Jerseys From China[/url],[url=http://www.anna-jersey.com/nfl-jerseys-c-]NFL jerseys China[/url],[url=http://www.anna-jersey.com/nhl-jerseys-c-882.html]NHL Jerseys China[/url],[url=http://www.anna-jersey.com/nba-jerseys-c-821.html]NBA Jerseys China[/url],[url=http://www.anna-jersey.com/mlb-]MLB Jerseys China[/url],[url=http://www.anna-jersey.com/]China Jerseys[/url],Free

Shipping
[/pre]
[pre]
[url=http://www.fitflop-uk.com/]fitflops sale UK[/url] [url=http://www.fitflop-]fitflop sale[/url]
[/pre]

[url=http://www.china4jersey.com/]Wholesale Jerseys From China[/url],[url=http://www.china4jersey.com/]Wholesale Jerseys[/url],[url=http://www.china4jersey.com/]China Jerseys[/url],NFL

Jerseys China Paypal,NHL Jerseys China Paypal,Chinese Jerseys factory,Sewn On Jerseys,Accept Paypal,Free Shipping
[/pre]
Phil Niekro Jersey, 2012/03/31 03:02
http://www.bravesproshop.com/24-phil-niekro-jersey Phil Niekro Jersey
http://www.bravesproshop.com/19-diaz-matt-jersey Diaz Matt Jersey
http://www.bravesproshop.com/16-dale-murphy-jersey Dale Murphy Jersey
http://www.bravesproshop.com/13-brandon-beachy-jersey Brandon Beachy Jersey
http://www.bravesproshop.com/17-dan-uggla-jersey Dan Uggla Jersey
http://www.bravesproshop.com/18-derek-lowe-jersey Derek Lowe Jersey
http://www.bravesproshop.com/20-freddie-freeman-jersey Freddie Freeman Jersey
http://www.bravesproshop.com/21-hank-aaron-jersey Hank Aaron Jersey
cheap oakley sunglasses, 2012/05/28 23:50
Oakley sunglasses tend to be a leading brand name of men and women shades that is well-known across the world, <b><a href="http://www.cheapoakleysunglassese.org/">cheap Oakley sunglasses</a></b> often pledge optic superiority which can glamorize any kind of clothes you wear. Oakley sunglasses tend to be the effect of dedicated hard work and costly hi-tech research. Sunglasses within the recent years have grown to be much more of a vogue design than ever. Everybody desire to decorate with designer clothing and accessories that can offer them noticeable appeal because everybody just love being the center of other people's focus.
harransable, 2012/09/01 20:40
<a href=http://www.privateinvestor2000.com/publ/poleznoe_investoru/luchshie_varianty_vvoda_vyvoda_sredstv/finansovye_tonkosti/12-1-0-15>что за комиссия в пол процента webmoney телебанк</a>

<a href=http://www.privateinvestor2000.com/index/moj_dnevnik/0-7>доходность по инвест проектам</a>


Сегодня инвестиции, которые являются по своей сути долговременными капиталовложениями – это неотъемлемая часть экономики. А чтобы вложения были удачными и доходными, необходимо научиться верно анализировать степени риска и положительный исход проектов. Если вы желаете узнать об вложении как можно больше, то вы попали именно туда, куда нужно. Эта страница в сети станет вашим путеводителем на пути к денежной стабильности, а вся информация, которая расположена на «Страницах частного инвестора» станет вашим непотопляемым фундаментом в построении спокойного инвестиционного будущего. На «Страницах частного инвестора» вы найдете проверенные опытом советы относительно правил правильного инвестирования, которые также подкреплены невыдуманными цифрами. На этом ресурсе найдется информация как для новичка в инвестиционном деле, так и для уверенного в своих поступках профессионала. Этот ресурс поможет вам верно сформировать свой инвестиционный портфель, который будет приносить стабильный доход при очень разумном риске. «Советы частного инвестора» - ресурс для тех, кто хочет делать деньги!

<a href=http://www.privateinvestor2000.com/>частного инвестирования</a>

<a href=http://www.privateinvestor2000.com/index/moj_dnevnik/0-7>ввод средств на форекс тренд</a>
jmpkmaq, 2012/10/11 01:52
yqbpqb
viagra, 2012/10/12 00:07
lzvnbl http://mxwkrx.com/ <a href="http://octdiv.com/ ">jiczcao</a> [url=http://mmstvc.com/]jiczcao[/url]
viagra, 2012/10/19 07:07
lvvarfzn http://ojaquv.com/ <a href="http://rsvbcj.com/ ">tckzfox</a> [url=http://asrgpg.com/]tckzfox[/url]
Mitra SEO, 2013/04/03 10:54
'''[http://mitraseo.16mb.com/konsumen-cerdas-paham-perlindungan-konsumen/ Konsumen Cerdas Paham Perlindungan Konsumen]'''

http://www.fwalive.ualberta.ca/mediawiki/index.php?title=User:Konsumencerdas
http://www.kapaigroup.net/mediawiki/index.php/User:Konsumencerdas
http://mistral.univ-avignon.fr/mediawiki/index.php/User:Konsumencerdas
http://teamprometheus.org/mediawiki/index.php?title=User:Konsumencerdas
http://www.sherryruan.com/mediawiki/index.php?title=User_talk:Konsumencerdas
http://rogontheory.org/mediawiki/index.php?title=User:Konsumencerdas
http://lancedcreative.com/mediawiki/index.php?title=User:Konsumencerdas
http://totru.com/mediawiki/index.php?title=User:Konsumencerdas
http://members.tripod.com/c_yadav/mediawiki/index.php?title=User:Konsumencerdas
http://wiki.lspace.org/mediawiki/index.php/User:Konsumencerdas
http://docs.kaneva.com/mediawiki/index.php/User:Konsumencerdas
http://kwamoja.com/mediawiki/index.php?title=User:Konsumencerdas
http://piksel.no/mediawiki/index.php/User:Konsumencerdas
http://adapsys.co.za/mediawiki/index.php?title=User:Konsumencerdas
http://soundtrackingjohncage433.com/mediawiki/index.php?title=User:Konsumencerdas
http://itgs1.com/mediawiki/index.php?title=User:Konsumencerdas
http://www.silverstonesolutions.com/mediawiki/index.php?title=User:Konsumencerdas
http://dmfs.org/wiki/index.php?title=User:Konsumencerdas
http://cooperativeeducator.com/myCEwiki/User:Konsumencerdas
http://wiki.gis.com/wiki/index.php/User:Konsumencerdas
http://robertfant.com/MediaWiki/index.php?title=User:Konsumencerdas
http://ancientshores.com/wiki/index.php/User:Konsumencerdas
https://wiki.mozilla.org/User_talk:Panji12
http://eve-wiki.net/index.php?title=User_talk:Panji12
You could leave a comment if you were logged in.
 
documentation/rtmp.txt · Last modified: 2013/03/26 09:10 by 200.169.247.35
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki