SlideShare a Scribd company logo
1 of 35
Download to read offline
OneTeam Media Server
2009, 25th june
Mickaël Rémond <mremond@process-one.net>
An Erlang company
ProcessOne: An Erlang company
 20 people, most of them Erlang developers

 Lots of Erlang Veterans (Two «Erlang User of the Year !»)

 Focusing on software development and technology for which Erlang is a
 good fit.

 World wide customer base: We are spreading Erlang use all around the
 world.

 Main customers base:

    Social networks

    Carrier / Telco
Our customers worldwide
         ~80 major customers
         ~45 millions of users
Software products: ejabberd
 Instant messaging platform based on the open XMPP protocol.
 Open source software. Lots of example of Erlang code.
 Largely used in the world and usefull to convert developers to Erlang and
 gain mind share.
 About 40% market share of the public XMPP known domains.
 Known for its clustering, scalability and hackability (easy to extend, live code
 update)
 Very large deployment in production
 Require some know-how to reach large scale, but strongly supported solution
 by ProcessOne
 Very large development community
Software products: Tsung
 Highly scalable benchmark tool: Can easily simulate lots of users on a cluster
 (hundreds of thousands)
 Many supported protocols:
    HTTP/HTTPS
    XMPP
    Postgres
    LDAP
    ...
 Extensible: You can add new protocols.
 Strong support by ProcessOne.
OneTeam Media Server
OneTeam Media Server
 This is a Flash server, designed to develop connected Adobe Flash client
 applications.
 It can supports:
     Networked web applications (like text chat system)
     Voice
     Video playback
     Video recording
     Video chat
     Event distribution with publish and subscribe system
     ...

 Perfect server for rich web real time applications.
OneTeam Media Server: Why Erlang ?
 For scalability and flexibility
 For clustering features
 For the ability to integrate the application with other popular Erlang software:
    ejabberd
    Couchdb
    Yaws
    Mochiweb
    RabbitMQ


 All those software are getting mindshare in their area. OMS will both add
 value and gain from them.
Rich real time web applications in Erlang
 OneTeam Media Server gives the opportunity to build Adobe Flash or Adobe
 Air connected / real time applications in Erlang
 OneTeam Media Server is an application server. It is used as a building brick
 for your own applications.


 Example applications:
    Low latency multiplayer games.
    Video voicemail (Seesmic-like features).
    Video conferencing system.
    Video distribution system.
    Event distribution system for financial dashboards.
    Push base news distribution systems.
    ...
OneTeam Media Server perspective
 OneTeam Media server along with ejabberd can help building the most
 versatile web application server platform.

 Both components can play a different role but can become a key element in
 the real time web.

 Can bring new web developers / startup to Erlang.

 All in Erlang !
Using OneTeam Media Server
Technical overview
 Several Adobe protocols are at the core of the platform:
    RTMP: Real Time Messaging Protocol (port 1935)
       Originally used for Flash persistence.
       Now used for Flash RPC, streaming, messaging.
    AMF: Action Message Format. Protocol to define the RPC and message
    form. This is a binary serialized representation of Flash objects.

 Technically RTMP is the main transport protocol, but actually it is AMF over
 RTMP.


 All other features are build upon those foundations:
     Shared objects
     Publish and subscribe
     Video streaming
Technical overview
 RTMP exist in various flavour:
   RMTP: Standard TCP/IP (port 1935).
   RTMPS: Secured RTMP. This is basically RTMP inside TLS.
   RMTPT: Tunnelled over HTTP (port 80). Fallback mechanism used to
   pass firewalls. It can work over HTTPS as well.
      Yes, it works with video streaming as well

 Currently OMS implements only RTMP
    This is the bigger part
    Adding other variations should be straigthforward
Flash client point of view
 The first thing to do to work with OMS on the Flash client is to connect to
 OMS.
    This is done with the Flash connection object:
        flash.net.NetConnection
 Once you have done that you have a bidirectional stream to perform RPC
 from client to server or from server to client.


 If you want to support media publishing (Voice or Video), you have to use
 another Flash object:
    flash.net.NetStream
OMS application point of view
 You need a module to handle the connection from your application.

    You do that by creating an adaptor for the Flash NetConnection.

    This is an arbitrary module implementing connect/2 method and link to
    oms_netconnection object.



 If you want to stream video or voice from webcam / microphone you need to
 implement specific feature in a netstream module and link it to
 oms_netstream object

    Example of function to implement: publish/2,closeStream/2
OneTeam Media Server: Example
applications
Basic application
 First basic application will only open the RTMP connection between Flash
 client and module.
     Client code (Flex)
     Server code (Erlang)
Basic application: client
 <?xml version="1.0" encoding="utf-8"?>
 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()">
     <mx:Script>
 <![CDATA[
 import flash.net.NetConnection;       import flash.net.SharedObject;    import mx.controls.Alert
 private var myconn:NetConnection;
 public function init():void {
     myconn = new NetConnection();
     myconn.addEventListener("netStatus", onNCStatus);
     myconn.connect("rtmp://127.0.0.1/demo");
 }


 public function onNCStatus(event:NetStatusEvent):void {
         if(event.info.code == "NetConnection.Connect.Success")
            { Alert.show("Connected to OMS"); }
         else { Alert.show("Failed to connect to OMS. Reason:"+ event.info.code); }
        }
 ]]>
     </mx:Script>
 </mx:Application>
