I'm currently trying to modify the code to get 20+ fps (was requested many
times, but I had no time on this :( currently I'm on vacation, will try to
implement it)


On Thu, Oct 24, 2013 at 10:02 AM, Alexander Brovman <
alexander.brov...@gmail.com> wrote:

> Maxim,
>
> Thank you for responding so quickly. The primary reason i asked is because
> we sometimes need to output data like Financial Stock charts or similar
> dynamic content and in a resolution size of 1650x1080. As you can imagine
> right now the delay is.. manageable, perhaps somewhere along the lines of
> 0.5-1 second delay id say.
> We had an independant tested saying its an average of 130ms. But for fast
> video/changes the framerate will sometimes drop or become laggy.
>
> Ill try setting the timebetweenFrames to 30ms which in "ideal" conditions
> should give me 33.333 frames per second of video.
> As for the Thread.Sleep(XXX) not working or functioning i will remove the
> thread.sleep(60) from the top,
> As for the Thread.Sleep(xxx) settings i will simply remove it; BUT i will
> leave in the "Thread.sleep(Math.max(0, timeBetweenFrames - spent));" since
> "worst" case scenario it will not be put to sleep at all since the output
> will be 0, and "best case" scenario the thread will be put to sleep for 30
> - 1 ms depending on how the calculation turns out.
>
> Perhaps it would be good to leave somekind of thread sleep in there that
> is a static factor, from a development standpoint i would rather prefer
> having a fixed constant in there. rather than putting the thread to sleep
> (potentially twice). Either that or im not understanding the reason for the
> first thread.sleep (or the second one).
> Either way i will make the changes now and compile, I will report my
> findings here if you want me to :)
>
> @Sebastian,
>
> At the time of writing this i saw you respond, so i am writing this short
> addendum:
> 1) Could you please comment on whether or not Thread.Sleep(xxx) works?
> 2) 2-4 frames per second and less may be great for static presentations
> but not so much for dynamic. I understand the concerns raised on your
> behalf regarding bandwidth usage but since we have a dedicated Gigabit
> connection we have no issues with dedicating anywhere between 2-5 Mbit per
> user. 20 Frames per second really is the minimum we are looking at, i think
> it would be great if you presented people with an option/alternative to
> gotowebinar. I understand that applications which compile into native code
> will always be faster and outperform in certain aspects, but when you have
> the motivation and perhaps the financial resources to dedicate time and
> money into getting away from solutions such as GoToWebinar.
>
> Is there a way of "fixing" the position of the screen that the viewers
> will see when they accept a desktop streaming broadcast from a presenter? I
> ask this because i havent found a way to change the location of the Chat
> Bar inside a conference room yet (neither have I found a way to change the
> colors/themes to be honest, need to do some more google searches).
>
> Kind regards,
> Alexander
>
>
>
> On Thu, Oct 24, 2013 at 4:47 AM, seba.wag...@gmail.com <
> seba.wag...@gmail.com> wrote:
>
>> Do we still have the super high quality setting in the sharing client?
>> My problems in the past was more around the bandwidth issues then the FPS.
>> If you do 2-4 FPS the bandwidth usage will go that up... there is
>> probably a trick, maybe there is also something todo in the way the tiles
>> are calculated that need to be resend. It normally should only try to
>> resend the ones that really change. So if you show an hd movie you might
>> see your bandwidth needs go up quite a bit.
>>
>> Seb
>>
>>
>> 2013/10/24 Maxim Solodovnik <solomax...@gmail.com>
>>
>>> Hello Alexander,
>>>
>>> Your findings are correct :)
>>> With the only exception: Screenshots are taken in single thread, so
>>> there are some limitations in the speed :(
>>> I believe Thread.sleep(xxx) doesn't work at all
>>> I'm planning to rewrite this part And hopefully will be able to increase
>>> FPS.
>>>
>>> Basic compilation steps are here:
>>> http://openmeetings.apache.org/BuildInstructions.html
>>> After compiling all jars in screensharing folders are being signed, so
>>> you need to replace all of them, otherwise you will get security error due
>>> to different certificates
>>>
>>>
>>>
>>> On Thu, Oct 24, 2013 at 3:07 AM, Alexander Brovman <
>>> alexander.brov...@gmail.com> wrote:
>>>
>>>> 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! :)
>>>>
>>>
>>>
>>>
>>> --
>>> WBR
>>> Maxim aka solomax
>>>
>>
>>
>>
>> --
>> Sebastian Wagner
>> https://twitter.com/#!/dead_lock
>> http://www.webbase-design.de
>> http://www.wagner-sebastian.com
>> seba.wag...@gmail.com
>>
>
>


-- 
WBR
Maxim aka solomax

Reply via email to