SlideShare a Scribd company logo
1 of 27
Download to read offline
Streaming in Java e Flex con Red5
Marcello Teodori
marcello.teodori@jugmilano.it
m.teodori@excogitanet.com

Java User Group Milano
http://www.jugmilano.it

JUG Milano Meeting #35 24/09/2009
Di cosa parleremo?
●   RIA e Applicazioni Video: MyTube
●   Supporto media in Flex/Flash
●   Il protocollo RTMP
●   Red5
●   Xuggle




                          JUG Milano Meeting #35   2
Definizione di Rich Internet Application

       "web applications have extended the reach of enterprises to
  customers, offering anywhere and anytime access. However, this has
       been at the expense of the overall user-experience, which is
              diminished by delivery through the web browser"
                     Steven Webster e Alistair McLeod,
              autori del libro Flex Integration with J2EE, 2005
          http://www.theserverside.com/articles/article.tss?l=Flex
         → un nuovo tipo di web application che ne superi i limiti?
  Caratteristiche:
   ● web deployment


   ● logica applicativa suddivisa fra client e server


   ● interazione immediata senza percezione di un roundtrip sul server


   ●
     accesso a contenuti rich: audio/video


                                       JUG Milano Meeting #35            3
Architettura di Riferimento


  My




               JUG Milano Meeting #35   4
La Flash Platform di Adobe




              JUG Milano Meeting #35   5
Supporto Media su Flash

●   FLV è il formato “container” per il video in Flash
●   Il video contenuto in un FLV può essere codificato in uno dei
    seguenti formati a seconda della versione del Flash Player:
           – Flash Player 6 e 7 supportano Sorenson

         –   Flash Player 8+ supporta VP6 e MP3
               → creo video solo con prodotti On2 e Flash Player
         –   AIR e Flash Player 9.0.115.0+ supportano H.264 e AAC
               → creo video con prodotti con supporto allo standard
●   Il codec audio che usa il Flash Player per registrare input da
    device audio locali, come un microfono, è Speex




                                       JUG Milano Meeting #35         6
Supporto Server per Media

Qual è il modo più adatto per servire media?

●   HTTP download
     – download progressivo
     – seek richiede metadata injection
●   RTMP streaming
     – non è standard (vedi RTP/RTSP)
     – permette live
     – proprietario Adobe usato per lo streaming nei loro
       prodotti
        ● Flash Player/AIR come client

        ● Flash Media Server sul server




                                   JUG Milano Meeting #35   7
I nostri strumenti




           JUG Milano Meeting #35   8
Red5
●   cos'è?
    Server di streaming opensource in Java per client
    Flash alternativo a Flash Media Server.
●   basato su:
       –   Spring
       –   Apache Mina
       –   Tomcat
●   versione 0.8 stabile, 0.9 RC1 con supporto H.264:
    http://gregoire.org/2008/10/06/red5-h264/
●   deployment come server standalone o come war
    in generico servlet container Java EE
                              JUG Milano Meeting #35   9
Cosa offre Red5?
●   Implementazione in reverse engineering del
    protocollo RTMP, reso pubblico a giugno
    2009 da Adobe, con supporto varianti
    RTMPS e RTMPT
●   Streaming Audio/Video
●   Recording Client Streams
●   Remote Shared Objects
●   Live Stream Publishing
●   Remoting (AMF) per Flex API
●   client-to-server method call
●   server-to-client method client
                           JUG Milano Meeting #35   10
Esempi di applicazioni

●   Chat
●   Videoconferenza
●   Lavagnetta Condivisa
●   Player video
●   Player Mp3
●   Web TV
●   Video Notizie live in streaming
●   Sistemi di Collaborazione Online
●   Realtime multiplayer Game
●   Aule Web
●   Video Blog
●   Etc


                                   JUG Milano Meeting #35   11
Creare applicazioni Red5
●   WAR packaging
       – streams → cartella per file FLV

        –   persistence → cartella per shared object
        –   WEB-INF
                lib
                ●


              ● classes


              ● web.xml


              ● red5-web.xml → configurazione spring


              ● red5-web.properties → property placeholder


●   per deployment non su server standalone bisogna
    aggiungere le configurazioni spring del server Red5


                                    JUG Milano Meeting #35   12
Come Red5 usa Spring
●   2 livelli di ApplicationContext
           – 1 parent application context condiviso
                 caricato via ContextSingletonBeanFactoryLocator
                  ●  red5-common.xml → beans del server Red5
                   ● red5-core.xml → endpoint Mina TCP


                   ● red5-default.xml → root context Red5 di default


         –   N child application context → per applicazione WAR
                  ● red5-web.xml