Basic application: Server
 -module(mynetconnection).

                                                                        This is raw data structure,
 -export([connect/2]).
                                                                        but we provide helpers /
 connect(_CallC,_Msg) ->                                                wrappers
   io:format("my netconnection received call"),
   {object,Obj} = lists:nth(1,_Msg),
   case dict:find("objectEncoding",Obj) of
      {ok,{number,Encoding}} ->
          io:format("~nEncoding is :~w",[Encoding]),
          {ok,[{result,[{mixed_array,{0,[{"objectEncoding",{number,Encoding}},{"application",{null,0}},{"level",
              {string,"status"}},{"description",{string,"Connection succeeded"}},
              {"code",{string,"NetConnection.Connect.Success"}}]}}]}]};
      error ->
          {ok,[{result,[{object,dict:from_list([{"level",{string,"status"}},
                 {"code",{string,"NetConnection.Connect.Failed"}},
                 {"description",{string,"Connection failed"}}])}]}]}
   end.
Application XML configuration
 <?xml version="1.0" encoding="ISO-8859-1"?>
 <omsapp>
 <display-name>OMS Demo Application</display-name>
 <short-name>demo</short-name>
 <apppath>server/ebin</apppath>
 <adapter obj="oms_netconnection" adapter="mynetconnection" />
 </omsapp>




                                                 You can have several
                                                 adapter objects
Chat application
 The goal of the chat test application is to show you can do push from the
 server side by calling functions that are running on the client.

 We have developed two versions of the chat application:
   with RPC: Server is calling Actionscript running on the client side.
   with RemoteShared objects:
Chat application: Interesting client code
    public function post():void {
      resp = new Responder(glamresult,glamerror);
      myconn.call("post",resp,nick.text,saisie.text);
      input.text = "";
    }

    public function newline(s:String):void {
       chatarea.text += s + "n";
    }
Chat application: Interesting server code
 post(CallC, Msg) ->
       {string,From} = lists:nth(2,Msg),
       {string,Text} = lists:nth(3,Msg),


       gen_server:cast(CallC#callcontext.rtpid,
                       {clients_call,"newline",[{string,binary_to_list(Text)}],0}),

       Arraydata = lists:map( fun(X) -> {string,X} end,[]),
       AnsAMF3 = {array,Arraydata},
      {ok,[{result,[AnsAMF3]}]}.

                                                        clients_call: call on all clients
                                                        client_call: use to call on
                                                        only one client
Remote shared objects: Client overview 1/2
 Nothing to do on server application side. Handled by OMS framework.

 private var myconn:NetConnection;
 private var myRemoteSO:SharedObject;
 ...
 myconn = new NetConnection();
 myconn.connect(UIrtmpURI.text);
 myRemoteSO = SharedObject.getRemote(SOName.text, myconn.uri, true);
 myRemoteSO.addEventListener(SyncEvent.SYNC,SOSync);
 myRemoteSO.connect(myconn);
 ...
Remote shared objects: Client overview 2/2
 myRemoteSO.setProperty(UIKey.text,UIValue.text);
 myRemoteSO.flush();
 myRemoteSO.close();
 myRemoteSO.clear();


 public function SOSync(event:SyncEvent):void {
      debugt.text += "n" + "SO Sync event from server: " + event.toString() +
 "n" ;
      SOList.dataProvider = myRemoteSO.data;
                      }
Chat application: Demo
Video player / recorder: Interesting server code
 getlistofavmedia(_CallC,_Msg) ->
   io:format("~ngetlistofavmediacalled"),
   Filelist = filelib:wildcard("../medias/*.flv"),
   Arraydata = lists:map( fun(X) -> {string,X} end,Filelist),
   AnsAMF3 = {array,Arraydata},
   {ok,[{result,[AnsAMF3]}]}.
Video player / recorder: Interesting client code
  public function get_list_of_av_medias():void {
      var resp:Responder;
      resp = new Responder(glamresult,glamerror);
      myconn.call("getlistofavmedia",resp);
  }
   private function glamresult(result:Array):void {
         var length:int = result.length;
         var newtab:Array;
         newtab = new Array();
         for (var i:int=0;i<length;i++) {
                var temp:String;
                temp = result[i];
                var ta:Array;
                ta = temp.split("/");
                var med:String = ta[ta.length - 1];
                newtab[i] = {Name:med};
         }
         medlist.dataProvider = newtab;
  }
Video player / recorder: Interesting client code
 public var ns1:NetStream;
 public function startrecording(e:MouseEvent):void {
    bustop.visible = true;
    burec.visible = false;
    var temp1:String = medrecname.text.replace("/","");
    var temp2:String = temp1.replace("..","");
    if (ns1 != null) {
        ns1.close();
        ns1.attachCamera(camera);
        ns1.publish(temp2,"RECORD");
     }
 }
Video player: Demo
Video chat: Demo
OneTeam Media Server future
What’s next ?
 Open Source release
    When ?
       2009, July 13th (in beta version)
       Release from ProcessOne web site
 Planned features
    RTMPT: Adobe connected protocol over HTTP
       This is needed in some context to work over firewalls.
    Adobe Livecycle publish and subscribe like features
       Ability to support push to client over RTMP / RTMPT
       BlazeDS (Java exist in open source but does not support more
       efficient protocol RTMP).
    More example applications
