Git Product home page Git Product logo

bbb-recording-exporter's Introduction

BigBlueButton Exporter

Server-side version of the script that enables users to download BigBlueButton recordings as a single video file.

What's supported?

The script was developed for BigBlueButton versions ranging from 2.3 to 2.5.

✅ Annotations

✅ Captions

✅ Chapters

✅ Chat (with an option to anonymize names)

✅ Cursor

✅ Integration with Greenlight

✅ Polls

✅ Screen shares

✅ Slides

✅ Text

✅ Webcams

✅ Zooms

BigBlueButton recording exporter

Server-Side Usage

Install the prerequisites (the following packages and RubyGems need to be installed on a BBB v2.5.x server running Ubuntu 20.04):

sudo apt-get install libsystemd-dev ruby-dev
sudo gem install builder optimist loofah nokogiri redis journald-logger open4 absolute_time

Place the file presentation.rb in the /usr/local/bigbluebutton/core/scripts/post_publish directory with executable rights.

Do the same for the file lib/interval_tree.rb, moving it to /usr/local/bigbluebutton/core/lib/recordandplayback.

After a session is over and the presentation is processed, the script will begin to export the recording as a single video file. It can be accessed and downloaded at https://your.bbb.hostname/presentation/meeting-id/meeting.mp4 once rendering completes, or directly in the Greenlight interface.

The meeting's ID is the alphanumeric string following the 2.3 in the recording's URL.

Existing recordings can be re-rendered by running the exporting script on an individual basis:

./presentation.rb -m <meeting_id> -f presentation

Note that this will stop automatic exports unless executed with the bigbluebutton user! See the "Troubleshooting" section below.

Alternatively,

bbb-record --rebuild <meeting_id>

will rebuild the entire recording (including the playback in the browser).

To re-render all existing recordings, run

bbb-record --rebuildall

If you do not have access to a BBB server, check out the branch 'client-side'.

For caption support, recompile FFmpeg with the movtext encoder enabled and uncomment the add_captions method.

The chat component can be disabled by turning HIDE_CHAT on. If you want to keep the messages but anonymize the names, set HIDE_CHAT_NAMES to true.

Requirements

Root access to a BBB 2.3 server.

Rendering options

If your server supports animated strokes on the whiteboard, set the flag REMOVE_REDUNDANT_SHAPES to true in presentation.rb.

Less data can be written on the disk by turning SVGZ_COMPRESSION on.

To make rendering less resource-intensive, download FFMpeg's source code and replace the file ffmpeg/libavcodec/librsvgdec.c with the one in this directory. After compiling and installing FFMpeg, enable FFMPEG_REFERENCE_SUPPORT in presentation.rb . Steps by @felcaetano.

The video output quality can be controlled with CONSTANT_RATE_FACTOR.

Troubleshooting

Exports don't start after the meeting ends: /var/log/bigbluebutton/post_publish.log and /var/bigbluebutton/published/video/ must be chowned to bigbluebutton:bigbluebutton

License

This script was developed for my bachelor's thesis at the Technical University of Munich and is licensed under MIT. Please cite as

@mastersthesis{bbb-recording-exporter,
	author = {Daniel Petri Rocha},
	title = {Development of a Sophisticated Session Recording Exporter for the BigBlueButton Web Conferencing System},
	year = {2021},
	school = {Technische Universität München},
	month = {},
	adress = {80805 Munich},
	pages = {65},
	language = {en},
	abstract = {BigBlueButton is an open-source web conferencing system designed for remote teaching.
              A longstanding feature request by community members has been to give users the
              ability to download the recording of a meeting as a video file, including the presentation,
              webcams, and chat messages. This thesis implemented that enhancement as a script
              executed automatically by the server once a recorded conference ends, performing
              significantly faster than previous solutions capturing the screen of the web player in realtime.
              Additionally, annotated slides can be output as PDF. Processing the presentation into both
              formats can also be done client-side if the user has no access to the server.
              Development of the converter did not introduce new dependencies into BigBlueButton
              and resulted in contributions to a Ruby library providing a data structure for efficient
              queries on intervals and FFmpeg, a command-line multimedia framework. The code
              offers a foundation for other improvements on BigBlueButton’s roadmap, such as giving
              instructors the option to import work done on documents in breakout rooms into the
              main session.},
	keywords = {open-source, web conferencing},
	note = {},
	url = {https://mediatum.ub.tum.de/doc/1632305/1632305.pdf},
}

bbb-recording-exporter's People

Contributors

danielpetri1 avatar fcecagno avatar felcaetano avatar germanocaumo avatar kominoshja avatar thyroxine avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bbb-recording-exporter's Issues

The script does not start

Hey!
Thanks for your project, it helps a lot.
we are using BBB and moodle together, and the resulting video file is available in moodle, but the URL in the metadata.xml file contains an invalid link. the script makes the address like moodle, and we fixed it right in the script. changed # {hostname} to the address of the BBB server.
line 174 in export_presentation.rb
metadata.xpath ('recording / playback / link'). children.first.content = "https://bbb.server.ru/presentation/# {meeting_id }/meeting.mp4"

and we had a problem, after installing a clean BBB and added a script and everything worked, but now the script does not start after pudding the record. And the script is launched manually.
How to check the correctness of the automatic launch of the script? where to look? in the log /var/log/bigbluebutton/post_publish.log there are only entries when manually running.

What is download_client.rb and meeting_id.mp4 in meeting_id directories

Hello,

First of all I should say thanks for this work which is highly appreciated:)