●   bean contenuti in un'application:
         – context

         –   1 web scope più N eventuali subscope
         –   handler → entry point dell'applicazione Red5, deve essere
               un bean del seguente tipo o sua sottoclasse:
               org.red5.server.adapter.ApplicationAdapter

                                         JUG Milano Meeting #35          13
Anatomia di una URL RTMP per Red5
 protocol://host:port/application/scope/../scope


 ●   protocol → rtmp/rtmps/rtmpt
 ●   host → server Red5
 ●   port → porta: 1935 per rtmp, 80 per rtmpt,
     443 per rtmps
 ●   application → contextPath del web scope
 ●   scope → nome subscope in gerarchia



                             JUG Milano Meeting #35   14
Un'applicazione Red5
Java Server
package it.jugmilano.examples.red5;
import org.red5.server.adapter.ApplicationAdapter;
public class Application extends ApplicationAdapter {
     public List<Movie> getHitParadeMovieAtPosition(int i) {
         VideoDetails vd = new VideoDetails();
         vd.setId(i);
         vd.setName("Pulp Fiction");
         return vd;
     }
}

ActionScript Client
nc = new NetConnection();
nc.connect("rtmp://localhost/myapp", "myusername", "mypassword");
nc.onResult = function(obj:*) {
     trace("The result is " + obj);
}
nc.call("getHitParadeMovieAtPosition", nc, 1);
ns = new NetStream(nc);
video = new Video();
// publish
ns.attachCamera(Camera.getCamera());
ns.publish("my-video", "live");
// play
video.attachNetStream(ns);
ns.play("your-video");


                                             JUG Milano Meeting #35   15
Mapping Java-Flex
Java                                     ActionScript
package it.jug...odel;                   package {


public class VideoDetails {                  [Bindable]
    private Integer id;                      [RemoteClass(alias="it...deoDetails")]
    private String name;                     public class VideoDetails {
                                                 public var id:*;
    public Long getId() {                        public var name:String;
        return id;                           }
    }
                                         }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }


    public void setName(String name) {
        this.name = name;
    }
}


                                             JUG Milano Meeting #35               16
Un esempio
Riproduzione di un file video FLV in download progressivo
su HTTP vs. streaming RTMP:
1. avvio Red5 standalone
2. upload in cartella streams sul server
3. connessione tramite oggetto NetConnection con URL
   HTTP
4. creazione oggetto NetStream da NetConnection
5. aggancio NetStream a componente VideoDisplay
6. play del file FLV sul NetStream
7. ripeti dal punto 3 a 6 sostituendo on URL RTMP
8. effettua seek del file



                               JUG Milano Meeting #35       17
red5.deployment.type
●   standalone
          –   tomcat embedded preconfigurato
          –   distribuzioni per i vari OS
          –   hot deployment WAR
          –   problemi di visibilità classi
●   war
          –   si installa su qualsiasi servlet container JEE
          –   local deployment in ROOT war
                   ●   posso usare “mavenized” red5
          –   remote deployment in WAR aggiuntivi
                   ●   usa RTMPTunnelServlet

                                       JUG Milano Meeting #35   18
AMF Remoting

●   posso usare le API RemoteObject di Flex al
    posto della NetConnection di Flash
●   richiede la configurazione della
    AMFGatewayServlet in web.xml
●   il codice sorgente di Red5 conterrebbe anche
    le classi di supporto al messaging per le API
    Producer e Consumer di Flex, ma... non
    sono mai citate in esempi e documentazione
    come funzionanti...



                           JUG Milano Meeting #35   19
Integration Testing in Java
Red5 mette a disposizione delle Client API in Java
per costruire test JUnit di integrazione, in alternativa
all'uso delle Flash API in test FlexUnit:
● RTMPClient per RTMP/RTMPT/RTMPS

● RemotingClient per AMF/HTTP




Queste classi sono utilizzate nella test suite ufficiale
di prodotto, i cui risultati di esecuzione sono
pubblicati su un'istanza di Hudson come server di
Continuos Integration: http://build.theyard.net/


                              JUG Milano Meeting #35   20
Red5 Eclipse Plugin
Red5 offre un plugin per Eclipse per facilitare lo sviluppo e
deployment: http://www.red5.org/wiki/Red5Plugin

PRO:
 ● integra Red5 standalone come Runtime in WTP
 ● Offre template di applicazione sia client che server come
   “facet” di WTP che usano la libreria Jedai
   http://code.google.com/p/jedai/