OneTeam Media Server
http://www.process-one.net/en/oms/

More Related Content

What's hot

Wcf architecture overview
Wcf architecture overviewWcf architecture overview
Wcf architecture overviewArbind Tiwari
 
1. WCF Services - Exam 70-487
1. WCF Services - Exam 70-4871. WCF Services - Exam 70-487
1. WCF Services - Exam 70-487Bat Programmer
 
The use of Symfony2 @ Overblog
The use of Symfony2 @ OverblogThe use of Symfony2 @ Overblog
The use of Symfony2 @ OverblogXavier Hausherr
 
Mulesoftmeetup4th july
Mulesoftmeetup4th julyMulesoftmeetup4th july
Mulesoftmeetup4th julyAnurag Dwivedi
 
XML-RPC (XML Remote Procedure Call)
XML-RPC (XML Remote Procedure Call)XML-RPC (XML Remote Procedure Call)
XML-RPC (XML Remote Procedure Call)Peter R. Egli
 
Dev212 Comparing Net And Java The View From 2006
Dev212 Comparing  Net And Java  The View From 2006Dev212 Comparing  Net And Java  The View From 2006
Dev212 Comparing Net And Java The View From 2006kkorovkin
 
Web services, WCF services and Multi Threading with Windows Forms
Web services, WCF services and Multi Threading with Windows FormsWeb services, WCF services and Multi Threading with Windows Forms
Web services, WCF services and Multi Threading with Windows FormsPeter Gfader
 
A presentation on WCF & REST
A presentation on WCF & RESTA presentation on WCF & REST
A presentation on WCF & RESTSanthu Rao
 
Documenting from the Trenches
Documenting from the TrenchesDocumenting from the Trenches
Documenting from the TrenchesXavier Noria
 
JSON-RPC - JSON Remote Procedure Call
JSON-RPC - JSON Remote Procedure CallJSON-RPC - JSON Remote Procedure Call
JSON-RPC - JSON Remote Procedure CallPeter R. Egli
 
Functionnal view modelling
Functionnal view modelling Functionnal view modelling
Functionnal view modelling Hugo Saynac
 

What's hot (17)

Wcf development
Wcf developmentWcf development
Wcf development
 
Java servlets
Java servletsJava servlets
Java servlets
 
Wcf architecture overview
Wcf architecture overviewWcf architecture overview
Wcf architecture overview
 
1. WCF Services - Exam 70-487
1. WCF Services - Exam 70-4871. WCF Services - Exam 70-487
1. WCF Services - Exam 70-487
 
The use of Symfony2 @ Overblog
The use of Symfony2 @ OverblogThe use of Symfony2 @ Overblog
The use of Symfony2 @ Overblog
 
Mulesoftmeetup4th july
Mulesoftmeetup4th julyMulesoftmeetup4th july
Mulesoftmeetup4th july
 
XML-RPC (XML Remote Procedure Call)
XML-RPC (XML Remote Procedure Call)XML-RPC (XML Remote Procedure Call)
XML-RPC (XML Remote Procedure Call)
 
Lecture 3 soap
Lecture 3 soapLecture 3 soap
Lecture 3 soap
 
Dev212 Comparing Net And Java The View From 2006
Dev212 Comparing  Net And Java  The View From 2006Dev212 Comparing  Net And Java  The View From 2006
Dev212 Comparing Net And Java The View From 2006
 
Listeners and filters in servlet
Listeners and filters in servletListeners and filters in servlet
Listeners and filters in servlet
 
Web services, WCF services and Multi Threading with Windows Forms
Web services, WCF services and Multi Threading with Windows FormsWeb services, WCF services and Multi Threading with Windows Forms
Web services, WCF services and Multi Threading with Windows Forms
 
Servletv1 nt
Servletv1 ntServletv1 nt
Servletv1 nt
 
Wcf
WcfWcf
Wcf
 
A presentation on WCF & REST
A presentation on WCF & RESTA presentation on WCF & REST
A presentation on WCF & REST
 
Documenting from the Trenches
Documenting from the TrenchesDocumenting from the Trenches
Documenting from the Trenches
 
JSON-RPC - JSON Remote Procedure Call
JSON-RPC - JSON Remote Procedure CallJSON-RPC - JSON Remote Procedure Call
JSON-RPC - JSON Remote Procedure Call
 
Functionnal view modelling
Functionnal view modelling Functionnal view modelling
Functionnal view modelling
 

Viewers also liked

Real time Web Application with XMPP and Wave
Real time Web Application with XMPP and WaveReal time Web Application with XMPP and Wave
Real time Web Application with XMPP and WaveMickaël Rémond
 
Nanomsg - Scalable Networking Library
Nanomsg - Scalable Networking LibraryNanomsg - Scalable Networking Library
Nanomsg - Scalable Networking LibraryHamidreza Soleimani
 
ProcessOne Push Platform: XMPP-based Push Solutions
ProcessOne Push Platform: XMPP-based Push SolutionsProcessOne Push Platform: XMPP-based Push Solutions
ProcessOne Push Platform: XMPP-based Push SolutionsMickaël Rémond
 
Archipel Introduction - ejabberd SF Meetup
Archipel Introduction - ejabberd SF MeetupArchipel Introduction - ejabberd SF Meetup
Archipel Introduction - ejabberd SF MeetupMickaël Rémond
 
2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communautéMickaël Rémond
 
