In 0.9.0, the slide clear events changed from using 1-based page numbers to
using 0-based page numbers.
Add 1 to the page number for recordings generated on a 0.9.0+ server to
fix the issue; at this point it's too late in the release to change the value,
and there's too big of a body of existing recordings out there.
Now the 0.81 presentation playback files are in an appropriate versioned
directory. If desired, the recording metadata can be updated to reference
the versioned files directly, but an nginx redirect has been added so
that unmodified recordings will also work.
This makes it a bit more obvious how the versioning can work going
forwards, and makes it so that we do not need to update the nginx
config each time we have a new version of the playback files.
The 0.81 files remain at the top level of the presentation directory
for compatibility reasons.
This fixes an issue where recordings copied from a 0.81 server might
not play back correctly on a 0.9 server.
This changes the 0.9 recording scripts to use playback support files
from a different subdirectory, 'presentation2', while existing 0.81
recordings continue to use the 'presentation' directory.
If the raw files from an old recording are reprocessed, it will
switch to using the newer playback support files.
This was added because BigBlueButton 0.9 started using 1-based page
numbers in the events.xml file. That change has been reverted, so as
to avoid behaviour changes from 0.81 in places where it's unnecessary.
With the switch to a different clock source in red5, the timestamps
in the events file are no longer real-time, but are rather in
seconds since computer boot.
The timestamp in the meeting id is still realtime, so use that as
the start time. Calculate the end time by adding the meeting length
to the start time.
We can only get here if all of the files for the presentation are
*completely* missing. One thing that can cause this is if the
presentation filename starts with a '.' character - the presentation
files aren't correctly archived then.
This shouldn't normally be hit... but if it ever is, the processing will
fail with an error, since the Logger class doesn't have a method named
'warning'.
We now use ghostscript to output pngs directly from the original pdf,
rather than using convert on the split pages. This should make corrupt
or strange pdfs less likely to cause issues.
As well, if a pdf page conversion fails (for any reason, including that
the original pdf is missing...) it will be logged, and a blank page
generated, and processing will continue.
I've been working on this for a while, and it's adapted from code that
has been fairly well-tested on a wide variety of recordings. I've found
it to do a more accurate job of combining multiple webcam files, and it
should be more accurate in the audio as well.
Another key feature is that it does fewer re-encoding steps during video
processing, which should both speed it up and hopefully improve quality.
The settings on the VP8 encoder have been tuned somewhat as well.
also, the output video resolution is modified to the highest screen resolution shared during the conference, independently on the output video resolution set by the user; it was done to preserve the quality of the desktop sharing image; if there's no desktop sharing, the output video resolution is respected
Refactored the code that generates the video file used in the presentation playback. The problem with the sync of video sources was related to problems of precision inside FFmpeg (sometimes the script runs FFmpeg to trim video files, and the output video file trimmed sometimes was 3+ seconds bigger or smaller than the requested).
Also it's a little more modular, so it will be easier to expand functionality. The processing steps are more explicit now, and the logs are better now to understand the final output.
A new parameter on presentation.yml was added to enable the admin to add an offset for the audio stream - this is mainly useful when the session ran with h264, because the video takes longer for the client to encode, and then in the recording we can see the huge gap between audio and video.
This was broken by my earlier change to fallback the pdf filename for
really old recordings.
Rearrange the code so that the pdf logic is only used in the case when
the presentation is a pdf.