CONTRO:
 ● dopo il primo deploy di un WAR non ne effettua l'update
 ● i template di applicazione usano versioni obsolete di Jedai
 ● Jedai è poco documentato e non molto attivo
 ● Jedai dipende da versioni non recenti di Prana Framework
   (ora Spring ActionScript)
 ● i componenti Flex offerti da Jedai sono limitati

                                      JUG Milano Meeting #35     21
jakubiak-red5
http://code.google.com/p/jakubiak-red5/
● “mavenized” Red5 realizzato da Antoni

   Jakubiak tramite svn:externals
● scompone Red5 in moduli più gestibili

● include le demo standard in versione progetto

   Maven, più diversi progetti di esempio,
   eseguibili sia su server Red5 standalone che
   come WAR anche con i plugin di Maven per
   Tomcat e Jetty
● Maven Repository con rilasci allineati a quelli

   ufficiali, inclusi sorgenti e javadoc:
   http://jakubiak-red5.googlecode.com/svn/repo/
                           JUG Milano Meeting #35   22
Red5 al posto di FMS?
SI!
●     sviluppo in Java con Spring invece che in script ActionScript
      NON a oggetti
           – maggiori possibilità di integrazione

          –   testing
          –   posso fare scripting anche in Groovy, Jython e JRuby
●     clustering con Terracotta
●     balancing con configurazione edge-origin ed MRTMP

Ma neanche per sogno!
● non è la soluzione ufficiale supportata da Adobe!

● non offre encryption tramite RTMPE che è un protocollo

  proprietario!

                                      JUG Milano Meeting #35          23
Oltre Red5: Xuggle


●   Red5 NON contiene codec
    → non posso effettuare transcoding!
●   Xuggle è un progetto che integra ffmpeg in
    Java e Red5 tramite JNI
    → ffmpeg fa da decoder/encoder FLV ecc.
●   Red5 e ffmpeg sono opensource con licenza
    LGPL (alcuni moduli di ffmpeg sono però
    GPL), Xuggle ha licenza AGPL, inoltre ci
    sarebbero le licenze d'uso dei codec...


                          JUG Milano Meeting #35   24
Oltre Red5: Blue5
●   Red5 NON supporta
        –   RTMPE/RTMPTE
             → encryption
        –   RTMPF
             → p2p
●   Blue5 è il progetto per l'implementazione di
    protocolli alternativi su Red5
    http://code.google.com/p/blue5/
        –   in attesa che vengano pubblicati da Adobe
        –   per esplorare strade alternative a quelle ufficiali


                                   JUG Milano Meeting #35         25
Riferimenti
●   Red5
    http://www.red5.org
●   “mavenized” Red5
    http://code.google.com/p/jakubiak-red5/
●   FlexMojos – plugin Maven per Flex
    http://flexmojos.sonatype.org/
●   Flex-Developers.org - ottimi tutorial in italiano su
    Flex, Red5, ecc.
    http://www.flex-developers.org
●   Xuggle
    http://www.xuggle.com/



                                  JUG Milano Meeting #35   26
Q&A




  JUG Milano Meeting #35   27

More Related Content

What's hot

I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014
I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014
I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014Giorgio Cefaro
 
Introduzione a Git (ITA - 2017)
Introduzione a Git (ITA - 2017)Introduzione a Git (ITA - 2017)
Introduzione a Git (ITA - 2017)Valerio Radice
 
Git e GitHub - L'essenziale
Git e GitHub - L'essenziale Git e GitHub - L'essenziale
Git e GitHub - L'essenziale Gemma Catolino
 
Php On Windows For Ph Pday 2008
Php On Windows For Ph Pday 2008Php On Windows For Ph Pday 2008
Php On Windows For Ph Pday 2008pietrobr
 
SMAU 2010 - Scenari futuri del Video-on-the-Web: selezione o coabitazione dei...
SMAU 2010 - Scenari futuri del Video-on-the-Web: selezione o coabitazione dei...SMAU 2010 - Scenari futuri del Video-on-the-Web: selezione o coabitazione dei...
SMAU 2010 - Scenari futuri del Video-on-the-Web: selezione o coabitazione dei...Roberto Ellero
 
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...Natale Vinto
 
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1dotnetcode
 
Evoluzione degli strumenti di sviluppo Microsoft
Evoluzione degli strumenti di sviluppo MicrosoftEvoluzione degli strumenti di sviluppo Microsoft
Evoluzione degli strumenti di sviluppo MicrosoftMassimo Bonanni
 
CI/CD - Presentazione Introduttiva
CI/CD - Presentazione IntroduttivaCI/CD - Presentazione Introduttiva
CI/CD - Presentazione IntroduttivaMatteo Di Carlo
 
