Skip to content
Snippets Groups Projects
  1. May 29, 2021
  2. May 04, 2021
  3. Apr 29, 2021
    • Calvin Walton's avatar
      Recording: bbb-record --rebuild restarts processing at the sanity step · 9f5832a5
      Calvin Walton authored
      Previously, bbb-record --rebuild was restarting recording processing
      from scratch by creating the .../recording/<meeting_id>.done file. This
      causes the recording to be reprocessed starting at the archive step.
      However, re-running the archive step for an existing meeting is not
      really supported! Ever since the segmented recording code was added, it
      shouldn't /corrupt/ the recording files, but it's still not good.
      
      And as a side-effect, re-running the archive step will re-create the
      .norecord file for meetings without recording marks, meaning that you
      cannot use bbb-record --rebuild to force a recording without marks to be
      processed.
      
      Switch bbb-record to restart recording processing at the sanity stage to
      match the BBB 2.2 behaviour. Rather than have it insert tasks directly
      into resque via redis-cli, it goes through a ruby wrapper that performs
      input validation and uses the resque apis.
      9f5832a5
  4. Apr 28, 2021
    • Calvin Walton's avatar
      Recording: Halt processing after archive step for non-recorded meetings · 8098b6b3
      Calvin Walton authored
      In the case where a meeting had recording enabled (record=true on create
      call) but the presenter did not start recording during the meeting,
      recording processing needs to be stopped after the meeting data is
      archived, but before the recording formats are processed.
      
      In the current 2.3 code, processing is halted after the "sanity" step.
      However, the 2.2 code stopped processing after the "archive" step
      instead. The main difference is that the scripts in the "post_archive"
      directory (which are actually post_sanity scripts) did not get run on
      non-recorded meetings for 2.2. This behaviour should be preserved for
      compatibility.
      
      I have added a special exception to trigger halting processing for a
      recording job without causing the entire resque job to be marked as
      failed. It only causes the `schedule_next_step` method to be skipped, so
      following jobs won't get automatically run. This fixes #11877
      8098b6b3
  5. Apr 14, 2021
    • Calvin Walton's avatar
      Split the EDL recording marks generation out to a helper function · 9e7cecb0
      Calvin Walton authored
      This function is useful any place you want the matched recording marks
      with timestamps rebased so 0 is the start of the meeting, I've used it
      for chat analysis, for example.
      
      There is no functional change here, it only exposes the extra function
      for recording scripts or dropin/post scripts to use.
      9e7cecb0
  6. Mar 26, 2021
  7. Mar 25, 2021
  8. Mar 24, 2021
  9. Mar 23, 2021
    • Pedro Beschorner Marin's avatar
      Handle pad's events and Meteor's instances · 0c4cf013
      Pedro Beschorner Marin authored
      Since Meteor was split in multiple process and events started to be
      filtered by instances, all Etherpad's Redis events were being discarded.
      
      Etherpad has a Redis' publisher plugin that is unaware of BigBlueButton's
      existence. All the communication between them is kept simple with minimal
      of internal data exchange. The concept of distincts subscribers at Meteor's
      side broke part of this simplicity and, now, Etherpad has to know which
      instance must receive it's messages. To provide such information I decided
      to include Meteor's instance as part of the pad's id. Should look like:
      
       - [instanceId]padId for the shared notes
       - [instanceId]padId_cc_(locale) for the closed captions
      
      With those changes the pad id generation made at the recording scripts had to
      be re-done because there is no instance id available. Pad id is now recorded at
      akka-apps and queried while archiving the shared notes.
      0c4cf013
    • germanocaumo's avatar
  10. Mar 22, 2021
  11. Mar 18, 2021
    • Calvin Walton's avatar
      Recording: Don't use string interpolation generating commands for slide conversion · 7fab16b2
      Calvin Walton authored
      Just want to make sure that we don't get any bad filenames sneaking in
      and causing havoc.
      7fab16b2
    • Calvin Walton's avatar
      Improvements for audio desync issues · 0559152d
      Calvin Walton authored
      This incorporates only the audio desync related changes from #11626
      * Add the aresample filter with async option to fill in timestamp gaps
      * Use the libopus decoder for opus audio instead of ffmpeg's builtin
        decoder
      0559152d
    • Calvin Walton's avatar
      Rework the ffmpeg filter generation in the audio rendering. · 2a6b0b62
      Calvin Walton authored
      This gives the following advantages over the previous code:
      
      * The ffmpeg input filters are loaded from a filter "script" file instead
        of passed on the command line. This fixes some cases of recordings
        failing to process because the ffmpeg command line generated for the
        audio processing exceeded the max command line length limit. (Although
        that only really happens due to BBB bugs...)
      * Use absolute positions when trimming audio segments for cuts.
        Previously segments were trimmed to the length of the segment, and the
        results were concatenated. There's some possibility of accumulated
        errors in the segment lengths causing audio desync over time. The new
        code incrementally concatenates the segments, and cuts each segment
        end based on the absolute time since the start of the meeting, to
        avoid error accumulation.
      2a6b0b62
  12. Mar 11, 2021
  13. Mar 10, 2021
  14. Mar 08, 2021
  15. Mar 02, 2021
  16. Feb 09, 2021
  17. Dec 20, 2020
  18. Dec 10, 2020
  19. Dec 06, 2020
  20. Sep 25, 2020
    • Calvin Walton's avatar
      Perform captions generation in UTF-16 encoding · 1866eb71
      Calvin Walton authored
      The indexes returned in recording events from BBB refer to positions
      within a UTF-16 encoded string. Rather than attempt to untangle this in
      the server (which might have a performance cost), it's easier to switch
      the caption processing code to operate in UTF-16 encoding as well to
      make it work consistently.
      
      The PyICU library provides a UnicodeString type which is a UTF-16 string
      similar to Java and JavaScript, but which supports all the python
      indexing methods. It's fairly straightforwards to swap it in in place of
      the types used previously, and works natively as an input to the ICU
      line break iterator too.
      
      Fixes #10531
      1866eb71
  21. Sep 23, 2020
    • Calvin Walton's avatar
      Fix io deadlock in recording scripts process execution utilities · 12687535
      Calvin Walton authored
      The previous implementation of the BigBlueButton.execute method runs the
      process with separate stdout and stderr streams. It first reads all of
      the output from stdout, then reads all of the output from stderr.
      
      This can cause a deadlock if the process writes a lot of data to stderr.
      The IO buffer for stderr could fill, blocking progress. But since it
      hasn't closed stdout, the ruby script is still waiting on a read to
      stdout.
      
      Switch to an execution method (using IO.popen) that allows combining
      stdout and stderr into a single stream, eliminating the issue.
      12687535
  22. Sep 01, 2020
  23. Aug 13, 2020
    • hiroshisuga's avatar
      events_archiver.rb: Handle an empty meeting_metadata hash from redis · 3cbe9aba
      hiroshisuga authored
      On my server 2.3 alpha, the method metadata_for(meeting_id) gives back {}
      (empty Hash). Thus "return if meeting_metadata.nil?" does not occur.
      
      Does @redis.hgetall give {} instead of nil, even though there is a comment in
      node_modules/redis/lib/utils.js "hgetall converts its replies to an Object. If
      the reply is empty, null is returned"???
      3cbe9aba
    • hiroshisuga's avatar
      events_archiver.rb: Handle an empty meeting_metadata hash from redis · dc0fc459
      hiroshisuga authored
      On my server 2.3 alpha, the method metadata_for(meeting_id) gives back {}
      (empty Hash). Thus "return if meeting_metadata.nil?" does not occur.
      
      Does @redis.hgetall give {} instead of nil, even though there is a comment in
      node_modules/redis/lib/utils.js "hgetall converts its replies to an Object. If
      the reply is empty, null is returned"???
      dc0fc459
Loading