SlideShare una empresa de Scribd logo
1 de 33
OneTeam Media Server
2009, 30th april
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
         ~50 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=quot;1.0quot; encoding=quot;utf-8quot;?>
 <mx:Application xmlns:mx=quot;http://www.adobe.com/2006/mxmlquot; layout=quot;absolutequot; initialize=quot;init()quot;>
     <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(quot;netStatusquot;, onNCStatus);
     myconn.connect(quot;rtmp://127.0.0.1/demoquot;);
 }


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

                                                                        This is raw data structure,
 -export([connect/2]).
                                                                        but we provide helpers /
                                                                        wrappers
 connect(_CallC,_Msg) ->
   io:format(quot;my netconnection received callquot;),
   {object,Obj} = lists:nth(1,_Msg),
   case dict:find(quot;objectEncodingquot;,Obj) of
      {ok,{number,Encoding}} ->
          io:format(quot;~nEncoding is :~wquot;,[Encoding]),
          {ok,[{result,[{mixed_array,{0,[{quot;objectEncodingquot;,{number,Encoding}},{quot;applicationquot;,{null,0}},{quot;levelquot;,
              {string,quot;statusquot;}},{quot;descriptionquot;,{string,quot;Connection succeededquot;}},
              {quot;codequot;,{string,quot;NetConnection.Connect.Successquot;}}]}}]}]};
      error ->
          {ok,[{result,[{object,dict:from_list([{quot;levelquot;,{string,quot;statusquot;}},
                 {quot;codequot;,{string,quot;NetConnection.Connect.Failedquot;}},
                 {quot;descriptionquot;,{string,quot;Connection failedquot;}}])}]}]}
   end.
Application XML configuration
 <?xml version=quot;1.0quot; encoding=quot;ISO-8859-1quot;?>
 <omsapp>
 <display-name>OMS Demo Application</display-name>
 <short-name>demo</short-name>
 <apppath>server/ebin</apppath>
 <adapter obj=quot;oms_netconnectionquot; adapter=quot;mynetconnectionquot; />
 </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.
