Answer inline.
On Tue, Jan 25, 2011 at 6:41 PM, Jeremy Thomerson
<jer...@thomersonfamily.com> wrote:
> Folks,
> I've just uploaded a partial implementation of a new beta feature -
> pre-uploading of documents for meetings. I want your feedback. The idea is
> simple: third party apps should be able to upload documents in the meeting
> "create" command so the user can just focus on starting the meeting when he
> joins. The implementation is simple: rather than the normal HTTP GET, you
> send a POST. The URL is exactly the same as your GET would be (all the
> normal parameters go there). The body is just XML (not like an HTML form
> post). The XML can contain configuration for multiple modules. In this
> case, I'm only handling things for the presentation module, but this gives
> us the flexibility to allow configuration for different modules later
> without drastic changes to the XML.
This is great. We've also been thinking about how to allow 3rd party
apps to pass in configuration to BigBlueButton. Doing it this way will
allow 3rd party apps to tailor what each user's configuration. We'll
call it (for now) dynamic config api as we're also thinking of
allowing dynamic/custom config.xml that gets loaded by the client.
I'll explain this more below.
> The code is in a new branch:
> https://github.com/bigbluebutton/bigbluebutton/tree/preupload_docs_beta
> An example of the XML is below. Please note there are two different ways of
> uploading files. The first is to give it a URL to a file. It will download
> and process it. The second is to send a file as a base64 encoded string.
> <?xml version="1.0" encoding="UTF-8"?>
> <modules>
> <module name="foo">
> <bar something="123" />
> </module>
> <module name="presentation">
> <document url="http://www.samplepdf.com/sample.pdf" />
> <document name="sample-presentation.pdf">JVBERi0xLjQKJ.... [ clipped
> here ] ....0CiUlRU9GCg==</document>
> </module>
> </modules>
> I have the uploading (or decoding the base64 files) and processing working.
> What isn't working (I'm going to ask Richard or Denis for help) is then
> telling BBB that the file is done processing so that it automatically
> displays when the first user shows up.
Currently, BigBlueButton assumes that the presenter is logged-in into
the conference when uploading the presentation. The document
conversion service will send conversion updates to all clients while
processing the uploaded document. When it's done, it will send a
"document converted" message with an xml containing the links to each
slide. When each client receives this message, it stores the
presentation name into it's list of uploaded presentations. It will
also then download all the thumbnails using the link from the xml
message.
However, it your use case, there will be no client listening for the
conversion update messages.
What I'd like to suggest is using a dynamic config.xml passing in the
pre-uploaded presentation.
Currently, the config.xml is a static file in
/var/www/bigbluebutton/client/conf/config.xml. What if we create this
dynamically? We can pass the pre-uploaded presentation under the
presentation module.
When the presentation module sees that there are pre-uploaded
presentations, it will query BigBlueButton web for these
presentations. You can see an example here
(http://pastebin.com/rgCXcxBk) with the top part having the current
config.xml and the bottom part the new config.xml
What do you think?
I'd also like to suggest where to store the pre-uploaded presentation
to address the enhancement request a few days ago about re-using
pre-uploaded presentations on different meetings/classes. I'm thinking
of having pre-uploaded presentations stored in a separate directory
(e.g. /var/bigbluebutton/pre-uploaded-presentations/<uploaded-presentation-id>)
and not under the current meeting directory (i.e.
/var/bigbluebutton/<meeting-id>/.../presentations). The reason for
this is Record And Playback. If the meeting is being recorded, at the
end of the session, we will be collecting all artifacts (presentation,
slides, audio, etc.) of the meeting and store them into an archive.
This way the "Archiving Service" won't remove the original
pre-uploaded presentation.
When a meeting needs to load a pre-uploaded presentation, the call
just passes the "uploaded-presentation-id" and the pre-uploaded
presentation get's copied into the current meeting's presentation
folder.
Looking for feedback.
Richard
> Please give your feedback. I'm specifically looking for:
> 1 - feedback on XML format - remember that we want something generic that
> can be used for other modules down the road (voice, video, etc...)
> 2 - other use cases to consider - we definitely won't be getting all of them
> working right up front, but it's good to know of them so that we can design
> for them to be added easier later.
> Thanks!
> Jeremy Thomerson
> http://genericconf.com
>
> --
> You received this message because you are subscribed to the Google Groups
> "BigBlueButton-dev" group.
> To post to this group, send email to bigblueb...@googlegroups.com.
> To unsubscribe from this group, send email to
> bigbluebutton-...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/bigbluebutton-dev?hl=en.
>
--
---
BigBlueButton
http://www.bigbluebutton.org
http://code.google.com/p/bigbluebutton
However, it your use case, there will be no client listening for the
conversion update messages.
What I'd like to suggest is using a dynamic config.xml passing in the
pre-uploaded presentation.
Currently, the config.xml is a static file in
/var/www/bigbluebutton/client/conf/config.xml. What if we create this
dynamically? We can pass the pre-uploaded presentation under the
presentation module.
When the presentation module sees that there are pre-uploaded
presentations, it will query BigBlueButton web for these
presentations. You can see an example here
(http://pastebin.com/rgCXcxBk) with the top part having the current
config.xml and the bottom part the new config.xml
What do you think?
I'd also like to suggest where to store the pre-uploaded presentation
to address the enhancement request a few days ago about re-using
pre-uploaded presentations on different meetings/classes. I'm thinking
of having pre-uploaded presentations stored in a separate directory
(e.g. /var/bigbluebutton/pre-uploaded-presentations/<uploaded-presentation-id>)
and not under the current meeting directory (i.e.
/var/bigbluebutton/<meeting-id>/.../presentations). The reason for
this is Record And Playback. If the meeting is being recorded, at the
end of the session, we will be collecting all artifacts (presentation,
slides, audio, etc.) of the meeting and store them into an archive.
This way the "Archiving Service" won't remove the original
pre-uploaded presentation.
When a meeting needs to load a pre-uploaded presentation, the call
just passes the "uploaded-presentation-id" and the pre-uploaded
presentation get's copied into the current meeting's presentation
folder.
Looking for feedback.
Richard
Agree with you and Jeremy.
What we'll have to figure out is Jeremy's question.
> What happens when a user signs in after presentations have been uploaded?
> Surely he gets a list of presentations from somewhere? I'm guessing,
> anyway....
The list of uploaded presentations are stores in the
bigbluebutton-apps/Red5 server.
https://github.com/bigbluebutton/bigbluebutton/blob/master/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationRoom.java
The application listens for the "CONVERSION_COMPLETED" (line 96)
message from bigbluebutton-web whose doing the converting. However,
currently, the meeting/room in bigbluebutton-apps gets created when
the first user joins the meeting (i.e. logged into the bigbluebutton
client). So when the pre-uploaded slide conversion is going on,
nothing is listening for these conversion messages in
bigbluebutton-apps.
When a user joins the meeting, the bigbluebutton client will query the
server for the list of uploaded presentations and the state of the
current presentations (line 301 of
https://github.com/bigbluebutton/bigbluebutton/blob/master/bigbluebutton-client/src/org/bigbluebutton/modules/present/business/PresentSOService.as).
However, for the reason mentioned on the above paragraph, it will
return nothing.
So, we need to figure out a way to populate
https://github.com/bigbluebutton/bigbluebutton/blob/master/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationRoom.java
with the pre-uploaded presentation when the first user joins the
meeting.
One way, is for the client (when the first user joins) to query
bigbluebutton-web for a list of pre-uploaded presentation (if any) and
then propagate that information to bigbluebutton-apps so that it gets
stored there. When the other users join, their client will just do
what it's currently doing which is query bigbluebutton-apps with a
list of uploaded presentations.
Another way, is for bigbluebutton-web to store this information in
Redis (we are proposing replacing ActiveMQ with Redis -- see email
from Markos). So when the meeting starts in bigbluebutton-apps, it can
query Redis for any pre-uploaded presentation.
Any other ideas?
Richard
--
Steven Schroedl
503 869-0276 [voice]
-- sent from my so called "smart" phone, so please excuse spelling, formatting, or compiler errors
Hi,
Agree with you and Jeremy.
What we'll have to figure out is Jeremy's question.
The list of uploaded presentations are stores in the
> What happens when a user signs in after presentations have been uploaded?
> Surely he gets a list of presentations from somewhere? I'm guessing,
> anyway....
bigbluebutton-apps/Red5 server.
https://github.com/bigbluebutton/bigbluebutton/blob/master/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationRoom.java
The application listens for the "CONVERSION_COMPLETED" (line 96)
message from bigbluebutton-web whose doing the converting. However,
currently, the meeting/room in bigbluebutton-apps gets created when
the first user joins the meeting (i.e. logged into the bigbluebutton
client). So when the pre-uploaded slide conversion is going on,
nothing is listening for these conversion messages in
bigbluebutton-apps.
When a user joins the meeting, the bigbluebutton client will query the
server for the list of uploaded presentations and the state of the
current presentations (line 301 of
https://github.com/bigbluebutton/bigbluebutton/blob/master/bigbluebutton-client/src/org/bigbluebutton/modules/present/business/PresentSOService.as).
However, for the reason mentioned on the above paragraph, it will
return nothing.
So, we need to figure out a way to populate
https://github.com/bigbluebutton/bigbluebutton/blob/master/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationRoom.java
with the pre-uploaded presentation when the first user joins the
meeting.
One way, is for the client (when the first user joins) to query
bigbluebutton-web for a list of pre-uploaded presentation (if any) and
then propagate that information to bigbluebutton-apps so that it gets
stored there. When the other users join, their client will just do
what it's currently doing which is query bigbluebutton-apps with a
list of uploaded presentations.
Another way, is for bigbluebutton-web to store this information in
Redis (we are proposing replacing ActiveMQ with Redis -- see email
from Markos). So when the meeting starts in bigbluebutton-apps, it can
query Redis for any pre-uploaded presentation.
Any other ideas?
<snip/>
> I think it could be even simpler. I haven't looked at the piece of code you
> mention above that is listening for the "DOCUMENT_CONVERTED" events.... but,
> I would suspect that it is receiving that, and then looking for the
> corresponding room that it is associated with, and if it doesn't find that
> room, discarding the event. Perhaps instead it could create the
> previously-uncreated room when it receives an event for an unknown room.
> Thoughts?
Unfortunately, we cannot. The life of the room is tied to the presence
of a user in a room. The room gets created when the first user joins
and destroyed when the last user leaves. If the first user joins and
the leaves, the informations gets lost. So when she rejoins, the
pre-uploaded list of presentations are not available.
Richard
>
> Jeremy Thomerson
> http://genericconf.com
>
> --
> You received this message because you are subscribed to the Google Groups
> "BigBlueButton-dev" group.
> To post to this group, send email to bigblueb...@googlegroups.com.
> To unsubscribe from this group, send email to
> bigbluebutton-...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/bigbluebutton-dev?hl=en.
>
--
Presentations are currently uploaded to the folder
{conferenceid}/{roomid}, which is dynamically created when the first
presentation is uploaded. Both parameters are currently set to the
meetingID, but the meetingID does not exist until somebody joins the
room and is no longer relevant after the last person leaves the meeting.
If the external XML file specifies the conferenceid and roomid as
parameters, then the files could be downloaded and converted into that
folder (English101/Week7) with no dependency on whether a meeting has
already started or not. The upload and conversion could start as soon
as the meeting was created with the API, since the meetingID is not
required to determine the name of the folder. This also allows you to
make a call to the API at any time to pre-load a set of documents, even
if nobody ever joins that meeting.
When the client loads, it should also read the XML file to get all the
dynamic parameters for this meeting, which will include the list of
presentations. If the presentations listed in the XML file are not
already in presentationNames[] and you are the moderator, then you can
request that they are loaded using the conferenceID, roomID, and
presentationName listed in the XML file (English 101, Week 7,
Assignment1.pdf). This allows you to load the same presentations over
and over again whether you are in the same meeting or in different
meetings, and does not rely on any data structures on the server.
This would only change the behavior of the client for first person to
enter the room (ie the lone moderator).
As an aside, having the client read an external XML file when it starts
should make customizing the client easier. This allows you to pass any
number of parameters into the client without modifying the server, and
allows you to keep all the business logic off the BBB server and in the
external application where it belongs.
Mike