• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Streaming in Java e Flex con Red5
 

Streaming in Java e Flex con Red5

on

  • 7,200 views

Presentazione tenuta al JUG Milano Meeting #35 del 24/09/2009.

Presentazione tenuta al JUG Milano Meeting #35 del 24/09/2009.

Statistics

Views

Total Views
7,200
Views on SlideShare
7,090
Embed Views
110

Actions

Likes
0
Downloads
61
Comments
0

6 Embeds 110

http://www.jugmilano.it 53
http://www.slideshare.net 49
http://www.linkedin.com 3
http://blog.excogitanet.com 2
https://www.linkedin.com 2
http://webcache.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Streaming in Java e Flex con Red5 Streaming in Java e Flex con Red5 Presentation Transcript

    • 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