Multi Chat
Multi ChatMulti Chat
Multi ChatSoftTeco
 
Event Driven Architecture Concepts in Web Technologies - Part 2
Event Driven Architecture Concepts in Web Technologies - Part 2Event Driven Architecture Concepts in Web Technologies - Part 2
Event Driven Architecture Concepts in Web Technologies - Part 2Hamidreza Soleimani
 
WaveOne server and client by ProcessOne
WaveOne server and client by ProcessOneWaveOne server and client by ProcessOne
WaveOne server and client by ProcessOneMickaël Rémond
 
Real life XMPP Instant Messaging
Real life XMPP Instant MessagingReal life XMPP Instant Messaging
Real life XMPP Instant MessagingMickaël Rémond
 
Nodejs Applications in Production
Nodejs Applications in ProductionNodejs Applications in Production
Nodejs Applications in ProductionHamidreza Soleimani
 
Event Driven Architecture Concepts in Web Technologies - Part 1
Event Driven Architecture Concepts in Web Technologies - Part 1Event Driven Architecture Concepts in Web Technologies - Part 1
Event Driven Architecture Concepts in Web Technologies - Part 1Hamidreza Soleimani
 
A vision for ejabberd - ejabberd SF Meetup
A vision for ejabberd - ejabberd SF MeetupA vision for ejabberd - ejabberd SF Meetup
A vision for ejabberd - ejabberd SF MeetupMickaël Rémond
 
Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8
Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8 Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8
Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8 Mickaël Rémond
 
The Real Time Web with XMPP
The Real Time Web with XMPPThe Real Time Web with XMPP
The Real Time Web with XMPPJack Moffitt
 

Viewers also liked (20)

Real time Web Application with XMPP and Wave
Real time Web Application with XMPP and WaveReal time Web Application with XMPP and Wave
Real time Web Application with XMPP and Wave
 
Nanomsg - Scalable Networking Library
Nanomsg - Scalable Networking LibraryNanomsg - Scalable Networking Library
Nanomsg - Scalable Networking Library
 
ProcessOne Push Platform: XMPP-based Push Solutions
ProcessOne Push Platform: XMPP-based Push SolutionsProcessOne Push Platform: XMPP-based Push Solutions
ProcessOne Push Platform: XMPP-based Push Solutions
 
Archipel Introduction - ejabberd SF Meetup
Archipel Introduction - ejabberd SF MeetupArchipel Introduction - ejabberd SF Meetup
Archipel Introduction - ejabberd SF Meetup
 
2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté
 
Create Your Own Language
Create Your Own LanguageCreate Your Own Language
Create Your Own Language
 
Multi Chat
Multi ChatMulti Chat
Multi Chat
 
Event Driven Architecture Concepts in Web Technologies - Part 2
Event Driven Architecture Concepts in Web Technologies - Part 2Event Driven Architecture Concepts in Web Technologies - Part 2
Event Driven Architecture Concepts in Web Technologies - Part 2
 
Erlang White Label
Erlang White LabelErlang White Label
Erlang White Label
 
WaveOne server and client by ProcessOne
WaveOne server and client by ProcessOneWaveOne server and client by ProcessOne
WaveOne server and client by ProcessOne
 
Real life XMPP Instant Messaging
Real life XMPP Instant MessagingReal life XMPP Instant Messaging
Real life XMPP Instant Messaging
 
Multitasking in iOS 7
Multitasking in iOS 7Multitasking in iOS 7
Multitasking in iOS 7
 
Nodejs Applications in Production
Nodejs Applications in ProductionNodejs Applications in Production
Nodejs Applications in Production
 
XMPP Academy #1
XMPP Academy #1XMPP Academy #1
XMPP Academy #1
 
Event Driven Architecture Concepts in Web Technologies - Part 1
Event Driven Architecture Concepts in Web Technologies - Part 1Event Driven Architecture Concepts in Web Technologies - Part 1
Event Driven Architecture Concepts in Web Technologies - Part 1
 
Practical Look at Erlang
Practical Look at ErlangPractical Look at Erlang
Practical Look at Erlang
 
A vision for ejabberd - ejabberd SF Meetup
A vision for ejabberd - ejabberd SF MeetupA vision for ejabberd - ejabberd SF Meetup
A vision for ejabberd - ejabberd SF Meetup
 
Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8
Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8 Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8
Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8
 
The Real Time Web with XMPP
The Real Time Web with XMPPThe Real Time Web with XMPP
The Real Time Web with XMPP
 
What is XMPP Protocol
What is XMPP ProtocolWhat is XMPP Protocol
What is XMPP Protocol
 

Similar to OneTeam Media Server

Programming IoT Gateways with macchina.io
Programming IoT Gateways with macchina.ioProgramming IoT Gateways with macchina.io
Programming IoT Gateways with macchina.ioGünter Obiltschnig
 
BonAHA framework - IEEE CCNC 2009
BonAHA framework - IEEE CCNC 2009BonAHA framework - IEEE CCNC 2009
BonAHA framework - IEEE CCNC 2009Suman Srinivasan
 
Introduction To Dot Net Siddhesh
Introduction To Dot Net SiddheshIntroduction To Dot Net Siddhesh
Introduction To Dot Net SiddheshSiddhesh Bhobe
 
Signotron Software India Projects
Signotron Software India ProjectsSignotron Software India Projects
Signotron Software India ProjectsRajat Kumar Saha
 