Lua e MOAI SDK: sviluppiamo videogames!
Lua e MOAI SDK: sviluppiamo videogames!Lua e MOAI SDK: sviluppiamo videogames!
Lua e MOAI SDK: sviluppiamo videogames!Open Makers Italy
 
Introduzione a GIT - Laboratorio di Web Design 2014/15
Introduzione a GIT - Laboratorio di Web Design 2014/15Introduzione a GIT - Laboratorio di Web Design 2014/15
Introduzione a GIT - Laboratorio di Web Design 2014/15Giovanni Buffa
 
Mobile Development: una introduzione per Web Developers
Mobile Development: una introduzione per Web DevelopersMobile Development: una introduzione per Web Developers
Mobile Development: una introduzione per Web Developerssparkfabrik
 
Costruisci la tua piattaforma open-source di video-sharing in Python
Costruisci la tua piattaforma open-source di video-sharing in Python Costruisci la tua piattaforma open-source di video-sharing in Python
Costruisci la tua piattaforma open-source di video-sharing in Python simahawk
 

What's hot (20)

Spring e Flex
Spring e FlexSpring e Flex
Spring e Flex
 
Introduzione a Git
Introduzione a GitIntroduzione a Git
Introduzione a Git
 
I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014
I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014
I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014
 
Introduzione a Git (ITA - 2017)
Introduzione a Git (ITA - 2017)Introduzione a Git (ITA - 2017)
Introduzione a Git (ITA - 2017)
 
Git e Git Flow
Git e Git Flow Git e Git Flow
Git e Git Flow
 
Git e GitHub - L'essenziale
Git e GitHub - L'essenziale Git e GitHub - L'essenziale
Git e GitHub - L'essenziale
 
Php On Windows For Ph Pday 2008
Php On Windows For Ph Pday 2008Php On Windows For Ph Pday 2008
Php On Windows For Ph Pday 2008
 
SMAU 2010 - Scenari futuri del Video-on-the-Web: selezione o coabitazione dei...
SMAU 2010 - Scenari futuri del Video-on-the-Web: selezione o coabitazione dei...SMAU 2010 - Scenari futuri del Video-on-the-Web: selezione o coabitazione dei...
SMAU 2010 - Scenari futuri del Video-on-the-Web: selezione o coabitazione dei...
 
Lucio Zambon: PHP@Elettra
Lucio Zambon: PHP@ElettraLucio Zambon: PHP@Elettra
Lucio Zambon: PHP@Elettra
 
Il Pattern di Zend Framework 2
Il Pattern di Zend Framework 2Il Pattern di Zend Framework 2
Il Pattern di Zend Framework 2
 
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
 
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
 
Evoluzione degli strumenti di sviluppo Microsoft
Evoluzione degli strumenti di sviluppo MicrosoftEvoluzione degli strumenti di sviluppo Microsoft
Evoluzione degli strumenti di sviluppo Microsoft
 
Git for dummies
Git for dummiesGit for dummies
Git for dummies
 
CI/CD - Presentazione Introduttiva
CI/CD - Presentazione IntroduttivaCI/CD - Presentazione Introduttiva
CI/CD - Presentazione Introduttiva
 
Lua e MOAI SDK: sviluppiamo videogames!
Lua e MOAI SDK: sviluppiamo videogames!Lua e MOAI SDK: sviluppiamo videogames!
Lua e MOAI SDK: sviluppiamo videogames!
 
Introduzione a GIT - Laboratorio di Web Design 2014/15
Introduzione a GIT - Laboratorio di Web Design 2014/15Introduzione a GIT - Laboratorio di Web Design 2014/15
Introduzione a GIT - Laboratorio di Web Design 2014/15
 
Mobile Development: una introduzione per Web Developers
Mobile Development: una introduzione per Web DevelopersMobile Development: una introduzione per Web Developers
Mobile Development: una introduzione per Web Developers
 
Progetto Linux va a scuola
Progetto Linux va a scuolaProgetto Linux va a scuola
Progetto Linux va a scuola
 
Costruisci la tua piattaforma open-source di video-sharing in Python
Costruisci la tua piattaforma open-source di video-sharing in Python Costruisci la tua piattaforma open-source di video-sharing in Python
Costruisci la tua piattaforma open-source di video-sharing in Python
 

Similar to Streaming in Java e Flex con Red5

Pietro Brambati: PHP e la piattaforma Microsoft
Pietro Brambati: PHP e la piattaforma MicrosoftPietro Brambati: PHP e la piattaforma Microsoft
Pietro Brambati: PHP e la piattaforma MicrosoftFrancesco Fullone
 
