michaelyin / openmeetings

Automatically exported from code.google.com/p/openmeetings
0 stars 0 forks source link

Desktop Sharing Optimization using xuggler #720

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago

-> Step 1 : Implementing xuggler conversion - colelcting images from 
jrdesktop, converting them into flv

-> Step 2 : Rebroadcasting vid into red5 scope

-> Step 3 : (optional) Finding and implementing solution to stream 
directly from client 

Original issue reported on code.google.com by i...@oliver-becherer.name on 4 May 2009 at 7:42

GoogleCodeExporter commented 9 years ago
hola,

brief shoutout bout the standing of my optimization efforts : 

Regarding the fact of being able to deliver openMeetings over the webcloud, 
there 
should be multiple possibilities of screensharing, to cope with any firewall, 
bandwidth and network issues.

-> the current solutions (transferring jpegs via Servletcall and showing them 
into 
whiteboard) are useful in low-bandwidth areas, but offer low quality and 
performance.

-> there are two other options, i evaluated supported by sebastian and both 
resulted 
in nice results  :

a) optimized ServletCall Sharer

- taking ScreenCaptures within WebstartClient
- Splitting each Image into lowered rectangels
- Evaluating the changed rectangels on client side (comparing RGB int[])
- Zipping Changed Rectangels via Huffmann
- Sending only changes rectangels to RED5 (ServletCall)
- Rebuilding Image on serverside
- Threadbased converion of the images into SWF (java2swf) or FLV (xuggle)

-> The resulting vids are quit nice and have a average framerate of 5-10 
videopictures in my tests (intranet...)

-> whats left to do for this solution would be a rebroadcast of the generated 
movies
into red5scope and notification of the laszloclients.

b) JMF based RTP Streamer
- Taking Screenshots within Webstart Client (java.awt)
- Scaling Images to desired Videoresolution (-> e.g. 1024x768) to receive a 
normalized dimension
- opening RTP Stream to desired IPs (unicast/multicast)

-> the result is a VNC like ScreenGrabber with high resolution and really 
acceptable 
performance.

-> the JMF Framework would also offer the possibility to record parallel and 
export 
the Screensharing session into a Movie format.

-> high scalability on clientside (JpegQuality, Videoresolution, ...)

-> i tested this solution local and over network bridge with best results so 
far 
(using JMF studio as faked RTP Receiver)

-> whats left to do for this solution : 
- building small GUI for stopping/starting sharing, setting quality and 
resolution
- implementing the RTP2RTMP (Xuggle) Solution into openMeetings
- Notifying laszloclients to start the stream and receive the video live in 
whiteboard/new area....

i plan to make the new solution configurable within OM, so there exists a 
sharing 
solution for each eventuality (the RTP Streamer colud cause problems due to 
firewalls blocking UDP Ports...)

see ya

Smoeker

Original comment by i...@oliver-becherer.name on 29 May 2009 at 8:30

GoogleCodeExporter commented 9 years ago
that sounds really fantastic!
I also prefer that we try to make both possibilities available so that we have 
an
option for different environments.

Original comment by seba.wag...@gmail.com on 29 May 2009 at 8:36

GoogleCodeExporter commented 9 years ago
hola,

i just commited the basic code for the new streamer, containing a full 
functional 
Sharer part (without GUI at the moment) and a test - applet showing the 
result...

at the moment, theres no interaction with openmeetings, so u can test this 
solution "standalone" : 

1.) Alter Streamer.java -> destinationaddress (also multicast, e.g. 
192.168.178.255)
2.) Start Executable Main.java (commandline, e.g.)
3.) Deploy rtpapplet and alter the IP address
4.) watch result

at the moment, u achieve besst quality with a screenresolution of 1024 x 768, 
higher 
resolutions are scaled down to 1024 x 768.

-> the Framerate for the resulting MJPEG Stream is set to 20 at the moment
-> highest JPEG Quality at the moment (1f)

short roadmap : 

Client : 

- SwingGui for Start/Stop/JPEG Quality/Framerate/Screen Dimensions
- Velocity template for jnlp download

Server : 

- on "Start ScreenSharing" within conference, a Thread gets started, receiving 
the 
RTP Stream from Moderator and re-broadcasting it to known conference 
participants

- Client notification for participants (-> opening browserwindow with RTP 
Receiver 
Applet) using velocity template for connection data

...unfortunately, theres no possibility at the moment to convert the incoming 
RTP 
Stream into RTMP ( we tried to use xuggle, but the underlying ffmpeg is not 
able to 
handle JPEG/RTP Streams at the moment, i opened a ffmpeg issue, so maybe we can 
use 
this in future), dependent on that fact, we cannot show the shared screen 
within 
whiteboard directly....

see ya

Smoeker

Original comment by i...@oliver-becherer.name on 15 Jun 2009 at 8:47

GoogleCodeExporter commented 9 years ago
ok! I will try to add my bits to the code.

You also need some kind of event-notifications from the Server to the Applet to 
start
/ stop the stream.

I slightly modified the location of some files and add the jmf.jar into lib/jmf 
and
to the classpath sothat you can build the project in Eclipse without an error 
beeing
throwd.

Original comment by seba.wag...@gmail.com on 15 Jun 2009 at 9:31

GoogleCodeExporter commented 9 years ago
hola,

the jmf.jar is also requiered for the applet - maybe the archive tag has to be 
changed within test.html to download the jar when calling the applet...

btw : to test the sharer, it is also possible to use JMstudio (-> openRTP 
Session)

see ya

Smoeker

Original comment by i...@oliver-becherer.name on 15 Jun 2009 at 10:29

GoogleCodeExporter commented 9 years ago

Original comment by seba.wag...@gmail.com on 30 Jun 2009 at 7:36

GoogleCodeExporter commented 9 years ago
What's the FFmpeg issue that you filed (the link to FFmpeg roundup if you know 
it)?

- Art

Original comment by art.cla...@gmail.com on 26 Aug 2009 at 10:49

GoogleCodeExporter commented 9 years ago

Original comment by seba.wag...@gmail.com on 31 Jan 2012 at 12:22

GoogleCodeExporter commented 9 years ago
OpenMeetings moves to Apache Foundation, update your bookmarks to the new 
project page:

http://incubator.apache.org/openmeetings/

New Issue tracker is located: https://issues.apache.org/jira/browse/OPENMEETINGS

New Mailing Lists located at: 
http://incubator.apache.org/openmeetings/mail-lists.html 

Original comment by seba.wag...@gmail.com on 31 Jan 2012 at 12:25