danielpetri1 / bbb-recording-exporter Goto Github PK
View Code? Open in Web Editor NEWA client- and server side script to generate BigBlueButton MP4 recordings.
License: MIT License
A client- and server side script to generate BigBlueButton MP4 recordings.
License: MIT License
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.
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.
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.
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
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
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.
Hello,
First of all I should say thanks for this work which is highly appreciated:)
My question is
download_client.rb
and is that necessary to place it somewhere?/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.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
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)
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.
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.
Hi,
where do I find the file
app/views/admins/components/_server_recording_row.html.erb
mentioned here
for a integration of a download-button in greenlight?
I installed bbb with docker install script...
Thanks!
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
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:
This is the result in meeting.mp4:
Persian is utf8 and RTL. Maybe that's the reason.
Thanks in Advance
Hi,
--enable-librsvg
and --enable-libx264
? Does Bigbluebutton not have it installed from the install.sh script?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
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:
bbb-recording-exporter/render_cursor.rb
Lines 124 to 126 in 8dafa29
Contents of cursor_timestamps:
file /var/bigbluebutton/published/presentation/{meetind-id}/cursor/cursor-1.svgz
But the folder is actually empty:
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
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
hi
how can i know File on Processing and final output file completed or not?
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.
Hi, is it possible to arrange cameras in column, but not in grid, like in original bbb recordings?
As I understand, it happens here
bbb-recording-exporter/render_whiteboard.rb
Line 238 in 46c0625
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
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
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
open' 1: from /usr/lib/ruby/2.5.0/open-uri.rb:37:in
open'may be related to 2.3 will try on 2.2 box,
good work,
Stephen
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.
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
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!
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
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 ?
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
We are using BBB with the docker script. Unfortunately I cannot simply add the files there.
Please try to integrate it in the docker script.
When dragging lines or shapes on a slide the shapes are drawn multiple times, see this video as an example:
https://user-images.githubusercontent.com/9115740/126910281-0ccb62ec-2795-4149-acc1-f7ace4b99b54.mp4
Also when removing one written character it doesn't remove it which results in multiple characters in one space, see this image:
bbb 2.3 used latest client-side branch
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
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.
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)
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.
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?
Hello,
I added script but the Video
button is in English while my site language is Persian (fa_IR).
When I hover over the button, I see this message:
translation missing: fa_IR.recording.format.Video
What string should I add to my language yml file?
Is adding said in danielpetri1/greenlight@72c2165 enough?
Regards,
Saeed
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
hi
how to Change processing time to prepare mp4 files?
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.
Hi
Thanks for the solution, i make server exporter but client side how to do please ?
Where put download_client.rb ?
Thanks again
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.
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.
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
each' from presentation-render.rb:24:in
'`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?
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
Showing the thumbnails like the playback does helps knowing our position in the recording. It could be made optional.
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?
--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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.