My question is

  1. what is the role of file download_client.rb and is that necessary to place it somewhere?
    I mean I cloned this git repo in my server in a path like /root/, and only moved the files export_presentation.rb and lib/interval_tree.rb to mentioned directories with executive rights, and since the day I did it's making mp4 files in /var/bigbluebutton/published/presentation/meeting_id/meeting.mp4 with no issue.
    Is that all? Or I should do any other things?
  2. I also see many of these when I run this command:
find . -name '*.mp4' -exec ls -lh {} \;
-rw-r--r-- 1 bigbluebutton bigbluebutton 210M Aug 12 09:45 ./5b47d382b32ad48b12492577000a574c154e0465-1628745881813/meeting.mp4
-rw-r--r-- 1 bigbluebutton bigbluebutton 185M Aug 12 07:16 ./5b47d382b32ad48b12492577000a574c154e0465-1628745881813/5b47d382b32ad48b12492577000a574c154e0465-1628745881813.mp4
-rw-r--r-- 1 bigbluebutton bigbluebutton 194M Aug  8 13:00 ./4f3eb13ed936e91b407524f56b6c8b52640c690a-1628406180177/meeting.mp4
-rw-r--r-- 1 bigbluebutton bigbluebutton 175M Aug  8 10:58 ./4f3eb13ed936e91b407524f56b6c8b52640c690a-1628406180177/4f3eb13ed936e91b407524f56b6c8b52640c690a-1628406180177.mp4
-rw-r--r-- 1 bigbluebutton bigbluebutton 178M Aug  7 16:10 ./c865285389c7c51b6f12652d054faa21be005222-1628341197035/meeting.mp4
-rw-r--r-- 1 bigbluebutton bigbluebutton 155M Aug  7 14:40 ./c865285389c7c51b6f12652d054faa21be005222-1628341197035/c865285389c7c51b6f12652d054faa21be005222-1628341197035.mp4
-rw-r--r-- 1 bigbluebutton bigbluebutton 234M Aug  7 08:36 ./cf10e9a265eb2b487e47f61f4d5d83ab3bf44494-1628314280877/meeting.mp4
-rw-r--r-- 1 bigbluebutton bigbluebutton 207M Aug  7 06:51 ./cf10e9a265eb2b487e47f61f4d5d83ab3bf44494-1628314280877/cf10e9a265eb2b487e47f61f4d5d83ab3bf44494-1628314280877.mp4

I do not mean meeting.mp4 files, but I do mean /var/bigbluebutton/published/presentation/meeting_id/meeting_id.mp4. What are these files generated by bbb-recording-exported script?

Thanks in advance

Unicode RTL Language writing on whiteboard

Hello
First of all, thank you for this beautiful feature.
Everything works fine and is the exact thing as seen on the recording, except for one thing that I have encountered.
Writing Persian on the whiteboard doesn't appear correctly in the final video.

This is the expected result in the BBB presentation link:
image

This is the result in meeting.mp4:
image

Persian is utf8 and RTL. Maybe that's the reason.
Thanks in Advance

:85:in `require': cannot load such file -- nokogiri

Hello, i'm trying to run your script on windows 10, i have installed ruby with DEVKIT. But it still showing me this error. Can you tell me what to do? And where should i put the ffmpeg and librsvg files? Thank you for help.
<internal:C:/Ruby30-x64/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in require': cannot load such file -- nokogiri (LoadError)
from internal:C:/Ruby30-x64/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb:85:in require' from presentation-render.rb:1:in

'`

Bug: Text annotation box area is not respected

When you create a text annotation it has a box area limiting the visibility in the slide
The script is not respecting the height, all the text is shown even it goes beyond the box area:

Live/playback:
image

Exported:
image

Prettier Output

Hello
Again Thank you for this code and your quick replies and fixes.
After showing the result to the end-user, I received some suggestions just to make the output video look prettier to the end-user eyes:
1- Adding some margin from top-right-bottom-left. (especially for the chat part)
2- Adding some sort of separation lines to distinguish between whiteboard and chat
image

Question about the ffmpeg

I'd love a little bit more info on how to compile the FFMPEG to support references.
Which FFMPEG version should I use as base?
Is there a problem installing it while there is already a FFMPEG package installed? Could my version be overwritten if they update the ffmpeg package?
What configure options should I use before compiling?

