Here are my measurements: Screen is captured in ~ 160-170ms Encoded in ~120-200ms Will try to speed up this somehow
On Thu, Oct 24, 2013 at 3:27 PM, Alexander Brovman < alexander.brov...@gmail.com> wrote: > nevermind used the wrong ANT build. > > Got it to work now :) > > > On Thu, Oct 24, 2013 at 9:11 AM, Alexander Brovman < > alexander.brov...@gmail.com> wrote: > >> Maxim i made some changes to the code, i downloaded the source on the >> server, changed the lines with nano. and then from the mainfolder simply >> ran the ant command and it started compiling (albeit some errors appeared >> since i only entered "ant" without any options/parameters. >> >> Openmeeting is working fine, i simply replaced the entire screenshareing/ >> folder with the new one i just compiled... any suggestions on what im doing >> wrong here? >> >> I am getting this error: >> Unsigned Entry in resouce: slf4j-api-1.6.4.jar >> >> >> On Thu, Oct 24, 2013 at 8:17 AM, Maxim Solodovnik >> <solomax...@gmail.com>wrote: >> >>> 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 >>> >> >> > -- WBR Maxim aka solomax