SlideShare une entreprise Scribd logo
1  sur  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/

Contenu connexe

Tendances

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
 

Tendances (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
 

Similaire à 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
 

Similaire à 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
 

Plus 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
 

Plus 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
 

Dernier

TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 

Dernier (20)

TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 

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

Notes de l'éditeur