Probably this one? As outputed in a 'ffmpeg -version' inside a BBB server
--prefix=/usr --extra-version='1ubuntu0.1bbb2~18.04' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-gnutls --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-libopus --enable-librsvg --enable-librubberband --enable-libspeex --enable-libvorbis --enable-libvpx --enable-libxml2 --enable-sdl2 --disable-decoders --enable-decoder='aac,ass,bmp,ffv1,ffvhuff,flac,flashsv,flashsv2,flv,gif,h264,huffyuv,libopus,librsvg,libspeex,mjpeg,mp3float,mpeg2video,opus,pcm_f32le,pcm_s16le,pcm_s16le_planar,png,rawvideo,srt,ssa,subrip,vorbis,vp6,vp6a,vp6f,vp8,vp9,webp,webvtt' --disable-encoders --enable-encoder='aac,ass,bmp,ffv1,ffvhuff,flac,flashsv,flashsv2,flv,gif,h264_vaapi,huffyuv,libmp3lame,libopus,libspeex,libvorbis,libvpx_vp8,libvpx_vp9,libx264,libx264rgb,mjpeg,mjpeg_vaapi,mpeg2_vaapi,mpeg2video,pcm_f32le,pcm_s16le,pcm_s16le_planar,png,rawvideo,srt,ssa,subrip,vp8_vaapi,vp9_vaapi,webvtt' --disable-hwaccels --enable-hwaccel='h264_vaapi,h264_vdpau,mjpeg_vaapi,mpeg2_vaapi,mpeg2_vdpau,vp8_vaapi,vp9_vaapi' --disable-parsers --enable-parser='aac,bmp,flac,gif,h264,mjpeg,mpegaudio,mpegvideo,opus,png,vorbis,vp8,vp9' --disable-demuxers --enable-demuxer='aac,alsa,ass,avi,bmp_pipe,caf,concat,dash,ffmetadata,flac,flv,gif,gif_pipe,h264,hls,image2,image2pipe,ivf,jpeg_pipe,kmsgrab,lavfi,matroska,mjpeg,mov,mp3,mpegts,mpegtsraw,nut,ogg,pcm_f32le,pcm_s16le,png_pipe,pulse,rawvideo,rtp,rtsp,srt,swf,w64,wav,webvtt,yuv4mpegpipe' --disable-muxers --enable-muxer='adts,ass,avi,caf,dash,ffmetadata,flac,flv,framecrc,framehash,framemd5,gif,h264,hash,hls,image2,image2pipe,ipod,ivf,matroska,matroska_audio,md5,mjpeg,mkvtimestamp_v2,mov,mp3,mp4,mpeg2video,mpegts,nut,oga,ogg,ogv,opus,pcm_f32le,pcm_s16le,rawvideo,rtp,rtp_mpegts,rtsp,segment,singlejpeg,srt,stream_segment,swf,tee,uncodedframecrc,w64,wav,webm,webm_chunk,webm_dash_manifest,webvtt,yuv4mpegpipe' --disable-protocols --enable-protocol='async,cache,concat,data,file,hls,http,httpproxy,https,icecast,md5,pipe,rtmp,rtmps,rtmpt,rtmpts,rtp,subfile,tcp,tee,tls,udp,unix' --disable-bsfs --enable-bsf='aac_adtstoasc,chomp,filter_units,h264_metadata,h264_mp4toannexb,h264_redundant_pps,mjpeg2jpeg,mpeg2_metadata,noise,null,vp9_metadata,vp9_raw_reorder,vp9_superframe,vp9_superframe_split' --disable-indevs --enable-indev='alsa,lavfi,v4l2,fbdev,xcbgrab,kmsgrab' --disable-outdevs --enable-outdev='alsa,sdl2,xv,fbdev,v4l2' --disable-libdc1394 --enable-libdrm --disable-libiec61883 --disable-chromaprint --disable-frei0r --enable-libx264 --enable-shared

I'm aware that BBB has a repository with a fork from the FFMPEG but I'm not sure if the package they provide are really coming from there (the versions do match, tho). Could be a good idea submit a pull request there with your changes.

Add cli utility?

Hi Daniel,
I'm planning to use BBB for a conference in which we plan to record the talks. I realized WAY too late that there is no default way to download the videos, so I would like to add a script that allows something like

bbb-downloader <base_url>

to download videos. Would that be a useful addition to this project?

Feature request: add quality options

Add parameters to the quality of the final video: resolution, FPS, bitrate and so on.
Disk space is really an issue for us, so would be interesting to tune these options to make the final file the smallest possible while maintaining some quality.

On a side note: congratulations for this amazing job. This has been a long request feature for us, your solution is simple, yet efficient and elegant.

ffmpeg syntax error

I'm getting:

