Peer to Peer (P2P) in Flash Player 10 beta

There has been a lot of great excitement around RTMFP (Real Time Media Flow Protocol), especially because of the peer to peer (P2P) communication that is enabled in Flash Player 10 beta. This is a natural time to speculate about what cool applications you will build with new technology, so I’d like to give you some more information for you to work with.

Since I have been frequently been asked about details on this, a frequently asked questions format somehow seemed appropriate ;) . For those that want to start working with RTMFP, make sure to read to the end, there is a goody for you!

Does Flash Player 10 beta support Peer to Peer (P2P) communication?
Flash Player 10 beta has new methods on the NetConnection and NetStream objects that allow communication through peer connections that are managed by a future Adobe server technology. The server will maintain a list of potential peers that can be connected to. If the NetConnection to the server is lost or closed, any peer connection that was initiated through the same NetConnection will also be closed.

How will I make a P2P connection through Flash Player 10 beta?
Connections from a SWF through a future Adobe server release will be assigned a temporary unique ID that is infeasible to guess or forge. Other SWFs connected to the same server can subscribe to the streams and events from that ID once the broadcasting SWF agrees to the connection.

On the server level, these IDs can be mapped to application-specific information such as presence. For a chat application, the ID can be linked to the nickname the user gave when connecting to the application. While the end-user may select the person that they want to chat with, Flash Player will use the ID to establish the connection with that user.

What can I send through the P2P connection?
In a similar way that you would stream local microphone and webcam media up to a server, you will also be able to stream it directly to another Flash Player client that has connected as a peer.

Through NetStream.send you can also send data which is useful for shared experiences in real-time applications. Any data format can be sent through this method though there are size limitations to the packet which may make certain data types less useful.

How does the peer connection work?
RTMFP UDP packets are sent directly from one Flash Player to another. The server translates the peer IDs to network addresses, and also assists in setting up the connection if one or both ends is behind a Network Address Translation (NAT) device. If UDP is blocked by a firewall or if RTMFP is blocked through a configuration of mms.cfg, the peer connection will not go through.

Can I choose between UDP and TCP?

No, RTMFP is a UDP-based protocol while RTMP is a TCP-based protocol. You will automatically use UDP by calling the methods that work over RTMFP.

Will RTMFP enable massive file-sharing applications through Flash Player 10 beta?
No. Large-scale file-sharing network applications rely on the ability to read from and write to the hard drive constantly to only load parts of files into memory when needed. In Flash Player 10 beta you can load files from the desktop to the Flash Player runtime, but the file would need to be loaded manually by the end-user and remain in memory for the entire time the file would be needed. The drain on system resources would make this style of application impractical.

Can I get started with RTMFP now?
While the support for RTMFP is built in to Flash Player 10 beta, there is no publicly available server technology to manage the connection process. If you would like to be considered for access to private beta programs around RTMFP, please send an email to fmsprerelease@adobe.com

20 thoughts on “Peer to Peer (P2P) in Flash Player 10 beta

  1. Pingback: Free Adobe - Macromedia Flash Web Site Design Tips, Flash Tutorials » New Flash Collection: Flash (Player) 10

  2. Thanks for explaining this so clearly. It’s not really P2P if you have to use the server though… but, I suppose once the connection to the other peer is established the server product steps out of the way–right? Does the server totally step away or do you just reduce the load to a mere trickle? Or, something else?

  3. What is not clear is if there will be UDP support at socket level. In other words, will it be possible to use UDP transport with the AS3 Socket class?
    Thanx in advance!

  4. Pingback: Tenegri’s blog » Blog Archive » Useful resources for Flash 10

  5. Pingback: CISNKY » links for 2008-05-26

  6. Pingback: Comunicación directa cliente-cliente desde Flash Player 10!

  7. Pingback: Пиринговые соединения в Flash Player 10 beta | My First AS3 Application

  8. Pingback: SmartLogic Solutions Blog » Blog Archive » Flash Player 10 Peer-to-Peer FAQ

  9. Philip, It is still P2P communication in that the two Flash Player clients are communicating directly without passing their data through the server. It is however a managed connection in that the server does the introductions and you must still be connected to the server to retain your P2P connection. This is very similar to many IM client models where P2P communication is allowed in the context of still being signed in to the IM service.

    ByteBuffer, there is no support for UDP over the socket object in this release of Flash Player.

  10. Very Powerful! It can effectively reduce pressure on server, as it doesn’t need to pass the data through the server. If the flash video player 10 can reach a higher level, it would be very easy to own a video-share website without high-tech as long as have a system built successifuly. It’s meaningful for high traffic video-share site like Youtube!

  11. Here’s another question for your FAQ (I know the answer, but people don’t believe me when I say it):

    Can Flash Player 10 be used to swarm video to reduce bandwidth costs?

  12. Justin,

    Thank you for clarifying and giving us a definite answer.

    Two weeks ago I sent email to fmsprerelease@adobe.com to be considered for the RTMFP beta programs but haven’t heard from Adobe. We are very interested. Is there something else we can do to be considered for the beta program other than just sending email?

  13. @wes The fascinating thing to me about that question is how few people know the answer. I don’t know, and I don’t think you know either (no offence intended — being honest). I’m not even sure Justin knows, and he’s on the Flash team.

    The reason so few people know is the intersection of skills it takes to pull off. First, you have to know the p2p side. That cuts out 99+% of developers. When I say “know” I basically mean you’ve coded p2p apps. Then you really, really have to know the ActionScript API, and there are gems in there that aren’t obvious at first. The combination of those two leaves very few people who can truly answer that question, and it’s part of the reason for the flailing in the blogosphere.

    Stepping back, though, that’s the cool thing about platforms — they’re largely only limited by the creativity of developers. This will certainly get interesting.

  14. Pingback: Dylan DePass » New Protocol (RTMFP) in Flash Player 10

  15. I wonder if RTMFP was changed by Adobe after Amicima MFP.. looks like there are some licensing issues also, which will be hidden from the world as MFP was an opensource project with GPL license

  16. It’s great support.
    What I think is: why we can’t use USB-PHONE with Flash Player ?

    We only take an USBPHONE like “microphone” but we can’t send audio-output in different device !

    Flash.Sound.setAudioOutput(1); // usb phone
    Flash.Sound.setAudioOutput(0); // speaker of pc

    I think that have no-sense to build very amouth of tecnology, without native speaker-selector support…

    Jason

  17. Will a flash player be allowed to have multiple connections to multiple different parties at the same time?

    Cheers.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>