Chat application: Interesting client code
    public function post():void {
      resp = new Responder(glamresult,glamerror);
      myconn.call(quot;postquot;,resp,nick.text,saisie.text);
       input.text = quot;quot;;
    }

    public function newline(s:String):void {
       chatarea.text += s + quot;nquot;;
    }
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,quot;newlinequot;,[{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
Chat application: Demo
Video player / recorder: Interesting server code
 getlistofavmedia(_CallC,_Msg) ->
   io:format(quot;~ngetlistofavmediacalledquot;),
   Filelist = filelib:wildcard(quot;../medias/*.flvquot;),
   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(quot;getlistofavmediaquot;,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(quot;/quot;);
                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(quot;/quot;,quot;quot;);
    var temp2:String = temp1.replace(quot;..quot;,quot;quot;);
    if (ns1 != null) {
        ns1.close();
        ns1.attachCamera(camera);
        ns1.publish(temp2,quot;RECORDquot;);
     }
 }
Video player: Demo
Video chat: Demo
OneTeam Media Server future
What’s next ?
 Open Source release
    When ?
       2009, May 15th (in alpha version)
       Release from ProcessOne web site
 Planned features
    Remote shared objects
    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/

Más contenido relacionado

La actualidad más candente

Network programming in java - PPT
Network programming in java - PPTNetwork programming in java - PPT
Network programming in java - PPTkamal kotecha
 
Java Networking
Java NetworkingJava Networking
Java NetworkingSunil OS
 
Socket programming-tutorial-sk
Socket programming-tutorial-skSocket programming-tutorial-sk
Socket programming-tutorial-sksureshkarthick37
 
Socket programming using java
Socket programming using javaSocket programming using java
Socket programming using javaUC San Diego
 
Socket programming in Java (PPTX)
Socket programming in Java (PPTX)Socket programming in Java (PPTX)
Socket programming in Java (PPTX)UC San Diego
 
Arduino LED maXbox starter18_3
Arduino LED maXbox starter18_3Arduino LED maXbox starter18_3
Arduino LED maXbox starter18_3Max Kleiner
 
Java Socket Programming
Java Socket ProgrammingJava Socket Programming
Java Socket ProgrammingVipin Yadav
 
Socket programming-in-python
Socket programming-in-pythonSocket programming-in-python
Socket programming-in-pythonYuvaraja Ravi
 
Socket Programming Tutorial
Socket Programming TutorialSocket Programming Tutorial
Socket Programming TutorialJignesh Patel
 
maXbox Arduino Tutorial
maXbox Arduino TutorialmaXbox Arduino Tutorial
maXbox Arduino TutorialMax Kleiner
 
Socket Programming it-slideshares.blogspot.com
Socket  Programming it-slideshares.blogspot.comSocket  Programming it-slideshares.blogspot.com
Socket Programming it-slideshares.blogspot.comphanleson
 
Socket Programming by Rajkumar Buyya
Socket Programming by Rajkumar BuyyaSocket Programming by Rajkumar Buyya
Socket Programming by Rajkumar BuyyaiDhawalVaja
 

La actualidad más candente (20)

Network programming in java - PPT
Network programming in java - PPTNetwork programming in java - PPT
Network programming in java - PPT
 
Java Networking
Java NetworkingJava Networking
Java Networking
 
Sockets
SocketsSockets
Sockets
 
Socket programming-tutorial-sk
Socket programming-tutorial-skSocket programming-tutorial-sk
Socket programming-tutorial-sk
 
Socket programming using java
Socket programming using javaSocket programming using java
Socket programming using java
 
Socket programming in Java (PPTX)
Socket programming in Java (PPTX)Socket programming in Java (PPTX)
Socket programming in Java (PPTX)
 
Java socket programming
Java socket programmingJava socket programming
Java socket programming
 
java networking
 java networking java networking
java networking
 
Socket programming
Socket programmingSocket programming
Socket programming
 
Arduino LED maXbox starter18_3
Arduino LED maXbox starter18_3Arduino LED maXbox starter18_3
Arduino LED maXbox starter18_3
 
Basic socket programming
Basic socket programmingBasic socket programming
Basic socket programming
 
Java Socket Programming
Java Socket ProgrammingJava Socket Programming
Java Socket Programming
 
Socket programming-in-python
Socket programming-in-pythonSocket programming-in-python
Socket programming-in-python
 
Socket Programming Tutorial
Socket Programming TutorialSocket Programming Tutorial
Socket Programming Tutorial
 
maXbox Arduino Tutorial
maXbox Arduino TutorialmaXbox Arduino Tutorial
maXbox Arduino Tutorial
 
Socket Programming it-slideshares.blogspot.com
Socket  Programming it-slideshares.blogspot.comSocket  Programming it-slideshares.blogspot.com
Socket Programming it-slideshares.blogspot.com
 
Java 8-revealed
Java 8-revealedJava 8-revealed
Java 8-revealed
 
Socket Programming by Rajkumar Buyya
Socket Programming by Rajkumar BuyyaSocket Programming by Rajkumar Buyya
Socket Programming by Rajkumar Buyya
 
Networking in Java
Networking in JavaNetworking in Java
Networking in Java
 
Log4 J
Log4 JLog4 J
Log4 J
 

Similar a OneTeam Media Server

FMS Administration Seminar
FMS Administration SeminarFMS Administration Seminar
FMS Administration SeminarYoss Cohen
 
Maxbox starter18
Maxbox starter18Maxbox starter18
Maxbox starter18Max Kleiner
 
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
 
Open Source XMPP for Cloud Services
Open Source XMPP for Cloud ServicesOpen Source XMPP for Cloud Services
Open Source XMPP for Cloud Servicesmattjive
 
JavaScript on HP webOS: Enyo and Node.js
JavaScript on HP webOS: Enyo and Node.jsJavaScript on HP webOS: Enyo and Node.js
JavaScript on HP webOS: Enyo and Node.jsBen Combee
 
Machine Problem 1: Let's chat
Machine Problem 1: Let's chatMachine Problem 1: Let's chat
Machine Problem 1: Let's chatbutest
 
Bn1001 demo ppt advance dot net
Bn1001 demo ppt advance dot netBn1001 demo ppt advance dot net
Bn1001 demo ppt advance dot netconline training
 
MSMDC_CLI363
MSMDC_CLI363MSMDC_CLI363
MSMDC_CLI363mokacao
 
Iphone client-server app with Rails backend (v3)
Iphone client-server app with Rails backend (v3)Iphone client-server app with Rails backend (v3)
Iphone client-server app with Rails backend (v3)Sujee Maniyam
 
MS Day EPITA 2010: Visual Studio 2010 et Framework .NET 4.0
MS Day EPITA 2010: Visual Studio 2010 et Framework .NET 4.0MS Day EPITA 2010: Visual Studio 2010 et Framework .NET 4.0
MS Day EPITA 2010: Visual Studio 2010 et Framework .NET 4.0Thomas Conté
 
Best Practices & Lessons Learned from the field on EMC Documentum xCP 2.0
Best Practices & Lessons Learned from the field on EMC Documentum xCP 2.0Best Practices & Lessons Learned from the field on EMC Documentum xCP 2.0
Best Practices & Lessons Learned from the field on EMC Documentum xCP 2.0Haytham Ghandour
 
Signotron Software India Projects
Signotron Software India ProjectsSignotron Software India Projects
Signotron Software India ProjectsRajat Kumar Saha
 
Whidbey old
Whidbey old Whidbey old
Whidbey old grenaud
 
Design an Implementation of A Messaging and Resource Sharing Software
Design an Implementation of A Messaging and Resource Sharing SoftwareDesign an Implementation of A Messaging and Resource Sharing Software
Design an Implementation of A Messaging and Resource Sharing Softwarenilabarai
 

Similar a OneTeam Media Server (20)

FMS Administration Seminar
FMS Administration SeminarFMS Administration Seminar
FMS Administration Seminar
 
Maxbox starter18
Maxbox starter18Maxbox starter18
Maxbox starter18
 
Programming IoT Gateways with macchina.io
Programming IoT Gateways with macchina.ioProgramming IoT Gateways with macchina.io
Programming IoT Gateways with macchina.io
 
Chapter 6-Remoting
Chapter 6-RemotingChapter 6-Remoting
Chapter 6-Remoting
 
ArduinoWorkshop2.pdf
ArduinoWorkshop2.pdfArduinoWorkshop2.pdf
ArduinoWorkshop2.pdf
 
Open Source XMPP for Cloud Services
Open Source XMPP for Cloud ServicesOpen Source XMPP for Cloud Services
Open Source XMPP for Cloud Services
 
GCF
GCFGCF
GCF
 
unit1 part 1 sem4 php.docx
unit1 part 1 sem4 php.docxunit1 part 1 sem4 php.docx
unit1 part 1 sem4 php.docx
 
JavaScript on HP webOS: Enyo and Node.js
JavaScript on HP webOS: Enyo and Node.jsJavaScript on HP webOS: Enyo and Node.js
JavaScript on HP webOS: Enyo and Node.js
 
Machine Problem 1: Let's chat
Machine Problem 1: Let's chatMachine Problem 1: Let's chat
Machine Problem 1: Let's chat
 
Bn1001 demo ppt advance dot net
Bn1001 demo ppt advance dot netBn1001 demo ppt advance dot net
Bn1001 demo ppt advance dot net
 
MSMDC_CLI363
MSMDC_CLI363MSMDC_CLI363
MSMDC_CLI363
 
Iphone client-server app with Rails backend (v3)
Iphone client-server app with Rails backend (v3)Iphone client-server app with Rails backend (v3)
Iphone client-server app with Rails backend (v3)
 
MS Day EPITA 2010: Visual Studio 2010 et Framework .NET 4.0
MS Day EPITA 2010: Visual Studio 2010 et Framework .NET 4.0MS Day EPITA 2010: Visual Studio 2010 et Framework .NET 4.0
MS Day EPITA 2010: Visual Studio 2010 et Framework .NET 4.0
 
Mp &mc programs
Mp &mc programsMp &mc programs
Mp &mc programs
 
Best Practices & Lessons Learned from the field on EMC Documentum xCP 2.0
Best Practices & Lessons Learned from the field on EMC Documentum xCP 2.0Best Practices & Lessons Learned from the field on EMC Documentum xCP 2.0
Best Practices & Lessons Learned from the field on EMC Documentum xCP 2.0
 
Signotron Software India Projects
Signotron Software India ProjectsSignotron Software India Projects
Signotron Software India Projects
 
Whidbey old
Whidbey old Whidbey old
Whidbey old
 
mobicon_paper
mobicon_papermobicon_paper
mobicon_paper
 
Design an Implementation of A Messaging and Resource Sharing Software
Design an Implementation of A Messaging and Resource Sharing SoftwareDesign an Implementation of A Messaging and Resource Sharing Software
Design an Implementation of A Messaging and Resource Sharing Software
 

Más de 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
 
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
 
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
 
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
 
Archipel Introduction - ejabberd SF Meetup
Archipel Introduction - ejabberd SF MeetupArchipel Introduction - ejabberd SF Meetup
Archipel Introduction - ejabberd SF MeetupMickaël Rémond
 
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
 
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
 
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 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
 

Más de Mickaël Rémond (20)

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
 
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
 
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
 
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é
 
XMPP Academy #1
XMPP Academy #1XMPP Academy #1
XMPP Academy #1
 
Archipel Introduction - ejabberd SF Meetup
Archipel Introduction - ejabberd SF MeetupArchipel Introduction - ejabberd SF Meetup
Archipel Introduction - ejabberd SF Meetup
 
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
 
Multitasking in iOS 7
Multitasking in iOS 7Multitasking in iOS 7
Multitasking in iOS 7
 
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
 
WaveOne server and client by ProcessOne
WaveOne server and client by ProcessOneWaveOne server and client by ProcessOne
WaveOne server and client by ProcessOne
 
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
 
Erlang White Label
Erlang White LabelErlang White Label
Erlang White Label
 

Último

SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 

Último (20)

SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 

OneTeam Media Server

  • 1. OneTeam Media Server 2009, 30th april 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 ~50 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=quot;1.0quot; encoding=quot;utf-8quot;?> <mx:Application xmlns:mx=quot;http://www.adobe.com/2006/mxmlquot; layout=quot;absolutequot; initialize=quot;init()quot;> <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(quot;netStatusquot;, onNCStatus); myconn.connect(quot;rtmp://127.0.0.1/demoquot;); } public function onNCStatus(event:NetStatusEvent):void { if(event.info.code == quot;NetConnection.Connect.Successquot;) { Alert.show(quot;Connected to OMSquot;); } else { Alert.show(quot;Failed to connect to OMS. Reason:quot;+ 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 / wrappers connect(_CallC,_Msg) -> io:format(quot;my netconnection received callquot;), {object,Obj} = lists:nth(1,_Msg), case dict:find(quot;objectEncodingquot;,Obj) of {ok,{number,Encoding}} -> io:format(quot;~nEncoding is :~wquot;,[Encoding]), {ok,[{result,[{mixed_array,{0,[{quot;objectEncodingquot;,{number,Encoding}},{quot;applicationquot;,{null,0}},{quot;levelquot;, {string,quot;statusquot;}},{quot;descriptionquot;,{string,quot;Connection succeededquot;}}, {quot;codequot;,{string,quot;NetConnection.Connect.Successquot;}}]}}]}]}; error -> {ok,[{result,[{object,dict:from_list([{quot;levelquot;,{string,quot;statusquot;}}, {quot;codequot;,{string,quot;NetConnection.Connect.Failedquot;}}, {quot;descriptionquot;,{string,quot;Connection failedquot;}}])}]}]} end.
  • 21. Application XML configuration <?xml version=quot;1.0quot; encoding=quot;ISO-8859-1quot;?> <omsapp> <display-name>OMS Demo Application</display-name> <short-name>demo</short-name> <apppath>server/ebin</apppath> <adapter obj=quot;oms_netconnectionquot; adapter=quot;mynetconnectionquot; /> </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.
  • 23. Chat application: Interesting client code public function post():void { resp = new Responder(glamresult,glamerror); myconn.call(quot;postquot;,resp,nick.text,saisie.text); input.text = quot;quot;; } public function newline(s:String):void { chatarea.text += s + quot;nquot;; }
  • 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,quot;newlinequot;,[{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
  • 26. Video player / recorder: Interesting server code getlistofavmedia(_CallC,_Msg) -> io:format(quot;~ngetlistofavmediacalledquot;), Filelist = filelib:wildcard(quot;../medias/*.flvquot;), Arraydata = lists:map( fun(X) -> {string,X} end,Filelist), AnsAMF3 = {array,Arraydata}, {ok,[{result,[AnsAMF3]}]}.
  • 27. Video player / recorder: Interesting client code public function get_list_of_av_medias():void { var resp:Responder; resp = new Responder(glamresult,glamerror); myconn.call(quot;getlistofavmediaquot;,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(quot;/quot;); var med:String = ta[ta.length - 1]; newtab[i] = {Name:med}; } medlist.dataProvider = newtab; }
  • 28. 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(quot;/quot;,quot;quot;); var temp2:String = temp1.replace(quot;..quot;,quot;quot;); if (ns1 != null) { ns1.close(); ns1.attachCamera(camera); ns1.publish(temp2,quot;RECORDquot;); } }
  • 32. What’s next ? Open Source release When ? 2009, May 15th (in alpha version) Release from ProcessOne web site Planned features Remote shared objects 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

Notas del editor