ruby render_video.rb 
render_video.rb:5: syntax error, unexpected local variable or method, expecting `do' or '{' or '('
ffmpeg -f lavfi -i color=c=white:s=1920x1080...
render_video.rb:5: syntax error, unexpected local variable or method, expecting `do' or '{' or '('
ffmpeg -f lavfi -i color=c=white:s=1920x1080 \
render_video.rb:5: syntax error, unexpected integer literal, expecting end-of-input

Feature request: Notify when the process is done

I believe there are two main ways to achieve this.

1- Using the 'meta_bbb-recording-ready-url' just like described in
https://github.com/bigbluebutton/bigbluebutton/blob/fe403dfd05fe38ca50eb0ef319c22c2cc62f2c43/record-and-playback/core/scripts/post_publish/post_publish_recording_ready_callback.rb
So, to user needs to send the callback URL as a parameter the moment the meeting is created.
The message sent needs to be a little different from the default so we could distinguish which event we are getting. Otherwise the user would get a duplicated notification.
This looks like the best solution and a great part of it is already done.

2- Using bbb-webhooks. For this you'd would need to publish an event on Redis server and let the bbb-webhooks deal with it. I'm not really sure if this would really work right away because the weebhooks probably don't notify unknown events. But I think it's worth mentioning because if you plan to merge this project, would be cool to add this event on the bbb-webhooks too.

Excessive Ram Usage

For short recordings it works fine, but for sessions that have a duration more than 30 minutes the system (Ubuntu 18.04) use excessive amount of ram until it crashes.

Any suggestion?

Best
G

"is a directory" on pdf-export and client-side branches

Hey,
on export_slides.rb I'm getting the following:

Started exporting PDF
Traceback (most recent call last):
        8: from export_slides.rb:267:in `<main>'
        7: from export_slides.rb:255:in `export_pdf'
        6: from export_slides.rb:44:in `convert_whiteboard_shapes'
        5: from /var/lib/gems/2.7.0/gems/nokogiri-1.11.7-x86_64-linux/lib/nokogiri/xml/node_set.rb:238:in `each'
        4: from /var/lib/gems/2.7.0/gems/nokogiri-1.11.7-x86_64-linux/lib/nokogiri/xml/node_set.rb:238:in `upto'
        3: from /var/lib/gems/2.7.0/gems/nokogiri-1.11.7-x86_64-linux/lib/nokogiri/xml/node_set.rb:239:in `block in each'
        2: from export_slides.rb:61:in `block in convert_whiteboard_shapes'
        1: from export_slides.rb:38:in `base64_encode'
export_slides.rb:38:in `read': Is a directory @ io_fread - /home/me/exporterbbb/client/ (Errno::EISDIR)

and on export_presentation.rb I get this:

Traceback (most recent call last):
        7: from export_presentation.rb:368:in `<main>'
        6: from export_presentation.rb:50:in `convert_whiteboard_shapes'
        5: from /var/lib/gems/2.7.0/gems/nokogiri-1.11.7-x86_64-linux/lib/nokogiri/xml/node_set.rb:238:in `each'
        4: from /var/lib/gems/2.7.0/gems/nokogiri-1.11.7-x86_64-linux/lib/nokogiri/xml/node_set.rb:238:in `upto'
        3: from /var/lib/gems/2.7.0/gems/nokogiri-1.11.7-x86_64-linux/lib/nokogiri/xml/node_set.rb:239:in `block in each'
        2: from export_presentation.rb:66:in `block in convert_whiteboard_shapes'
        1: from export_presentation.rb:44:in `base64_encode'
export_presentation.rb:44:in `read': Is a directory @ io_fread - /home/me/exporterbbb/client/ (Errno::EISDIR)

I had to remove "deskshare" from the download as my presentation doesn't have one. FFMPEG is compiled with the required flags set.

Congratulations and Thanks

Hi Daniel,

This is just to say THANKS ... I have installed the recorder and it works just fine including all the BBB elements from a recorded session. I have also suscribed to your YouTube channel. Keep going as you have done ... regards from Venezuela and Colombia!.

Daniel (2)

`captions.json` is `html` and error when parsing almost empty xml file

Hi Daniel,
didn't think of a better way to get in touch with you.
I was trying to use your scripts to export a BBB recording.

However, ....

with ruby download_client.rb I run into an JSON parsing error in line 39

# Download all captions
json = JSON.parse(File.read('captions.json'))

In fact, this captions.json file looks not much like a json file: <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/playback/presentation/2.3/favicon.ico"/>...

If I comment out the relevant lines, the script completes.

However, I'm not able to run ruby export_presentation.rb successfully because of

	4: from export_presentation.rb:749:in `<main>'
	3: from export_presentation.rb:723:in `export_presentation'
	2: from export_presentation.rb:278:in `parse_whiteboard_shapes'
	1: from /var/lib/gems/2.7.0/gems/nokogiri-1.12.5-x86_64-linux/lib/nokogiri/xml/reader.rb:103:in `each'
/var/lib/gems/2.7.0/gems/nokogiri-1.12.5-x86_64-linux/lib/nokogiri/xml/reader.rb:103:in `read': 2:1: FATAL: Extra content at the end of the document (Nokogiri::XML::SyntaxError)

which is (as far as I understand the code) caused by line 722/723

  shapes, slides, timestamps =
   parse_whiteboard_shapes(Nokogiri::XML::Reader(File.open("#{@published_files}/shapes_modified.svg")))

and my "shapes_modified.svg" look like this:

# cat shapes_modified.svg                   
<?xml version="1.0"?>

I've tested this for two different recordings on different BBB servers with the same result. I can provide the links to the recordings if someone wants to have it.

Especial char on chat.svg breaks FFMPEG

We had a meeting where someone managed to join with a special character on it's username, I'm not sure how yet.
This causes a major problem on ffmpeg. (Generating like 100 lines of error each second. 😳)
I'm not sure how to solve this, but I'm providing the log, XML and SVG.
I believe you can just replace the XML in any other meeting to reproduce the error.

chat.zip

Integration with scalelite

Hi guy,

I think it is a really good project.
I need to test it.
Just a suggestion, in your script you download all the file and you recreate the structure you need to create the video file. Why don't just search the file on the BBB instance ( only if you have 1 BBB instance ) or on the scaling tool "scalelite".

In the case of scalelite, all the files of all the BBB instances are re-exported in a NFS server.

So you could adapt your script to just get the files from the directory and do the same.

In a second way, you just need to find a way to start your script each time a new record is ready to be "converted".

To help you in the integration of Greenlight, go here EugeneWHZ/greenlight@e0ced18

Regards,
Aurelien.

Start script for existing recordings?

Hi,

I copied the files as explained to the server. Do I have to start/trigger the rendering for the videos manually when some recordings already exist on the server?

Thanks!

File on Processing

hi
how can i know File on Processing and final output file completed or not?

presentation-render.rb:19:in `open': no implicit conversion of URI::HTTP into String (TypeError)

Hello, it is showing me this error. Can you tell me what to do? Thank you.
presentation-render.rb:19:in open': no implicit conversion of URI::HTTP into String (TypeError)
from presentation-render.rb:19:in block in download' from presentation-render.rb:18:in open'
from presentation-render.rb:18:in download' from presentation-render.rb:25:in block in

'
from presentation-render.rb:24:in each' from presentation-render.rb:24:in '`

improvement: dowload_client: id and servername as parameter

Hi,

i patched (ugly) my version, so I can pass servername and recording-id as parameter. ( argv[0] ... )
´ruby download_client.rb bbb.example.net asdfasdfasdf-1234´

with that, its easier if you have multiple recordings on different servers. ( getting videos from a bbb@scale )

with that, scripting gets easier.

for myself, i have a file with
name-of-recoring;servername;recording_id

and a bit bash-scripting, so its downloading into a new folder named name-of-recording, from servername.

How and where to locate the files for deletion

Hi Daniel,

I am using the server side script for mp4 generation and wants to delete the meeting.mp4 files as well as any other raw files related to the meeting id. This is just to make the server space free once the mp4 file is downloaded for offline use.
Can you pls let me know where and how to delete all the recording related files ? and if it is possible to delete it by Delete API of BBB.

Thanks,
Deepak

Bug when there is no cursor to render

When the meeting has no cursor events, ffmpeg tries to fetch a file that doesn't exist.

My guess this is probably because of the lines:

# The last image needs to be specified twice, without specifying the duration (FFmpeg quirk)
File.open("#{published_files}/timestamps/cursor_timestamps", 'a') do |file|
file.puts "file #{published_files}/cursor/cursor#{frame_number - 1}.svgz"

frame_number is actually 0 and

Contents of cursor_timestamps:
file /var/bigbluebutton/published/presentation/{meetind-id}/cursor/cursor-1.svgz

But the folder is actually empty:
bug

My suggestion is to write an empty frame at the end instead of repeating the last one, just to avoid a bunch of 'IFs' later on to decide if you are going to include the cursors on the ffmpeg command line or not. (or add one at the beginning with a very small duration)

I didn't test if the same problem happens when there are no chats or whiteboard information

doubts on how to update to the new bbb-recording-exporter version

Hi,

  1. Is it necessary to compile FFmpg with --enable-librsvg and --enable-libx264? Does Bigbluebutton not have it installed from the install.sh script?
  2. Having installed the previous version of bbb-recording-exporter, is it necessary to delete the files render_chat.rb, render_cursor.rb, and render_whiteboard.rb in /usr/local/bigbluebutton/core/scripts/post_publish

I have already installed loofah on my server but these doubts have arisen to me.

Thank you, Daniel.
JP

client side export slides, gets div by 0 in unique function

CC", begin=5049.5, end=11482.0, width=1600.0, height="1200">]
Traceback (most recent call last):
3: from ../../export_slides.rb:261:in <main>' 2: from ../../export_slides.rb:254:in export_pdf'
1: from ../../export_slides.rb:230:in unique_slides' ../../export_slides.rb:230:in /': divided by 0 (ZeroDivisionError)

If i comment out the unique function, annotates_slides generate fine.

The playback URL is built with the wrong items

Into the file export_presentation.rb the function that adds the greenlight button is built with the wrong items fixed protocol and wrong hostname.
This code is valid only for a greenlight installation on the same BBB server, but If you connect to BBB with another service (e.g. Moodle), the video URL is broken.

Following is the right code that builds the URL in the metadata.xml correctly, by using the information from bigbluebutton.yml, as the other formats do.

def add_greenlight_buttons(metadata)
  bbb_props = YAML::load(File.open('../bigbluebutton.yml'))
  playback_protocol = bbb_props['playback_protocol']
  playback_host = bbb_props['playback_host']

  meeting_id = metadata.xpath('recording/id').inner_text

  metadata.xpath('recording/playback/format').children.first.content = "video"
  metadata.xpath('recording/playback/link').children.first.content = "#{playback_protocol}://#{playback_host}/presentation/#{meeting_id}/meeting.mp4"

  File.open("/var/bigbluebutton/published/video/#{meeting_id}/metadata.xml", "w") do |file|
    file.write(metadata)
  end
end

arrangement of webcams

Hi, is it possible to arrange cameras in column, but not in grid, like in original bbb recordings?
As I understand, it happens here

"'[4]scale=w=320:h=240[webcams];[5]scale=w=1600:h=1080:force_original_aspect_ratio=1[deskshare];[0][deskshare]overlay=x=320[screenshare];[screenshare][1]overlay=x=320[whiteboard];[whiteboard][2]overlay=x=320[cursor];[cursor][3]overlay[chat];[chat][webcams]overlay' " \

Thank you.👍

error, when recording contains no desksharing

Hi,

(using download_client)
I had issues, when a recording did not contain a desksharing.mp4 file.
the download_client ended up with errors and a zero-byte desksharing.mp4 file.
had to play around with exluding/including that in the array to get all the files.

export_presentation ended in an error.

This can happen, when you upload slides, start recording, just work with sildes, stop recording; no desktop involved.

as a workaround, i copied a desksharing.mp4 from some other bbb-export - as i assume it will anyway not end up in the resulting video and is just required to make the script happy.

core.rb:384:in `parse': undefined method `split' for nil:NilClass

I tried out your exporter, but unfortunately I am getting this error:

ruby download_client.rb "https://konferenz.xxx.de/playback/presentation/2.3/5720c6560b8ef27d38ce47f35ed76175b78172ce-1620658952093"
Traceback (most recent call last):
	4: from download_client.rb:31:in `<main>'
	3: from download_client.rb:31:in `each'
	2: from download_client.rb:32:in `block in <main>'
	1: from download_client.rb:16:in `download'
/usr/lib/ruby/2.7.0/cgi/core.rb:384:in `parse': undefined method `split' for nil:NilClass (NoMethodError)

ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux-gnu]
Ubuntu 20.04

Edit chat text style

Hi daniel,
first I want to thank you for this practical project.

Is it possible to change the "direction" (rtl), "text-align", "font-family" and "line-height" in the text of chats.
I want to Suitable it for Persian language.

I tried to do this by editing this line 376:
builder.style { builder << "text{direction: rtl; text-align: right; font-family: arial; line-height: 1.5; font-size: #{CHAT_FONT_SIZE}}" }
but it had no effect on the output!!

Can you help?

Upgrading bbb-recording-exporter to the last version Oct'07 the link to download the mp4 file is not complete.

Hi, Daniel.

After upgrading to the last version (October, 07 2021) from the second one (June, 16) now appears (for instance on demo10.jsp) a new link called 'video', near the 'presentation' link, to download the 'meeting.mp4' file but the URL is not complete. The domain portion is missing.

Looking for a solution I found the 'metadata.xml' file into /var/bigbluebutton/publish/video/'MeetingID'/metadata.xml
On < playback > / < link > label the path to the file is OK but the domain portion is missing.

It shows like this:
< link >https:///presentation/6e35e3b2778883f5db637d7a5dba0a427f692e91-1634435138500/meeting.mp4< /link >

When correct and complete path should be:
< link >https://mydomain.com/presentation/6e35e3b2778883f5db637d7a5dba0a427f692e91-1634435138500/meeting.mp4< /link >

Is there some way to correct this issue perhaps on the file which generates the 'metadata.xml' file?

Thanks in advance.
Juan Pablo

issue

how? set background-color

hi,

it might be usefull, to set a non-white backgroundcolor. (like black)
to me it sounds more natural (like the black bars on top and bottom, for movies in TV.
... how ?

export not working

hi
after updated to new change the export process not working and when manually run it only message me like this :
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:10: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:29: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:30: warning: constant Gem::ConfigMap is deprecated
ruby: warning: shebang line ending with \r may cause problems
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:10: warning: constant Gem::ConfigMap is deprecated
and nothing was do

Use a temporary file to meeting.mp4

The final file 'meeting.mp4' is being written in its final location while is being processed.
This causes a problem, because if you try to download it before the rendering is over, your server will reply with a HTTP 200, but offer you a broken file.
I believe it should be written on a temporary file first and moved afterwards.

Feature : Choose which Recordings to be exported (bbb-origin-server)

I am trying to add an option to choose which Recordings to be exported as mp4.

The idea is to read "events.xml" file,check its origin eg. Greenlight, Moodle1, Moodle2, Wordpress1 etc and export mp4 for all the origins except ones from "Greenlight". Please advise.

My Edits at "presentation.rb" :

require File.expand_path('../../../lib/recordandplayback', FILE)
require File.expand_path('../../../lib/recordandplayback/interval_tree', FILE)

include IntervalTree

opts = Optimist.options do
opt :meeting_id, 'Meeting id to archive', type: String
opt :format, 'Playback format name', type: String
opt :log_stdout, 'Log to STDOUT', type: :flag
end

meeting_id = opts[:meeting_id]
playback = opts[:format]

exit(0) if playback != 'presentation'

#####BEGIN OF CHECK XXXXXXXX#####
meeting_metadata = BigBlueButton::Events.get_meeting_metadata("/var/bigbluebutton/recording/raw/#{meeting_id}/events.xml")

File.open("/var/bigbluebutton/recording/raw/#{meeting_id}/events.xml") do |f|
f.each_line do |line|
if line =~ /greenlight/
exit(0)
end
#####END OF CHECK XXXXXXXX#####

REST OF THE CODE

Gem Errors -> cannot export presentation to mp4

trying to export a presentation give errors:

./presentation.rb -m b775194a98001f12e1baf8928521943d5923d958-1638800193723

/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:10: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:29: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:30: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:10: warning: constant Gem::ConfigMap is deprecated
Traceback (most recent call last):
2: from ./presentation.rb:15:in <main>' 1: from /usr/local/lib/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:85:in require'
/usr/local/lib/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:85:in `require': cannot load such file -- /usr/local/bigbluebutton/core/scripts/lib/recordandplayback (LoadError)

BBB Version:

> 
> BigBlueButton Server 2.3.15 (2482)
> 
> ii  bbb-apps-akka                          2.3.0-103                                       all          BigBlueButton Apps (Akka)
> ii  bbb-config                             1:2.3.0-98                                      amd64        BigBlueButton configuration utilities
> ii  bbb-etherpad                           1:2.3.0-52                                      amd64        The EtherPad Lite components for BigBlueButton
> ii  bbb-freeswitch-core                    2:2.3.0-28                                      amd64        BigBlueButton build of FreeSWITCH
> ii  bbb-freeswitch-sounds                  1:1.6.7-3                                       amd64        FreeSWITCH Sounds
> ii  bbb-fsesl-akka                         2.3.0-55                                        all          BigBlueButton FS-ESL (Akka)
> ii  bbb-html5                              1:2.3.0-1854                                    amd64        The HTML5 components for BigBlueButton
> ii  bbb-libreoffice-docker                 1:2.3.0-60                                      amd64        BigBlueButton setup for LibreOffice running in docker
> ii  bbb-mkclean                            1:0.8.7-4                                       amd64        Clean and optimize Matroska and WebM files
> ii  bbb-playback                           1:2.3.0-23                                      amd64        BigBlueButton playback
> ii  bbb-playback-presentation              1:2.3.0-13                                      amd64        BigBluebutton playback of presentation
> ii  bbb-record-core                        1:2.3.0-37                                      amd64        BigBlueButton record and playback
> ii  bbb-web                                1:2.3.0-97                                      amd64        BigBlueButton API
> ii  bbb-webrtc-sfu                         1:2.3.0-37                                      amd64        BigBlueButton WebRTC SFU
> ii  bigbluebutton                          1:2.3.0-7                                       amd64        Open source web conferencing platform (bbb)
> ii  ffmpeg                                 7:4.2.4-1ubuntu0.1bbb2~18.04                    amd64        Tools for transcoding, streaming and playing of multimedia files
> ii  libavcodec58:amd64                     7:4.2.4-1ubuntu0.1bbb2~18.04                    amd64        FFmpeg library with de/encoders for audio/video codecs - runtime files
> ii  libavdevice58:amd64                    7:4.2.4-1ubuntu0.1bbb2~18.04                    amd64        FFmpeg library for handling input and output devices - runtime files
> ii  libavfilter7:amd64                     7:4.2.4-1ubuntu0.1bbb2~18.04                    amd64        FFmpeg library containing media filters - runtime files
> ii  libavformat58:amd64                    7:4.2.4-1ubuntu0.1bbb2~18.04                    amd64        FFmpeg library with (de)muxers for multimedia containers - runtime files
> ii  libavresample4:amd64                   7:4.2.4-1ubuntu0.1bbb2~18.04                    amd64        FFmpeg compatibility library for resampling - runtime files
> ii  libavutil56:amd64                      7:4.2.4-1ubuntu0.1bbb2~18.04                    amd64        FFmpeg library with functions for simplifying programming - runtime files
> ii  libopusenc0                            0.2.1-1bbb1                                     amd64        High-level API for encoding Ogg Opus audio streams
> ii  libpostproc55:amd64                    7:4.2.4-1ubuntu0.1bbb2~18.04                    amd64        FFmpeg library for post processing - runtime files
> ii  libswresample3:amd64                   7:4.2.4-1ubuntu0.1bbb2~18.04                    amd64        FFmpeg library for audio resampling, rematrixing etc. - runtime files
> ii  libswscale5:amd64                      7:4.2.4-1ubuntu0.1bbb2~18.04                    amd64        FFmpeg library for image scaling and various conversions - runtime files

render whiteboard error

while ruby render_cursor.rb & ruby render_chat.rb are successfull ruby render_whiteboard.rb throws an error:

ruby render_whiteboard.rb
Traceback (most recent call last):
	4: from render_whiteboard.rb:39:in `<main>'
	3: from /usr/lib/ruby/vendor_ruby/nokogiri/xml/searchable.rb:154:in `xpath'
	2: from /usr/lib/ruby/vendor_ruby/nokogiri/xml/searchable.rb:179:in `xpath_internal'
	1: from /usr/lib/ruby/vendor_ruby/nokogiri/xml/searchable.rb:198:in `xpath_impl'
/usr/lib/ruby/vendor_ruby/nokogiri/xml/searchable.rb:198:in `evaluate': ERROR: Undefined namespace prefix: //xmlns:g/xmlns:switch/xmlns:foreignObject (Nokogiri::XML::XPath::SyntaxError)

How to delete the exported files?

Hi,
I would like to know if is there any way to delete these exported files? I have set up BBB to delete files if older than 45 days, so when the file is deleted, what will happen with the exported file?
And thank you so much for this great work, it saves me a lot of time.

Client side how to

Hi
Thanks for the solution, i make server exporter but client side how to do please ?
Where put download_client.rb ?

Thanks again

Great project.

Hi Daniel, just checked project, running against your test presentation.
This on 2.3 dev server, downloaded everything then got.

Downloading https://balancer.bbb.rbg.tum.de/presentation/32660e42f95b3ba7a92c968cdc9e0c37272cf463-1613978884363/presentation/c22f914bafe3123cd20e97db9f2d5561ddbf5ec4-1613980020412/slide-1.png
Traceback (most recent call last):
10: from presentation-render.rb:55:in <main>' 9: from /var/lib/gems/2.5.0/gems/nokogiri-1.11.0-x86_64-linux/lib/nokogiri/xml/node_set.rb:238:in each'
8: from /var/lib/gems/2.5.0/gems/nokogiri-1.11.0-x86_64-linux/lib/nokogiri/xml/node_set.rb:238:in upto' 7: from /var/lib/gems/2.5.0/gems/nokogiri-1.11.0-x86_64-linux/lib/nokogiri/xml/node_set.rb:239:in block in each'
6: from presentation-render.rb:113:in block in <main>' 5: from /usr/lib/ruby/2.5.0/open-uri.rb:37:in open'
4: from /usr/lib/ruby/2.5.0/open-uri.rb:37:in open' 3: from presentation-render.rb:114:in block (2 levels) in

'
2: from /usr/lib/ruby/2.5.0/open-uri.rb:37:in open' 1: from /usr/lib/ruby/2.5.0/open-uri.rb:37:in open'
/usr/lib/ruby/2.5.0/open-uri.rb:37:in `initialize': No such file or directory @ rb_sysopen - frames/frame21.png (Errno::ENOENT)

may be related to 2.3 will try on 2.2 box,

good work,
Stephen

December, 05 version fails rendering a 92 minutes meeting

Hi, all.
I have recently updated to BBB 2.3.16 and bbb-recorging-exporting from October, 07 version to December, 05 version.
I tested to render a one minute meeting and the result was OK.
Yesterday I recorded a 92 minutes meeting and the render was failed. The meeting.mp4 video file did not exist.

I tried to re-render the meeting by ./presentation.rb -m <meeting_id> code and it was failed again.

I had to downgrade or came back to October, 07 version and re-render the recorded meeting by ./export_presentation.rb -m <meeting_id> code and this time the render was OK. I have got the meeting.mp4 video file.

Following I put the results of each codes.

Thanks for your comments and best regards.
JP
December-05 version fails rendering a 92 minutes meeting.txt

Syntax error

I followed the directions and gave the files the permissions, but I get the following error when attempting to create one mp4 file using the command - ./export_presentation.rb -m 95cd1ac087f121fb0e67269562efa67186ce8a4f-1628822429170 I get the following output:
sh: 1: Syntax error: Unterminated quoted string
An error occurred rendering the video.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.