Qtp not just for gui anymore
Qtp   not just for gui anymoreQtp   not just for gui anymore
Qtp not just for gui anymorePragya Rastogi
 
WCF and WF in Framework 3.5
WCF and WF in Framework 3.5WCF and WF in Framework 3.5
WCF and WF in Framework 3.5ukdpe
 
Open Source XMPP for Cloud Services
Open Source XMPP for Cloud ServicesOpen Source XMPP for Cloud Services
Open Source XMPP for Cloud Servicesmattjive
 
Developing Interactive Applications Using Windows Live Robots, Activities, an...
Developing Interactive Applications Using Windows Live Robots, Activities, an...Developing Interactive Applications Using Windows Live Robots, Activities, an...
Developing Interactive Applications Using Windows Live Robots, Activities, an...goodfriday
 
Divide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.jsDivide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.jsSebastian Springer
 
Splunk Conf 2014 - Getting the message
Splunk Conf 2014 - Getting the messageSplunk Conf 2014 - Getting the message
Splunk Conf 2014 - Getting the messageDamien Dallimore
 
Mazda siv - web services
Mazda   siv - web servicesMazda   siv - web services
Mazda siv - web servicesOlivier Lépine
 
NodeJS guide for beginners
NodeJS guide for beginnersNodeJS guide for beginners
NodeJS guide for beginnersEnoch Joshua
 
Mastering the IoT With JavaScript and C++ - Günter Obiltschnig
Mastering the IoT With JavaScript and C++ - Günter ObiltschnigMastering the IoT With JavaScript and C++ - Günter Obiltschnig
Mastering the IoT With JavaScript and C++ - Günter ObiltschnigWithTheBest
 
Bn1001 demo ppt advance dot net
Bn1001 demo ppt advance dot netBn1001 demo ppt advance dot net
Bn1001 demo ppt advance dot netconline training
 
Implementing Messaging Patterns in JavaScript using the OpenAjax Hub
Implementing Messaging Patterns in JavaScript using the OpenAjax HubImplementing Messaging Patterns in JavaScript using the OpenAjax Hub
Implementing Messaging Patterns in JavaScript using the OpenAjax HubKevin Hakanson
 

Similar to OneTeam Media Server (20)

Chapter 6-Remoting
Chapter 6-RemotingChapter 6-Remoting
Chapter 6-Remoting
 
Programming IoT Gateways with macchina.io
Programming IoT Gateways with macchina.ioProgramming IoT Gateways with macchina.io
Programming IoT Gateways with macchina.io
 
GCF
GCFGCF
GCF
 
BonAHA framework - IEEE CCNC 2009
BonAHA framework - IEEE CCNC 2009BonAHA framework - IEEE CCNC 2009
BonAHA framework - IEEE CCNC 2009
 
Introduction To Dot Net Siddhesh
Introduction To Dot Net SiddheshIntroduction To Dot Net Siddhesh
Introduction To Dot Net Siddhesh
 
My Saminar On Php
My Saminar On PhpMy Saminar On Php
My Saminar On Php
 
Signotron Software India Projects
Signotron Software India ProjectsSignotron Software India Projects
Signotron Software India Projects
 
Qtp not just for gui anymore
Qtp   not just for gui anymoreQtp   not just for gui anymore
Qtp not just for gui anymore
 
WCF and WF in Framework 3.5
WCF and WF in Framework 3.5WCF and WF in Framework 3.5
WCF and WF in Framework 3.5
 
Open Source XMPP for Cloud Services
Open Source XMPP for Cloud ServicesOpen Source XMPP for Cloud Services
Open Source XMPP for Cloud Services
 
Developing Interactive Applications Using Windows Live Robots, Activities, an...
Developing Interactive Applications Using Windows Live Robots, Activities, an...Developing Interactive Applications Using Windows Live Robots, Activities, an...
Developing Interactive Applications Using Windows Live Robots, Activities, an...
 
Divide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.jsDivide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.js
 
Splunk Conf 2014 - Getting the message
Splunk Conf 2014 - Getting the messageSplunk Conf 2014 - Getting the message
Splunk Conf 2014 - Getting the message
 
Mazda siv - web services
Mazda   siv - web servicesMazda   siv - web services
Mazda siv - web services
 
NodeJS guide for beginners
NodeJS guide for beginnersNodeJS guide for beginners
NodeJS guide for beginners
 
Mastering the IoT With JavaScript and C++ - Günter Obiltschnig
Mastering the IoT With JavaScript and C++ - Günter ObiltschnigMastering the IoT With JavaScript and C++ - Günter Obiltschnig
Mastering the IoT With JavaScript and C++ - Günter Obiltschnig
 
Dynamic virtual evironments
Dynamic virtual evironmentsDynamic virtual evironments
Dynamic virtual evironments
 
Bn1001 demo ppt advance dot net
Bn1001 demo ppt advance dot netBn1001 demo ppt advance dot net
Bn1001 demo ppt advance dot net
 
Implementing Messaging Patterns in JavaScript using the OpenAjax Hub
Implementing Messaging Patterns in JavaScript using the OpenAjax HubImplementing Messaging Patterns in JavaScript using the OpenAjax Hub
Implementing Messaging Patterns in JavaScript using the OpenAjax Hub
 
Symbian OS
Symbian  OS Symbian  OS
Symbian OS
 