Framework software e Zend Framework
Framework software e Zend FrameworkFramework software e Zend Framework
Framework software e Zend FrameworkEnrico Zimuel
 
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2Bkino2k
 
Un backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringUn backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringMarcello Teodori
 
ASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerLuca Congiu
 
Integrare Zend Framework in Wordpress
Integrare Zend Framework in WordpressIntegrare Zend Framework in Wordpress
Integrare Zend Framework in WordpressEnrico Zimuel
 
Slide Mulesoft Meetup Milano #10.pdf
Slide Mulesoft Meetup Milano #10.pdfSlide Mulesoft Meetup Milano #10.pdf
Slide Mulesoft Meetup Milano #10.pdfFlorence Consulting
 
Webkit presentazione ufficiale
Webkit presentazione ufficialeWebkit presentazione ufficiale
Webkit presentazione ufficialeintoinside
 
Roberta randazzo gnulinuxmeeting 2016
Roberta randazzo gnulinuxmeeting 2016Roberta randazzo gnulinuxmeeting 2016
Roberta randazzo gnulinuxmeeting 2016Roberta Randazzo
 
d4r^7 - docker alla settima
d4r^7 - docker alla settimad4r^7 - docker alla settima
d4r^7 - docker alla settimaGianni Bombelli
 
Linux Embedded per l'automazione
Linux Embedded per l'automazioneLinux Embedded per l'automazione
Linux Embedded per l'automazioneDaniele Costarella
 
Zend Server
Zend ServerZend Server
Zend ServerGrUSP
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDaniele Mondello
 
Continuous Integration e High Quality Code
Continuous Integration e High Quality CodeContinuous Integration e High Quality Code
Continuous Integration e High Quality CodeDaniele Mondello
 
Continous Delivery & HQ Code
Continous Delivery & HQ CodeContinous Delivery & HQ Code
Continous Delivery & HQ CodeDaniele Mondello
 
Link. php [santi caltabiano]
  Link. php [santi caltabiano]  Link. php [santi caltabiano]
Link. php [santi caltabiano]santi caltabiano
 

Similar to Streaming in Java e Flex con Red5 (20)

App Engine + Python
App Engine + PythonApp Engine + Python
App Engine + Python
 
Pietro Brambati: PHP e la piattaforma Microsoft
Pietro Brambati: PHP e la piattaforma MicrosoftPietro Brambati: PHP e la piattaforma Microsoft
Pietro Brambati: PHP e la piattaforma Microsoft
 
Rich Internet Application
Rich Internet ApplicationRich Internet Application
Rich Internet Application
 
Framework software e Zend Framework
Framework software e Zend FrameworkFramework software e Zend Framework
Framework software e Zend Framework
 
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
 
Un backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringUn backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con Spring
 
ASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerASP.NET Core 2 e Docker
ASP.NET Core 2 e Docker
 
Integrare Zend Framework in Wordpress
Integrare Zend Framework in WordpressIntegrare Zend Framework in Wordpress
Integrare Zend Framework in Wordpress
 
Slide Mulesoft Meetup Milano #10.pdf
Slide Mulesoft Meetup Milano #10.pdfSlide Mulesoft Meetup Milano #10.pdf
Slide Mulesoft Meetup Milano #10.pdf
 
Webkit presentazione ufficiale
Webkit presentazione ufficialeWebkit presentazione ufficiale
Webkit presentazione ufficiale
 
Roberta randazzo gnulinuxmeeting 2016
Roberta randazzo gnulinuxmeeting 2016Roberta randazzo gnulinuxmeeting 2016
Roberta randazzo gnulinuxmeeting 2016
 
d4r^7 - docker alla settima
d4r^7 - docker alla settimad4r^7 - docker alla settima
d4r^7 - docker alla settima
 
Linux Embedded per l'automazione
Linux Embedded per l'automazioneLinux Embedded per l'automazione
Linux Embedded per l'automazione
 
Zend Server
Zend ServerZend Server
Zend Server
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele Mondello
 
Continuous Integration e High Quality Code
Continuous Integration e High Quality CodeContinuous Integration e High Quality Code
Continuous Integration e High Quality Code
 
Android
AndroidAndroid
Android
 
OpenDevSecOps 2019 - Open devsecops un caso di studio
OpenDevSecOps 2019 - Open devsecops un caso di studioOpenDevSecOps 2019 - Open devsecops un caso di studio
OpenDevSecOps 2019 - Open devsecops un caso di studio
 
Continous Delivery & HQ Code
Continous Delivery & HQ CodeContinous Delivery & HQ Code
Continous Delivery & HQ Code
 
Link. php [santi caltabiano]
  Link. php [santi caltabiano]  Link. php [santi caltabiano]
