====== Installing BigBlueButton ======
Please find the instructions to install bigbluebutton - [[installing_bigbluebutton]]
====== Integrating with the api ======
The integration with the API is taken care by the bigbluebutton rails plugin which can be found under the crossbow/trunk/vendor/plugins. This is taken from bigbluebutton-api-ruby gem(https://rubygems.org/gems/bigbluebutton-api-ruby) and modified to suit our purpose.
The current version of the gem only works with both version 0.7 and 0.8, We need to make some model chnages after switching the gem version.
The API request and response parameters can be found at http://code.google.com/p/bigbluebutton/wiki/API#API_Calls
With the latest release of bbb(0.7), the meeting information are not stored in the DB, rather maintained in redis server. So if the bbb system gets restarted all the information related to meeting will be lost.
To get around this problem, the meeting information shall be stored in the crossbow database (meetings table). With this approach a meeting can be scheduled in the future time. The owner of the meeting, can then start the meeting at the scheduled time. Once the meeting starts, the attendees can join the meeting.(In the UI we provide a button 'join Meeting' if 'isMeetingRunning' api call returns true).
==== Discussion ======
After a meeting has ended (either forcibly or after all participants have voluntarily left), a meeting only stays in memory for 60 minutes. After that it will no longer be returned from the getMeetings call, and you will not be able to call getMeetingInfo, etc, for that meeting. The number of minutes that it remains in memory is configurable. You can modify /var/lib/tomcat6/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties and change (or add) the line "beans.dynamicConferenceService.minutesElapsedBeforeMeetingExpiration=60". If you add it, it should be added just before or after the line where your security salt is configured.
If we want to persist all of the meeting and attendee information, we can have a periodically running task that gets information through API and saves it in the database.
**How to get the time spent by each attendee in the meeting ?**
As of now, there is no way to get the time when an attendee has logged out of the meeting. BBB API says that there are planning to add attendee start time and end time in the response of getMeetingInfo API. But, this call only returns the attendees who are currently in the meeting. So, if the meeting has ended or any attendee has left the meeting before we query the data, the information is lost.
**How to get the End time of meeting ?**
As long as the meeting is available in the memory , we can get it through getMeetingInfo call.
**Do we want to allow restart of the same meeting, after it is end ?**
If yes, we can do it but each time a meeting is started it is a fresh meeting with respect to BBB and the previous meeting information is lost on BBB server. Each and every start should be tracked separately if we want to save that information. Also, When a meeting is forcebly ended by endMeeting API call, BBB does not allow to start a meeting with the same meeting ID till the meeting information is flushed out from memory. So, some time duration should be there before restart of the meeting.
====== Pre uploading Presentations ======
The presentations can be any document, pdf or ppt. We can specify in the create meeting request to load the presentations which will be displayed by default as soon as the meeting starts.
We can specify the presentation url or file itself in the encoded64 format and embed it in the post request request of the create meeting. The XML should look like below
JVBERi0xLjQKJ....
[clipped here]
....0CiUlRU9GCg==
The bigbluebutton plugin takes care of this. We upload the files and save them in assets table. The models LiveEventPresentation and LiveEventAssociation are added to handle the presentations of a live event. We send the files to BBB server in base64 encoded format as it is faster.
====== Compiling client with flash player 11+ (11.2) ======
BBB client needs to be compiled for flash player 11.2+ to get h264 encoding features of flash player for video conferencing. Following steps are needed for that.
1. Change build.xml in bigbluebutton-client directory and replace 10.3 (or flash major version 10 and minor version 3) to 11.2 (major version 11, minor vesion 2) across the entire file. (Note - This change comes from svn. So, just verifying is enough in our case.)
2. Add flashplayer 11.2 swc to flexsdk.
wget http://download.macromedia.com/get/flashplayer/updaters/11/playerglobal11_2.swc
# Figure out flex_home_dir. Mostly it is /home//dev/tools/flex-4.5.0.20967 or the value in FLEX_HOME env variable.
mkdir flex_home_dir/frameworks/libs/player/11.2
mv playerglobal11_2.swc flex_home_dir/frameworks/libs/player/11.2/playerglobal.swc
chmod 775 flex_home_dir/frameworks/libs/player/11.2/playerglobal.swc
3. Run ant task in bigbluebutton-client directory.
====== DB schema ======
Table Name : meetings
^ Column_name ^type ^ Description ^
| id | integer | primary key |
| meeting_id| varchar | meeting_id (should be unique in the bbb ) |
| meeting_name| varchar | name of the meeting |
| owner_id | integer | references user |
| moderate_password | varchar | the password to be used by the owner to start the meeting|
| attendee_password | varchar | the password to be used by the attendee to join the meeting |
| scheduled_start_time | datetime | the date when the meeting is scheduled |
| duration_in_min | integer | How long the meeting will last |
| welcome_message | string | Welcome message to be displayed on launch |
| dailin_number | string | Dial in number for conference |
| voice_bridge | string | Voice conference number that participants enter to join the voice conference |
| max_participants | integer | Maximum number of participants that can attend this meeting |
| create_at | date_time |created date |
| updated_at | date_time|updated date |
Table Name : attendees
^ Column_name ^type ^ Description ^
| id | integer | primary key |
|meeting_id | integer | meeting id (references to meetings table |
| attendee_id| integer | user's id |
//Note//: We can add two columns started_at and ended_at to both meetings and attendees tables if we want to fetch the actual meeting start and end times from bbb server and save.