alangecker / bigbluebutton-docker

merged into https://github.com/bigbluebutton/docker
GNU Lesser General Public License v3.0
99 stars 33 forks source link

Recording for Moodle-BBB-Rooms #70

Open staukini opened 3 years ago

staukini commented 3 years ago

Hello! When I create a room using greenlight, I am able to record that session.

But when I create a room using moodle (and the plugin to connect bbb with moodle), I am not able to record that session - there is no recording afterwards, even if I try to search on the cli.

Is this a known issue, or is there a way to resolve this?

Best regards

NerdyProjects commented 3 years ago

Can you check the log files? I quickly checked the recording implementation here & what moodle does. I am no expert in this area but I don't see an obvious thing.

You are sure, that you enabled the recording feature in moodle and have it either auto record or started the recording in the conference?

You can run docker logs to see log files of all docker containers. Use docker logs -f to keep them attached (it will still display the whole log since container start before), then create & join a meeting using moodle and watch if anything seems broken.

staukini commented 3 years ago

Hello! It took me quite a while to find a timeslot to test this - sorry for the late response.

I figured out, that after ending the meeting in moodle, the recording container has some errors.

Here is the error message:

execute workers...
rap-worker | I, [2020-11-20T08:44:32.823322 #74]  INFO -- : Executing: ruby archive/archive.rb -m df3ee83b5b42da50643b7171fe37c3c1aff7837d-1605861778505
rap-worker | I, [2020-11-20T08:44:33.201768 #74]  INFO -- : /usr/local/bigbluebutton/core/lib/recordandplayback/events_archiver.rb:232:in `tr': invalid byte sequence in US-ASCII (ArgumentError)
rap-worker | I, [2020-11-20T08:44:33.201884 #74]  INFO -- :     from /usr/local/bigbluebutton/core/lib/recordandplayback/events_archiver.rb:232:in `strip_control_chars'
rap-worker | I, [2020-11-20T08:44:33.201930 #74]  INFO -- :     from /usr/local/bigbluebutton/core/lib/recordandplayback/events_archiver.rb:324:in `block (2 levels) in store_events'
rap-worker | I, [2020-11-20T08:44:33.201971 #74]  INFO -- :     from /usr/local/bigbluebutton/core/lib/recordandplayback/events_archiver.rb:317:in `each'
rap-worker | I, [2020-11-20T08:44:33.202089 #74]  INFO -- :     from /usr/local/bigbluebutton/core/lib/recordandplayback/events_archiver.rb:317:in `block in store_events'
rap-worker | I, [2020-11-20T08:44:33.202165 #74]  INFO -- :     from /usr/local/bigbluebutton/core/lib/recordandplayback/events_archiver.rb:311:in `each'
rap-worker | I, [2020-11-20T08:44:33.202201 #74]  INFO -- :     from /usr/local/bigbluebutton/core/lib/recordandplayback/events_archiver.rb:311:in `each_with_index'
rap-worker | I, [2020-11-20T08:44:33.202244 #74]  INFO -- :     from /usr/local/bigbluebutton/core/lib/recordandplayback/events_archiver.rb:311:in `store_events'
rap-worker | I, [2020-11-20T08:44:33.202280 #74]  INFO -- :     from archive/archive.rb:38:in `archive_events'
rap-worker | I, [2020-11-20T08:44:33.202317 #74]  INFO -- :     from archive/archive.rb:197:in `<main>'
rap-worker | I, [2020-11-20T08:44:33.204356 #74]  INFO -- : Success?: false
rap-worker | I, [2020-11-20T08:44:33.204417 #74]  INFO -- : Process exited? true
rap-worker | I, [2020-11-20T08:44:33.204449 #74]  INFO -- : Exit status: 1
rap-worker | E, [2020-11-20T08:44:33.204873 #74] ERROR -- : Failed to archive df3ee83b5b42da50643b7171fe37c3c1aff7837d-1605861778505

That looks strange - is there an argument missing, or is the encoding not right?

NerdyProjects commented 3 years ago

Thanks for looking into it! @alangecker I didn't look into it, but are you aware of any locale fuckups, e.g. should it be UTF8-something but defaults to C?

NerdyProjects commented 3 years ago

https://groups.google.com/g/bigbluebutton-dev/c/jYR0kNMZkts https://github.com/bigbluebutton/bigbluebutton/issues/9491

wolbernd commented 3 years ago

Sorry to bump this old issue. This error occured on our servers since the last update to 2.2.36. However this only happens if there is a non-ascii Character in the metadata (e.g. meetingName = Täst).

I did some debugging in the events_archiver.rb and found out the following:

Ruby gets the Metadatastrings from redis in Line 261 of events_archiver.rb. For debugging purposes I put the following in Line 281 so that the block loocked like this:

meeting_metadata.each do |k, v|
        BigBlueButton.logger.error("Key: #{k} Value: #{v} Encoding: #{v.encoding}")
        metadata[strip_control_chars(k)] = strip_control_chars(v)
end

This led to the following output:

I, [2021-04-09T14:47:24.971335 #3525]  INFO -- : Archiving events for 907c6100bf4c65a8f381b73781f6bb52f17a06a0-1617972405342
E, [2021-04-09T14:47:24.972191 #3525] ERROR -- : Key: bbb-origin Value: Greenlight Encoding: US-ASCII
E, [2021-04-09T14:47:24.972230 #3525] ERROR -- : Key: bbb-origin-server-name Value: xxx Encoding: US-ASCII
E, [2021-04-09T14:47:24.972247 #3525] ERROR -- : Key: bbb-origin-version Value: release-2.8.2.2 Encoding: US-ASCII
E, [2021-04-09T14:47:24.972261 #3525] ERROR -- : Key: gl-listed Value: false Encoding: US-ASCII
E, [2021-04-09T14:47:24.972275 #3525] ERROR -- : Key: isBreakout Value: false Encoding: US-ASCII
E, [2021-04-09T14:47:24.972287 #3525] ERROR -- : Key: meetingId Value: yyy Encoding: US-ASCII
E, [2021-04-09T14:47:24.972306 #3525] ERROR -- : Key: meetingName Value: Täst Encoding: US-ASCII

That last line is odd because US-ASCII does not have a representation for ä. Something is going wrong with the encoding here but I was not able to find the source of the problem. A bit of further testing revealed that the supposedly US-ASCII strings are actually UTF-8 Strings. Only ruby thinks they are not.

As a workaround I changed the method strip_control_chars() from

    def strip_control_chars(str)
      str.tr("\x00-\x08\x0B\x0C\x0E-\x1F\x7F", '')
    end

to

    def strip_control_chars(str)
      tstr = str.dup
      tstr.force_encoding("UTF-8")
      tstr.tr("\x00-\x08\x0B\x0C\x0E-\x1F\x7F", '')
      str = tstr
    end

I tested it and it works for meetings with or without special characters. However I don't know much about ruby to confidently say that this is a good fix.