Link. php [santi caltabiano]
 

More from Marcello Teodori

Anatomy of an APS 2 appication
Anatomy of an APS 2 appicationAnatomy of an APS 2 appication
Anatomy of an APS 2 appicationMarcello Teodori
 
JavaScript Power Tools 2015
JavaScript Power Tools 2015JavaScript Power Tools 2015
JavaScript Power Tools 2015Marcello Teodori
 
Wicket from Designer to Developer
Wicket from Designer to DeveloperWicket from Designer to Developer
Wicket from Designer to DeveloperMarcello Teodori
 
m2eclipse: integrazione maven2 in eclipse IDE
m2eclipse: integrazione maven2 in eclipse IDEm2eclipse: integrazione maven2 in eclipse IDE
m2eclipse: integrazione maven2 in eclipse IDEMarcello Teodori
 
JBoss Seam, un framework per Java EE 5
JBoss Seam, un framework per Java EE 5JBoss Seam, un framework per Java EE 5
JBoss Seam, un framework per Java EE 5Marcello Teodori
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsMarcello Teodori
 
Sviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaSviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaMarcello Teodori
 

More from Marcello Teodori (11)

Anatomy of an APS 2 appication
Anatomy of an APS 2 appicationAnatomy of an APS 2 appication
Anatomy of an APS 2 appication
 
Refactoring to a SPA
Refactoring to a SPARefactoring to a SPA
Refactoring to a SPA
 
JavaScript Power Tools 2015
JavaScript Power Tools 2015JavaScript Power Tools 2015
JavaScript Power Tools 2015
 
Wicket from Designer to Developer
Wicket from Designer to DeveloperWicket from Designer to Developer
Wicket from Designer to Developer
 
Software Factory in a Box
Software Factory in a BoxSoftware Factory in a Box
Software Factory in a Box
 
Groovy & Grails
Groovy & GrailsGroovy & Grails
Groovy & Grails
 
m2eclipse: integrazione maven2 in eclipse IDE
m2eclipse: integrazione maven2 in eclipse IDEm2eclipse: integrazione maven2 in eclipse IDE
m2eclipse: integrazione maven2 in eclipse IDE
 
JBoss Seam, un framework per Java EE 5
JBoss Seam, un framework per Java EE 5JBoss Seam, un framework per Java EE 5
JBoss Seam, un framework per Java EE 5
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa Struts
 
Java sul tuo Mac
Java sul tuo MacJava sul tuo Mac
Java sul tuo Mac
 
Sviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaSviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con Java
 

Recently uploaded

Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIinfogdgmi
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 

Recently uploaded (9)

Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AI
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 

