Hi,

I have two quick questions, but first of all i just wanted to say that
Openmeetings is fantastic. I had both OpenMeetings and BBB Installed and we
have decided to go with OM.

I am relatively apt at programming with Python and C# but I have never
worked with a lot of Javaapplications like these ones, so i have the
following questions:

*1)* From what i understand the ScreenSharing is performed by taking
snapshots every x milliseconds. Additionally there is an algorithm in place
that divides the snapshot into tiles and measures the changes in tiles, if
there is a change the tile is uploaded. If this is correct, and i want a
more.. "fluid" video because there will be a lot of changes, cant i simply
modify the "framerate" at which the images will be compared to improve the
output? I am well aware that this would eat into the CPU and the bandwidth
but i have a Full Duplex Gbit and 2x Quadcore Xeons available to me so this
is not an issue. We are trying to test for an extreme case of 500-1500
users and how to optimize the output, i think the developers and other
users will be interested in seeing the results.


*2)* Where would these changes need to be made? So far i have isolated the
CoreScreen.java , CaptureScreen.java and theScreenV1Encoder.java files that
apparently contain the code which processes the desktop sharing.

The CaptureScreen.Java has the:
"timeBetweenFrames = (ScreenDimensions.quality == ScreenQuality.VeryHigh) ?
100 : 500;" setting on line 54 which basically says that if Screequality is
set to very high (condition is true) then select 100 as the value for
timeBetweenFrames.

This variable is apparently used lateron in the "Thread.sleep(Math.max(0,
timeBetweenFrames - spent));" on line 96, which will pause the current loop
for the amountof time that is the difference between timeBetweenFrames( in
our case 100ms) minus the spent time (which is defined on line 91).

So in Theory if i wanted to output the screen in realtime at 20 or 24
frames per second which would mean that a snapshot would need to be taken
every 50 milliseconds or so, would i simply need to set a different frame
setting for the time between frames, something like:
"timeBetweenFrames = (ScreenDimensions.quality == ScreenQuality.VeryHigh) ?
*20* : 500;"

Reduce the Thread.sleep(60); on line 60 to something like 20 milliseconds
so (Thread.sleep(20);)
and then finally remove the the last part "Thread.sleep(Math.max(0,
timeBetweenFrames - spent));" or perhaps leaving it in?

I understand that this would be a .. "wrench and hammer" approach since
this will probably eat up quite a bit of CPU usage. I mean the simpler
solution here clearly would be to get rid of the algorithm itself and
simply rewrite it to simply output a screenshot every x milliseconds or so,
but i have no idea how deep i would be messing with openmeetings and if
that would/could break other parts of openmeeting that access these files?

So would this be a workable solution that i could at least try out? I would
ofcourse be more than happy to supply the CPU Usage differences.

*3)* My only question would be is how would i recompile these? I am asking
because i read somewhere in the mailinglists (or the old google groups)
that it is recommended to use ANT in order to recompile things. Also what
will be the output name of the .jar that is essentially being loaded for
people and located on the server?
Because all i can find on my Debian box is
the 
/usr/lib/red5/webapps/openmeetings/screensharing/openmeetings-screenshare-2.1.1-RELEASE.jar
file.

So yeah, if somebody could help me with recompiling i would appreciate it!
:)

Reply via email to