More from Mickaël Rémond

Go for Real Time Streaming Architectures - DotGo 2017
Go for Real Time Streaming Architectures - DotGo 2017Go for Real Time Streaming Architectures - DotGo 2017
Go for Real Time Streaming Architectures - DotGo 2017Mickaël Rémond
 
Fighting XMPP abuse and spam with ejabberd - ejabberd Workshop #1
Fighting XMPP abuse and spam with ejabberd - ejabberd Workshop #1Fighting XMPP abuse and spam with ejabberd - ejabberd Workshop #1
Fighting XMPP abuse and spam with ejabberd - ejabberd Workshop #1Mickaël Rémond
 
Managing ejabberd Platforms with Docker - ejabberd Workshop #1
Managing ejabberd Platforms with Docker - ejabberd Workshop #1Managing ejabberd Platforms with Docker - ejabberd Workshop #1
Managing ejabberd Platforms with Docker - ejabberd Workshop #1Mickaël Rémond
 
Messaging temps réel avec Go
Messaging temps réel avec GoMessaging temps réel avec Go
Messaging temps réel avec GoMickaël Rémond
 
Building Scalable Systems: What you can learn from Erlang - DotScale 2016
Building Scalable Systems: What you can learn from Erlang - DotScale 2016Building Scalable Systems: What you can learn from Erlang - DotScale 2016
Building Scalable Systems: What you can learn from Erlang - DotScale 2016Mickaël Rémond
 
Property-based testing of XMPP: generate your tests automatically - ejabberd ...
Property-based testing of XMPP: generate your tests automatically - ejabberd ...Property-based testing of XMPP: generate your tests automatically - ejabberd ...
Property-based testing of XMPP: generate your tests automatically - ejabberd ...Mickaël Rémond
 
IoT Studio #1: Protocols introduction and connected jukebox
IoT Studio #1: Protocols introduction and connected jukeboxIoT Studio #1: Protocols introduction and connected jukebox
IoT Studio #1: Protocols introduction and connected jukeboxMickaël Rémond
 
Deep Dive Into ejabberd Pubsub Implementation
Deep Dive Into ejabberd Pubsub ImplementationDeep Dive Into ejabberd Pubsub Implementation
Deep Dive Into ejabberd Pubsub ImplementationMickaël Rémond
 

More from Mickaël Rémond (10)

Go for Real Time Streaming Architectures - DotGo 2017
Go for Real Time Streaming Architectures - DotGo 2017Go for Real Time Streaming Architectures - DotGo 2017
Go for Real Time Streaming Architectures - DotGo 2017
 
Fighting XMPP abuse and spam with ejabberd - ejabberd Workshop #1
Fighting XMPP abuse and spam with ejabberd - ejabberd Workshop #1Fighting XMPP abuse and spam with ejabberd - ejabberd Workshop #1
Fighting XMPP abuse and spam with ejabberd - ejabberd Workshop #1
 
Managing ejabberd Platforms with Docker - ejabberd Workshop #1
Managing ejabberd Platforms with Docker - ejabberd Workshop #1Managing ejabberd Platforms with Docker - ejabberd Workshop #1
Managing ejabberd Platforms with Docker - ejabberd Workshop #1
 
Messaging temps réel avec Go
Messaging temps réel avec GoMessaging temps réel avec Go
Messaging temps réel avec Go
 
Building Scalable Systems: What you can learn from Erlang - DotScale 2016
Building Scalable Systems: What you can learn from Erlang - DotScale 2016Building Scalable Systems: What you can learn from Erlang - DotScale 2016
Building Scalable Systems: What you can learn from Erlang - DotScale 2016
 
Property-based testing of XMPP: generate your tests automatically - ejabberd ...
Property-based testing of XMPP: generate your tests automatically - ejabberd ...Property-based testing of XMPP: generate your tests automatically - ejabberd ...
Property-based testing of XMPP: generate your tests automatically - ejabberd ...
 
IoT Studio #1: Protocols introduction and connected jukebox
IoT Studio #1: Protocols introduction and connected jukeboxIoT Studio #1: Protocols introduction and connected jukebox
IoT Studio #1: Protocols introduction and connected jukebox
 
Deep Dive Into ejabberd Pubsub Implementation
Deep Dive Into ejabberd Pubsub ImplementationDeep Dive Into ejabberd Pubsub Implementation
Deep Dive Into ejabberd Pubsub Implementation
 
XMPP Academy #3
XMPP Academy #3XMPP Academy #3
XMPP Academy #3
 
XMPP Academy #2
XMPP Academy #2XMPP Academy #2
XMPP Academy #2
 

Recently uploaded

OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureEric D. Schabell
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfAijun Zhang
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding TeamAdam Moalla
 
Comparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioComparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioChristian Posta
 
COMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a WebsiteCOMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a Websitedgelyza
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...DianaGray10
 
Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.YounusS2
 
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesMd Hossain Ali
 
Introduction to Quantum Computing
Introduction to Quantum ComputingIntroduction to Quantum Computing
Introduction to Quantum ComputingGDSC PJATK
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Adtran
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6DianaGray10
 
RAG Patterns and Vector Search in Generative AI
RAG Patterns and Vector Search in Generative AIRAG Patterns and Vector Search in Generative AI
RAG Patterns and Vector Search in Generative AIUdaiappa Ramachandran
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...Aggregage
 
Videogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfVideogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfinfogdgmi
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8DianaGray10
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024SkyPlanner
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1DianaGray10
 
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IES VE
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPathCommunity
 
Do we need a new standard for visualizing the invisible?
Do we need a new standard for visualizing the invisible?Do we need a new standard for visualizing the invisible?
Do we need a new standard for visualizing the invisible?SANGHEE SHIN
 

Recently uploaded (20)

OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability Adventure
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdf
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team
 
Comparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioComparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and Istio
 
COMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a WebsiteCOMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a Website
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
 
Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.
 
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
 
Introduction to Quantum Computing
Introduction to Quantum ComputingIntroduction to Quantum Computing
Introduction to Quantum Computing
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6
 
RAG Patterns and Vector Search in Generative AI
RAG Patterns and Vector Search in Generative AIRAG Patterns and Vector Search in Generative AI
RAG Patterns and Vector Search in Generative AI
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
 
Videogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfVideogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdf
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1
 
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation Developers
 
Do we need a new standard for visualizing the invisible?
Do we need a new standard for visualizing the invisible?Do we need a new standard for visualizing the invisible?
Do we need a new standard for visualizing the invisible?
 

OneTeam Media Server

  • 1. OneTeam Media Server 2009, 25th june Mickaël Rémond <mremond@process-one.net>
  • 3. ProcessOne: An Erlang company 20 people, most of them Erlang developers Lots of Erlang Veterans (Two «Erlang User of the Year !») Focusing on software development and technology for which Erlang is a good fit. World wide customer base: We are spreading Erlang use all around the world. Main customers base: Social networks Carrier / Telco
  • 4. Our customers worldwide ~80 major customers ~45 millions of users
  • 5. Software products: ejabberd Instant messaging platform based on the open XMPP protocol. Open source software. Lots of example of Erlang code. Largely used in the world and usefull to convert developers to Erlang and gain mind share. About 40% market share of the public XMPP known domains. Known for its clustering, scalability and hackability (easy to extend, live code update) Very large deployment in production Require some know-how to reach large scale, but strongly supported solution by ProcessOne Very large development community
  • 6. Software products: Tsung Highly scalable benchmark tool: Can easily simulate lots of users on a cluster (hundreds of thousands) Many supported protocols: HTTP/HTTPS XMPP Postgres LDAP ... Extensible: You can add new protocols. Strong support by ProcessOne.
  • 8. OneTeam Media Server This is a Flash server, designed to develop connected Adobe Flash client applications. It can supports: Networked web applications (like text chat system) Voice Video playback Video recording Video chat Event distribution with publish and subscribe system ... Perfect server for rich web real time applications.
  • 9. OneTeam Media Server: Why Erlang ? For scalability and flexibility For clustering features For the ability to integrate the application with other popular Erlang software: ejabberd Couchdb Yaws Mochiweb RabbitMQ All those software are getting mindshare in their area. OMS will both add value and gain from them.
  • 10. Rich real time web applications in Erlang OneTeam Media Server gives the opportunity to build Adobe Flash or Adobe Air connected / real time applications in Erlang OneTeam Media Server is an application server. It is used as a building brick for your own applications. Example applications: Low latency multiplayer games. Video voicemail (Seesmic-like features). Video conferencing system. Video distribution system. Event distribution system for financial dashboards. Push base news distribution systems. ...
  • 11. OneTeam Media Server perspective OneTeam Media server along with ejabberd can help building the most versatile web application server platform. Both components can play a different role but can become a key element in the real time web. Can bring new web developers / startup to Erlang. All in Erlang !
  • 13. Technical overview Several Adobe protocols are at the core of the platform: RTMP: Real Time Messaging Protocol (port 1935) Originally used for Flash persistence. Now used for Flash RPC, streaming, messaging. AMF: Action Message Format. Protocol to define the RPC and message form. This is a binary serialized representation of Flash objects. Technically RTMP is the main transport protocol, but actually it is AMF over RTMP. All other features are build upon those foundations: Shared objects Publish and subscribe Video streaming
  • 14. Technical overview RTMP exist in various flavour: RMTP: Standard TCP/IP (port 1935). RTMPS: Secured RTMP. This is basically RTMP inside TLS. RMTPT: Tunnelled over HTTP (port 80). Fallback mechanism used to pass firewalls. It can work over HTTPS as well. Yes, it works with video streaming as well Currently OMS implements only RTMP This is the bigger part Adding other variations should be straigthforward
  • 15. Flash client point of view The first thing to do to work with OMS on the Flash client is to connect to OMS. This is done with the Flash connection object: flash.net.NetConnection Once you have done that you have a bidirectional stream to perform RPC from client to server or from server to client. If you want to support media publishing (Voice or Video), you have to use another Flash object: flash.net.NetStream
  • 16. OMS application point of view You need a module to handle the connection from your application. You do that by creating an adaptor for the Flash NetConnection. This is an arbitrary module implementing connect/2 method and link to oms_netconnection object. If you want to stream video or voice from webcam / microphone you need to implement specific feature in a netstream module and link it to oms_netstream object Example of function to implement: publish/2,closeStream/2
  • 17. OneTeam Media Server: Example applications
  • 18. Basic application First basic application will only open the RTMP connection between Flash client and module. Client code (Flex) Server code (Erlang)
  • 19. Basic application: client <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()"> <mx:Script> <![CDATA[ import flash.net.NetConnection; import flash.net.SharedObject; import mx.controls.Alert private var myconn:NetConnection; public function init():void { myconn = new NetConnection(); myconn.addEventListener("netStatus", onNCStatus); myconn.connect("rtmp://127.0.0.1/demo"); } public function onNCStatus(event:NetStatusEvent):void { if(event.info.code == "NetConnection.Connect.Success") { Alert.show("Connected to OMS"); } else { Alert.show("Failed to connect to OMS. Reason:"+ event.info.code); } } ]]> </mx:Script> </mx:Application>
  • 20. Basic application: Server -module(mynetconnection). This is raw data structure, -export([connect/2]). but we provide helpers / connect(_CallC,_Msg) -> wrappers io:format("my netconnection received call"), {object,Obj} = lists:nth(1,_Msg), case dict:find("objectEncoding",Obj) of {ok,{number,Encoding}} -> io:format("~nEncoding is :~w",[Encoding]), {ok,[{result,[{mixed_array,{0,[{"objectEncoding",{number,Encoding}},{"application",{null,0}},{"level", {string,"status"}},{"description",{string,"Connection succeeded"}}, {"code",{string,"NetConnection.Connect.Success"}}]}}]}]}; error -> {ok,[{result,[{object,dict:from_list([{"level",{string,"status"}}, {"code",{string,"NetConnection.Connect.Failed"}}, {"description",{string,"Connection failed"}}])}]}]} end.
  • 21. Application XML configuration <?xml version="1.0" encoding="ISO-8859-1"?> <omsapp> <display-name>OMS Demo Application</display-name> <short-name>demo</short-name> <apppath>server/ebin</apppath> <adapter obj="oms_netconnection" adapter="mynetconnection" /> </omsapp> You can have several adapter objects
  • 22. Chat application The goal of the chat test application is to show you can do push from the server side by calling functions that are running on the client. We have developed two versions of the chat application: with RPC: Server is calling Actionscript running on the client side. with RemoteShared objects:
  • 23. Chat application: Interesting client code public function post():void { resp = new Responder(glamresult,glamerror); myconn.call("post",resp,nick.text,saisie.text); input.text = ""; } public function newline(s:String):void { chatarea.text += s + "n"; }
  • 24. Chat application: Interesting server code post(CallC, Msg) -> {string,From} = lists:nth(2,Msg), {string,Text} = lists:nth(3,Msg), gen_server:cast(CallC#callcontext.rtpid, {clients_call,"newline",[{string,binary_to_list(Text)}],0}), Arraydata = lists:map( fun(X) -> {string,X} end,[]), AnsAMF3 = {array,Arraydata}, {ok,[{result,[AnsAMF3]}]}. clients_call: call on all clients client_call: use to call on only one client
  • 25. Remote shared objects: Client overview 1/2 Nothing to do on server application side. Handled by OMS framework. private var myconn:NetConnection; private var myRemoteSO:SharedObject; ... myconn = new NetConnection(); myconn.connect(UIrtmpURI.text); myRemoteSO = SharedObject.getRemote(SOName.text, myconn.uri, true); myRemoteSO.addEventListener(SyncEvent.SYNC,SOSync); myRemoteSO.connect(myconn); ...
  • 26. Remote shared objects: Client overview 2/2 myRemoteSO.setProperty(UIKey.text,UIValue.text); myRemoteSO.flush(); myRemoteSO.close(); myRemoteSO.clear(); public function SOSync(event:SyncEvent):void { debugt.text += "n" + "SO Sync event from server: " + event.toString() + "n" ; SOList.dataProvider = myRemoteSO.data; }
  • 28. Video player / recorder: Interesting server code getlistofavmedia(_CallC,_Msg) -> io:format("~ngetlistofavmediacalled"), Filelist = filelib:wildcard("../medias/*.flv"), Arraydata = lists:map( fun(X) -> {string,X} end,Filelist), AnsAMF3 = {array,Arraydata}, {ok,[{result,[AnsAMF3]}]}.
  • 29. Video player / recorder: Interesting client code public function get_list_of_av_medias():void { var resp:Responder; resp = new Responder(glamresult,glamerror); myconn.call("getlistofavmedia",resp); } private function glamresult(result:Array):void { var length:int = result.length; var newtab:Array; newtab = new Array(); for (var i:int=0;i<length;i++) { var temp:String; temp = result[i]; var ta:Array; ta = temp.split("/"); var med:String = ta[ta.length - 1]; newtab[i] = {Name:med}; } medlist.dataProvider = newtab; }
  • 30. Video player / recorder: Interesting client code public var ns1:NetStream; public function startrecording(e:MouseEvent):void { bustop.visible = true; burec.visible = false; var temp1:String = medrecname.text.replace("/",""); var temp2:String = temp1.replace("..",""); if (ns1 != null) { ns1.close(); ns1.attachCamera(camera); ns1.publish(temp2,"RECORD"); } }
  • 34. What’s next ? Open Source release When ? 2009, July 13th (in beta version) Release from ProcessOne web site Planned features RTMPT: Adobe connected protocol over HTTP This is needed in some context to work over firewalls. Adobe Livecycle publish and subscribe like features Ability to support push to client over RTMP / RTMPT BlazeDS (Java exist in open source but does not support more efficient protocol RTMP). More example applications