Streaming in Java e Flex con Red5

  • 1. Streaming in Java e Flex con Red5 Marcello Teodori marcello.teodori@jugmilano.it m.teodori@excogitanet.com Java User Group Milano http://www.jugmilano.it JUG Milano Meeting #35 24/09/2009
  • 2. Di cosa parleremo? ● RIA e Applicazioni Video: MyTube ● Supporto media in Flex/Flash ● Il protocollo RTMP ● Red5 ● Xuggle JUG Milano Meeting #35 2
  • 3. Definizione di Rich Internet Application "web applications have extended the reach of enterprises to customers, offering anywhere and anytime access. However, this has been at the expense of the overall user-experience, which is diminished by delivery through the web browser" Steven Webster e Alistair McLeod, autori del libro Flex Integration with J2EE, 2005 http://www.theserverside.com/articles/article.tss?l=Flex → un nuovo tipo di web application che ne superi i limiti? Caratteristiche: ● web deployment ● logica applicativa suddivisa fra client e server ● interazione immediata senza percezione di un roundtrip sul server ● accesso a contenuti rich: audio/video JUG Milano Meeting #35 3
  • 4. Architettura di Riferimento My JUG Milano Meeting #35 4
  • 5. La Flash Platform di Adobe JUG Milano Meeting #35 5
  • 6. Supporto Media su Flash ● FLV è il formato “container” per il video in Flash ● Il video contenuto in un FLV può essere codificato in uno dei seguenti formati a seconda della versione del Flash Player: – Flash Player 6 e 7 supportano Sorenson – Flash Player 8+ supporta VP6 e MP3 → creo video solo con prodotti On2 e Flash Player – AIR e Flash Player 9.0.115.0+ supportano H.264 e AAC → creo video con prodotti con supporto allo standard ● Il codec audio che usa il Flash Player per registrare input da device audio locali, come un microfono, è Speex JUG Milano Meeting #35 6
  • 7. Supporto Server per Media Qual è il modo più adatto per servire media? ● HTTP download – download progressivo – seek richiede metadata injection ● RTMP streaming – non è standard (vedi RTP/RTSP) – permette live – proprietario Adobe usato per lo streaming nei loro prodotti ● Flash Player/AIR come client ● Flash Media Server sul server JUG Milano Meeting #35 7
  • 8. I nostri strumenti JUG Milano Meeting #35 8
  • 9. Red5 ● cos'è? Server di streaming opensource in Java per client Flash alternativo a Flash Media Server. ● basato su: – Spring – Apache Mina – Tomcat ● versione 0.8 stabile, 0.9 RC1 con supporto H.264: http://gregoire.org/2008/10/06/red5-h264/ ● deployment come server standalone o come war in generico servlet container Java EE JUG Milano Meeting #35 9
  • 10. Cosa offre Red5? ● Implementazione in reverse engineering del protocollo RTMP, reso pubblico a giugno 2009 da Adobe, con supporto varianti RTMPS e RTMPT ● Streaming Audio/Video ● Recording Client Streams ● Remote Shared Objects ● Live Stream Publishing ● Remoting (AMF) per Flex API ● client-to-server method call ● server-to-client method client JUG Milano Meeting #35 10
  • 11. Esempi di applicazioni ● Chat ● Videoconferenza ● Lavagnetta Condivisa ● Player video ● Player Mp3 ● Web TV ● Video Notizie live in streaming ● Sistemi di Collaborazione Online ● Realtime multiplayer Game ● Aule Web ● Video Blog ● Etc JUG Milano Meeting #35 11
  • 12. Creare applicazioni Red5 ● WAR packaging – streams → cartella per file FLV – persistence → cartella per shared object – WEB-INF lib ● ● classes ● web.xml ● red5-web.xml → configurazione spring ● red5-web.properties → property placeholder ● per deployment non su server standalone bisogna aggiungere le configurazioni spring del server Red5 JUG Milano Meeting #35 12
  • 13. Come Red5 usa Spring ● 2 livelli di ApplicationContext – 1 parent application context condiviso caricato via ContextSingletonBeanFactoryLocator ● red5-common.xml → beans del server Red5 ● red5-core.xml → endpoint Mina TCP ● red5-default.xml → root context Red5 di default – N child application context → per applicazione WAR ● red5-web.xml ● bean contenuti in un'application: – context – 1 web scope più N eventuali subscope – handler → entry point dell'applicazione Red5, deve essere un bean del seguente tipo o sua sottoclasse: org.red5.server.adapter.ApplicationAdapter JUG Milano Meeting #35 13
  • 14. Anatomia di una URL RTMP per Red5 protocol://host:port/application/scope/../scope ● protocol → rtmp/rtmps/rtmpt ● host → server Red5 ● port → porta: 1935 per rtmp, 80 per rtmpt, 443 per rtmps ● application → contextPath del web scope ● scope → nome subscope in gerarchia JUG Milano Meeting #35 14
  • 15. Un'applicazione Red5 Java Server package it.jugmilano.examples.red5; import org.red5.server.adapter.ApplicationAdapter; public class Application extends ApplicationAdapter { public List<Movie> getHitParadeMovieAtPosition(int i) { VideoDetails vd = new VideoDetails(); vd.setId(i); vd.setName("Pulp Fiction"); return vd; } } ActionScript Client nc = new NetConnection(); nc.connect("rtmp://localhost/myapp", "myusername", "mypassword"); nc.onResult = function(obj:*) { trace("The result is " + obj); } nc.call("getHitParadeMovieAtPosition", nc, 1); ns = new NetStream(nc); video = new Video(); // publish ns.attachCamera(Camera.getCamera()); ns.publish("my-video", "live"); // play video.attachNetStream(ns); ns.play("your-video"); JUG Milano Meeting #35 15
  • 16. Mapping Java-Flex Java ActionScript package it.jug...odel; package { public class VideoDetails { [Bindable] private Integer id; [RemoteClass(alias="it...deoDetails")] private String name; public class VideoDetails { public var id:*; public Long getId() { public var name:String; return id; } } } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } JUG Milano Meeting #35 16
  • 17. Un esempio Riproduzione di un file video FLV in download progressivo su HTTP vs. streaming RTMP: 1. avvio Red5 standalone 2. upload in cartella streams sul server 3. connessione tramite oggetto NetConnection con URL HTTP 4. creazione oggetto NetStream da NetConnection 5. aggancio NetStream a componente VideoDisplay 6. play del file FLV sul NetStream 7. ripeti dal punto 3 a 6 sostituendo on URL RTMP 8. effettua seek del file JUG Milano Meeting #35 17
  • 18. red5.deployment.type ● standalone – tomcat embedded preconfigurato – distribuzioni per i vari OS – hot deployment WAR – problemi di visibilità classi ● war – si installa su qualsiasi servlet container JEE – local deployment in ROOT war ● posso usare “mavenized” red5 – remote deployment in WAR aggiuntivi ● usa RTMPTunnelServlet JUG Milano Meeting #35 18
  • 19. AMF Remoting ● posso usare le API RemoteObject di Flex al posto della NetConnection di Flash ● richiede la configurazione della AMFGatewayServlet in web.xml ● il codice sorgente di Red5 conterrebbe anche le classi di supporto al messaging per le API Producer e Consumer di Flex, ma... non sono mai citate in esempi e documentazione come funzionanti... JUG Milano Meeting #35 19
  • 20. Integration Testing in Java Red5 mette a disposizione delle Client API in Java per costruire test JUnit di integrazione, in alternativa all'uso delle Flash API in test FlexUnit: ● RTMPClient per RTMP/RTMPT/RTMPS ● RemotingClient per AMF/HTTP Queste classi sono utilizzate nella test suite ufficiale di prodotto, i cui risultati di esecuzione sono pubblicati su un'istanza di Hudson come server di Continuos Integration: http://build.theyard.net/ JUG Milano Meeting #35 20
  • 21. Red5 Eclipse Plugin Red5 offre un plugin per Eclipse per facilitare lo sviluppo e deployment: http://www.red5.org/wiki/Red5Plugin PRO: ● integra Red5 standalone come Runtime in WTP ● Offre template di applicazione sia client che server come “facet” di WTP che usano la libreria Jedai http://code.google.com/p/jedai/ CONTRO: ● dopo il primo deploy di un WAR non ne effettua l'update ● i template di applicazione usano versioni obsolete di Jedai ● Jedai è poco documentato e non molto attivo ● Jedai dipende da versioni non recenti di Prana Framework (ora Spring ActionScript) ● i componenti Flex offerti da Jedai sono limitati JUG Milano Meeting #35 21
  • 22. jakubiak-red5 http://code.google.com/p/jakubiak-red5/ ● “mavenized” Red5 realizzato da Antoni Jakubiak tramite svn:externals ● scompone Red5 in moduli più gestibili ● include le demo standard in versione progetto Maven, più diversi progetti di esempio, eseguibili sia su server Red5 standalone che come WAR anche con i plugin di Maven per Tomcat e Jetty ● Maven Repository con rilasci allineati a quelli ufficiali, inclusi sorgenti e javadoc: http://jakubiak-red5.googlecode.com/svn/repo/ JUG Milano Meeting #35 22
  • 23. Red5 al posto di FMS? SI! ● sviluppo in Java con Spring invece che in script ActionScript NON a oggetti – maggiori possibilità di integrazione – testing – posso fare scripting anche in Groovy, Jython e JRuby ● clustering con Terracotta ● balancing con configurazione edge-origin ed MRTMP Ma neanche per sogno! ● non è la soluzione ufficiale supportata da Adobe! ● non offre encryption tramite RTMPE che è un protocollo proprietario! JUG Milano Meeting #35 23
  • 24. Oltre Red5: Xuggle ● Red5 NON contiene codec → non posso effettuare transcoding! ● Xuggle è un progetto che integra ffmpeg in Java e Red5 tramite JNI → ffmpeg fa da decoder/encoder FLV ecc. ● Red5 e ffmpeg sono opensource con licenza LGPL (alcuni moduli di ffmpeg sono però GPL), Xuggle ha licenza AGPL, inoltre ci sarebbero le licenze d'uso dei codec... JUG Milano Meeting #35 24
  • 25. Oltre Red5: Blue5 ● Red5 NON supporta – RTMPE/RTMPTE → encryption – RTMPF → p2p ● Blue5 è il progetto per l'implementazione di protocolli alternativi su Red5 http://code.google.com/p/blue5/ – in attesa che vengano pubblicati da Adobe – per esplorare strade alternative a quelle ufficiali JUG Milano Meeting #35 25
  • 26. Riferimenti ● Red5 http://www.red5.org ● “mavenized” Red5 http://code.google.com/p/jakubiak-red5/ ● FlexMojos – plugin Maven per Flex http://flexmojos.sonatype.org/ ● Flex-Developers.org - ottimi tutorial in italiano su Flex, Red5, ecc. http://www.flex-developers.org ● Xuggle http://www.xuggle.com/ JUG Milano Meeting #35 26
  • 27. Q&A JUG Milano Meeting #35 27