Commit Graph

458 Commits

Author SHA1 Message Date
Felipe Cecagno
7069a4a6d7 Recording: Also tell ffmpeg to ignore the length of the intermediate wav file 2015-10-16 14:09:32 -04:00
Felipe Cecagno
762d1e9a56 another patch to fix the long wav files problem 2015-10-16 14:53:20 -03:00
Calvin Walton
fe8cf13b11 Convert audio_size to a number before subtracting header size 2015-10-15 15:11:45 -03:00
Calvin Walton
43e943d61d Need to convert bit_rate to an integer 2015-10-15 15:11:44 -03:00
Calvin Walton
30e6a98a8b Fix some reference errors in wav detection 2015-10-15 15:11:44 -03:00
Calvin Walton
8332daf093 record-and-playback: Handle FreeSWITCH wav files >4GB
FreeSWITCH writes wav files >4GB long with incorrect values in the length
field in the header. Recalculate the length based on file size, and ensure
that ffmpeg reads the complete audio file rather than stopping.
2015-10-15 15:11:44 -03:00
Anton Georgiev
f08cd5262e temp changes 2015-10-13 19:00:50 +00:00
Anton Georgiev
6b8626d40f cleaning up and reverting unnecessary config 2015-09-29 16:03:40 +00:00
Anton Georgiev
1d1c8a421b deskshare edl for webrtc 2015-09-28 20:49:24 +00:00
Calvin Walton
a6d6001040 Convert audio_size to a number before subtracting header size 2015-09-25 14:11:25 -04:00
Calvin Walton
d44b458b49 Need to convert bit_rate to an integer 2015-09-25 14:08:17 -04:00
Anton Georgiev
366b01fff7 webrtc deskshare work on recording scripts 2015-09-25 18:05:54 +00:00
Calvin Walton
530799776d Fix some reference errors in wav detection 2015-09-25 14:01:30 -04:00
Calvin Walton
1dcd49e180 record-and-playback: Handle FreeSWITCH wav files >4GB
FreeSWITCH writes wav files >4GB long with incorrect values in the length
field in the header. Recalculate the length based on file size, and ensure
that ffmpeg reads the complete audio file rather than stopping.
2015-09-24 15:54:20 -04:00
RafaFP
0284ee0048 Latest version of the implementation of the feature #1734.
Data on Playback, Metadata and Download are now present on the publish_ended event.
If the related content is absent it will be returned empty, if otherwise present all child tags and data will be presented.

 refs 1734
2015-09-14 15:55:06 +00:00
RafaFP
4325e98bf2 Implemented the code to add the "playback", "meta" and "download" tags from the XML to the publish_ended.
Added code to guarantee that a hash is passed even when the tags do not exist in the XML.

 #feature 1734
2015-09-11 21:12:09 +00:00
RafaFP
2a85811d40 Implemented hash data gathering dinamically, still have to use TRY to catch the nil exception.
If the hash is nil the publish_ended post is skipped.

Must validate the tag values and add the download tag.
2015-09-11 18:20:47 +00:00
Felipe Cecagno
ed366e6b21 Merge branch '090-recordings-size' into mconf-live0.7.3
Conflicts:
	bigbluebutton-web/src/java/org/bigbluebutton/api/MeetingService.java
	bigbluebutton-web/src/java/org/bigbluebutton/api/domain/Recording.java
2015-09-08 17:43:20 -03:00
Felipe Cecagno
32957898f6 refactored part of the bbb-0.9-recording-size code in order to include the size on the download size for mconf_encrypted and the playback size for the others; included raw_size for all available formats 2015-09-08 17:18:02 -03:00
RafaFP
eb1b5aee49 Included playback data to the event of "publish_ended"
#refs 1734
2015-09-01 16:13:10 +00:00
RafaFP
8602d3c263 Added the link and duration info to the publish_ended event.
#refs 1734
2015-08-31 20:29:00 +00:00
Fred Dixon
c99da48041 Removed uneeded script 2015-08-13 17:32:03 -04:00
Felipe Cecagno
eef0398885 changing permissions over bbb-0.9-recording-size, which is now executable 2015-07-15 17:16:04 -03:00
Pedro Beschorner Marin
60a1ae6436 Cleanup 2015-06-10 17:14:14 +00:00
Pedro Beschorner Marin
cbfe8b8859 Added an update script for sizes injection in old recordings metadata and some refactoring 2015-06-10 17:07:11 +00:00
Pedro Beschorner Marin
9932a4c4fe Fixing metadata.xml identation 2015-06-10 00:39:55 +00:00
Pedro Beschorner Marin
f8ff4a6725 Injecting format size in metadata.xml 2015-06-09 21:06:57 +00:00
Pedro Beschorner Marin
6ef2bf6b27 Getting playback and full meeting published sizes 2015-06-09 14:39:35 +00:00
Pedro Beschorner Marin
4225a87abd Refactoring and cleanup 2015-06-04 16:03:20 +00:00
Felipe Cecagno
7cb12f8b49 Merge branch 'mconf-live0.6.3' into bigbluebutton/bigbluebutton@v0.9.0-release
Conflicts:
	bbb-api-demo/src/main/webapp/demo10_helper.jsp
	bbb-video/build.gradle
	bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/BigBlueButtonApplication.java
	bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/BigBlueButtonSession.java
	bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/meeting/messaging/red5/ConnectionInvokerService.java
	bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsApplication.java
	bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsHandler.java
	bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsListener.java
	bigbluebutton-apps/src/main/java/org/bigbluebutton/core/api/IBigBlueButtonInGW.java
	bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/api/ValueObjects.scala
	bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/UsersApp.scala
	bigbluebutton-apps/src/main/webapp/WEB-INF/red5-web.xml
	bigbluebutton-client/locale/bg_BG/bbbResources.properties
	bigbluebutton-client/locale/cs_CZ/bbbResources.properties
	bigbluebutton-client/locale/cy_GB/bbbResources.properties
	bigbluebutton-client/locale/de_DE/bbbResources.properties
	bigbluebutton-client/locale/en_US/bbbResources.properties
	bigbluebutton-client/locale/es_419/bbbResources.properties
	bigbluebutton-client/locale/es_ES/bbbResources.properties
	bigbluebutton-client/locale/et_EE/bbbResources.properties
	bigbluebutton-client/locale/fa_IR/bbbResources.properties
	bigbluebutton-client/locale/fr_CA/bbbResources.properties
	bigbluebutton-client/locale/fr_FR/bbbResources.properties
	bigbluebutton-client/locale/hu_HU/bbbResources.properties
	bigbluebutton-client/locale/hy_AM/bbbResources.properties
	bigbluebutton-client/locale/it_IT/bbbResources.properties
	bigbluebutton-client/locale/ms_MY/bbbResources.properties
	bigbluebutton-client/locale/no_NO/bbbResources.properties
	bigbluebutton-client/locale/pl_PL/bbbResources.properties
	bigbluebutton-client/locale/pt_BR/bbbResources.properties
	bigbluebutton-client/locale/ru_RU/bbbResources.properties
	bigbluebutton-client/locale/sk_SK/bbbResources.properties
	bigbluebutton-client/locale/tr_TR/bbbResources.properties
	bigbluebutton-client/locale/uk_UA/bbbResources.properties
	bigbluebutton-client/locale/zh_CN/bbbResources.properties
	bigbluebutton-client/resources/config.xml.template
	bigbluebutton-client/resources/prod/MconfLive.html
	bigbluebutton-client/resources/prod/bbb-deskshare-applet-0.9.0.jar
	bigbluebutton-client/resources/prod/bbb-deskshare-applet-unsigned-0.9.0.jar
	bigbluebutton-client/resources/prod/lib/bbb_api_bridge.js
	bigbluebutton-client/resources/prod/lib/bbb_webrtc_bridge_sip.js
	bigbluebutton-client/resources/prod/lib/deployJava.js
	bigbluebutton-client/src/org/bigbluebutton/main/api/ExternalApiCallbacks.as
	bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModulesDispatcher.as
	bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as
	bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml
	bigbluebutton-client/src/org/bigbluebutton/main/views/CameraDisplaySettings.mxml
	bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml
	bigbluebutton-client/src/org/bigbluebutton/main/views/VideoHolder.mxml
	bigbluebutton-client/src/org/bigbluebutton/main/views/WebRTCEchoTest.mxml
	bigbluebutton-client/src/org/bigbluebutton/modules/chat/model/ChatConversation.as
	bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatBox.mxml
	bigbluebutton-client/src/org/bigbluebutton/modules/deskshare/view/components/DesktopPublishWindow.mxml
	bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/LayoutsCombo.mxml
	bigbluebutton-client/src/org/bigbluebutton/modules/phone/PhoneOptions.as
	bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/FlashCallManager.as
	bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/WebRTCCallManager.as
	bigbluebutton-client/src/org/bigbluebutton/modules/phone/views/components/ToolbarButton.mxml
	bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileUploadWindow.mxml
	bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as
	bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MediaItemRenderer.mxml
	bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml
	bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/business/VideoWindowItf.as
	bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/ToolbarButton.mxml
	bigbluebutton-client/src/org/bigbluebutton/modules/videodock/views/VideoDock.mxml
	bigbluebutton-config/web/index.html
	bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy
	bigbluebutton-web/src/java/org/bigbluebutton/api/MeetingService.java
2015-05-17 19:25:26 -03:00
Calvin Walton
c96f9f0cfe Add a function to compare BBB version numbers
This can be used to check if e.g. recording is from a 0.9.0 or newer server
2015-04-14 17:33:49 -04:00
Calvin Walton
e1e2d78e50 Skip the 'ser' repair if there are no webcam videos
This was causing the sanity check to fail.
2015-03-24 21:15:49 -03:00
Calvin Walton
34b13eb807 Attempt to repair red5 'ser' files in sanity script 2015-03-24 21:15:49 -03:00
Calvin Walton
694213cf9b Recording: Fix video EDL merge function on EDLs with recording marks applied
If the video EDL merge function is applied to an EDL that has already
been edited to apply recording marks, the merge function will change the
video start times to incorrect values on edit points during the timestamp
recalculation.

The fix is pretty simple; just pull in the timestamps from the entry that's
being merged in and apply them to the relevant videos.

This bug doesn't currently cause any issues in the BigBlueButton recording
scripts, since the existing code does the merge before the start/stop marks
are applied. But to avoid surprises later, it would be good to fix this.
2015-03-23 11:10:43 -04:00
Calvin Walton
5a2c7bae69 Fix beta recording update script
It had some leftover debug code that caused it to only convert the
first 10 recordings instead of all of them.

The name of the '.done' file is changed so the update will be re-run
automatically.
2015-03-20 17:48:05 -03:00
Calvin Walton
e75bb15ad0 Fix beta recording update script
It had some leftover debug code that caused it to only convert the
first 10 recordings instead of all of them.

The name of the '.done' file is changed so the update will be re-run
automatically.
2015-03-18 14:56:00 -04:00
Calvin Walton
eedbafa94f Adjust recording system to archive, but not process, recordings with no marks
This allows them to be preserved for a period of time, rather than be
deleted immediately. Useful for recovering recordings when someone forgot
to press the record button during the session.
2015-03-11 13:40:56 -04:00
Felipe Cecagno
cb50a8a304 Merge branch '090-presentation-export' into mconf-live0.6.2 2015-02-02 14:06:40 -02:00
Felipe Cecagno
ad25125b19 reverted back the previous implementation of presentation_export as process/publish scripts instead of just one publish script; now rap-worker cleans the workspace when the presentation format is published, so presentation dependet formats can execute in the next run 2015-02-02 14:06:20 -02:00
Felipe Cecagno
d1bcfe9189 do not run the publish script if the process script failed 2015-02-02 13:59:29 -02:00
Felipe Cecagno
1de10b2339 protect rap-worker to write the processing_time file when the directory isn't there yet 2015-02-02 13:58:57 -02:00
Calvin Walton
c90e5f8990 Skip the 'ser' repair if there are no webcam videos
This was causing the sanity check to fail.
2015-01-30 10:11:44 -05:00
Calvin Walton
c6f976db4b Attempt to repair red5 'ser' files in sanity script 2015-01-27 14:01:29 -05:00
Felipe Cecagno
8e12c909c5 Merge branch '090-encrypted-recording' into HEAD
Conflicts:
	bigbluebutton-web/src/java/org/bigbluebutton/api/MeetingService.java
	record-and-playback/core/Gemfile
	record-and-playback/deploy.sh
2015-01-21 15:51:29 -02:00
Calvin Walton
65bb9ce47e recording: Strip out the 'event:' from the beginning of urls in chat 2014-12-08 11:43:26 -05:00
Felipe Cecagno
f077cc1f98 do not generate a .fail file during the archive phase if no recording marks were detected 2014-11-26 15:37:19 -02:00
Felipe Cecagno
6b863595b2 removing the keys during the archive phase if there's no recording marks in the recording 2014-11-26 12:06:15 -02:00
Calvin Walton
213dc07c19 Merge pull request #428 from mconf/rap-publish-events
Rap publish events
2014-11-14 12:08:44 -02:00
Felipe Cecagno
1c143c74a1 refactored rap-worker so variable names make more sense than before 2014-11-13 23:10:22 -02:00
Felipe Cecagno
0cefee5534 now the rap scripts publish to redis pubsub (channel bigbluebutton:from-rap) when a rap phase begins and ends - it includes archive, sanity, post_archive, process, post_process, publish and post_publish; if there's more than one workflow, it should work without any modification 2014-11-12 17:28:33 -02:00
Felipe Cecagno
f52a0299a6 fixed the deploy script used to deploy the rap dev environment 2014-11-12 17:21:54 -02:00
Felipe Cecagno
b451b4cf84 removed god code on the record scripts 2014-11-12 17:20:10 -02:00
Fred Dixon
9cdc47d16d Merge pull request #426 from kepstin/recording-updates-2
Load bigbluebutton.yml from current path
2014-11-12 16:30:34 -02:00
Calvin Walton
30fdd13af8 Load bigbluebutton.yml from current path 2014-11-12 16:25:52 -02:00
Fred Dixon
48b9c5a01d Merge pull request #403 from kepstin/recording-updates-2
Version the playback files for the presentation recording format
2014-11-12 16:02:13 -02:00
Calvin Walton
98efa28316 Add a script to handle updating links in existing recordings
This adds the version number to the playback links so that
recordings select the correct version-specific playback support
files.

This script may be run automatically during upgrade; in that
case it should be run like

.../bbb-0.9-beta-recording-update --quiet

After copying recordings from an old BigBlueButton server, you
may want to manually re-run the script, and it takes the option
--force to recheck all recordings even if it has previously been
run.
2014-11-12 15:54:45 -02:00
Fred Dixon
fd06539c43 Merge pull request #423 from kepstin/recording-updates
Add delay before recording archiving to workaround Red5 race
2014-11-12 12:18:32 -02:00
Calvin Walton
961898c1e9 Add delay before recording archiving to workaround Red5 race
Right now there is a possibility that the rap-worker process might
see the recording.done file (written by bbb-web) prior to Red5 having
completed writing the video files to disk.

This happens most often when a meeting end api request is sent while a
webcam is visible.

Add a delay (currently 2 minutes) before the archive scripts are run
to work around the issue. Real fix is far more complicated...
2014-11-12 11:13:57 -02:00
Richard Alam
8f38fa1f30 - find audio wav files even if they are located in sub dirs 2014-10-08 13:50:41 -07:00
Calvin Walton
49b66d6eb6 Fix publish step failing when multiple recordings processed in one run
The logic for deleting the process done files was wrong, resulting in
the script (attempting and failing) deleting all of the done files for
all of the processed recordings after the publish completes for one of
them.

Fix the logic to only delete the process done file for the recording that
just completed publishing.
2014-10-08 11:08:22 -04:00
Felipe Cecagno
f68b0e4a16 cleanup 2014-09-01 17:53:57 -03:00
Felipe Cecagno
dd97b8f80c Merge branch 'encrypted-recording' into 090-encrypted-recording
Conflicts:
	bigbluebutton-web/src/groovy/org/bigbluebutton/api/RecordingServiceHelperImp.groovy
	bigbluebutton-web/src/java/org/bigbluebutton/api/MeetingService.java
2014-09-01 16:46:03 -03:00
Calvin Walton
913f4a59a0 Switch recording processing to use poppler instead of ghostscript 2014-08-28 14:52:23 -04:00
Calvin Walton
b03dbfe577 RaP: video processing robustness improvements
Makes it handle possibly corrupted video files with less chance of
breakage. Use features from newer ffmpeg release to simplify the video
trimming - in particular, using -ss as an input option is accurate now.
2014-08-28 13:07:26 -04:00
Calvin Walton
614617c2b9 Add the 'mkclean' step for audio-only recordings 2014-08-25 11:22:55 -04:00
Calvin Walton
48735ccc70 Set the audio 'original duration' during initial events parsing
This is the point at which the start/stop events for the audio are
correctly matched up with eachother; doing it later can give
incorrect results if an 'end recording' event was missing from
the events file.
2014-08-25 10:48:17 -04:00
Calvin Walton
c1bb493c10 Fix the 'timestretch' fixup so that seeking is done after stretching
The previous version may have the beginning of the audio off by a bit,
since it was seeking in the audio file to find the start before the
stretch was applied.
2014-08-22 17:07:07 -04:00
Calvin Walton
e5b5b5d49d Increase the audio bitrate in the video generation
Matches the corresponding change in the audio generation.
2014-08-22 16:58:31 -04:00
Calvin Walton
45162ce620 Explicitly use out0 in degenerate concat branch.
There is no i variable here, since there aren't multiple inputs to loop
over.
2014-08-22 16:43:35 -04:00
Calvin Walton
d53e7d21f3 Don't use the ffmpeg concat filter when only one audio segment
The concat filter requires at least 2 segments, it doesn't support
the degenerate case.
2014-08-22 16:41:16 -04:00
Calvin Walton
0841dd4233 Vorbis needs more bitrate for input with higher sample rate/stereo 2014-08-22 16:14:35 -04:00
Calvin Walton
2ac9de71a7 Use the correct timestamp for file start seek 2014-08-22 15:17:10 -04:00
Calvin Walton
7b205bdbf7 Rewrite audio processing to use ffmpeg
There's some fairly major changes here, including:

* All audio is resampled to 48kHz stereo on input, allowing files with
  non-standard or varying rates to be mixed
* The audio processing is now done in a single pass; ffmpeg reads all
  inputs, concatenates them, and outputs one file.
2014-08-22 15:04:14 -04:00
Richard Alam
c56fde0c42 Merge pull request #348 from speakserve/unify-version-number
Unify version number
2014-08-13 14:17:45 -04:00
Ghazi Triki
bb09eb6d75 After checking we bumped projects version and Flex locales to 0.9.0 with some fixes 2014-08-13 12:20:10 +01:00
Ghazi Triki
9a794f854a Bumped projects version and Flex locales to 0.9 2014-08-13 10:28:08 +01:00
Calvin Walton
8f7bf010fd Switch "post" scripts to be a drop-in directory. 2014-08-11 14:57:32 -04:00
Ghazi Triki
ac7af7dfea Manually bumped all application version to the correct actual version 0.9.0-dev 2014-07-31 17:42:38 +01:00
Calvin Walton
c73fe81e50 rap-worker: Add /usr/local/bin to the path. 2014-07-28 11:02:38 -04:00
Calvin Walton
c82a25f700 recording: Add a 'mkclean' step to video generation
The 'mkclean' tool reorganizes the encoded webm file to optimize it for
streaming. In particular, it moves the index to the start of the file.

This fixes streaming in Chrome, which otherwise had a very long delay
before playback started since it downloaded until it saw the index
before it started playback.

This needs a new dependency added to the bbb-record-core package to
pull in the mkclean tool.
2014-07-23 09:55:03 -04:00
Calvin Walton
86e8394e70 rap-worker: Ensure status directories are created
In some cases, it was attempting to create a status file in a directory
that did not exist yet.
2014-07-23 09:50:52 -04:00
Calvin Walton
11045c7f4a rap-worker: Set log level to 'INFO'
I had it on DEBUG temporarily for testing. The old version used ERROR,
but this made it print virtually no output which made diagnosing
issues difficult.
2014-07-21 15:00:29 -04:00
Calvin Walton
b91a54afa0 record core: Remove hardcoded ffmpeg path
The ffmpeg binary should be looked up using the normal PATH mechanism,
it might not always be installed in the same place.
2014-07-21 14:59:33 -04:00
Calvin Walton
efb44c9dd9 Rewrite rap-worker script in an optimized fashion
It now does much less directory reading, and performance should
scale far better with large numbers of recordings.

Semantics should be mostly unchanged, but there's greater use
of '.fail' files to mark errors, and '.done' files are now removed
after all of the following processing steps complete.

The rap worker no longer relies on processing scripts leaving
behind empty directories; those are now removed where appropriate.
2014-07-21 14:58:46 -04:00
Gustavo Salazar
67422a4450 set version in archive 2014-05-06 17:15:10 -05:00
Gustavo Salazar
fb013e751f support bbb_version in events.xml 2014-05-06 14:42:03 -05:00
Gustavo Salazar
ab648a5f73 pass only meeting id to post publish script 2014-05-05 18:27:26 -05:00
Gustavo Salazar
efda95fed6 delete temp files 2014-04-29 10:33:23 -05:00
Gustavo Salazar
b1e82fe58d post scripts for record and playback 2014-04-24 19:08:06 -05:00
Gustavo Salazar
4989b195f4 set absolute path to ffmpeg 2014-04-07 12:14:47 -07:00
Richard Alam
460dfb52bf - modify scripts so we can run it manually 2014-04-03 20:23:49 +00:00
Gustavo Salazar
ff96b6a97a absolute path to ffmpeg and ffprobe. 2014-03-31 18:13:52 -05:00
Fred Dixon
332824a42c Fixes so rap-worker.rb executes 2014-03-26 23:52:59 +00:00
Gustavo Salazar
99866d43a7 Print audio file name with problems. 2014-01-30 10:45:43 -05:00
Felipe Cecagno
3440ed0fe3 Merge branch 'v0.81' into record-button
Conflicts:
	bigbluebutton-client/branding/default/style/css/BBBDefault.css
	bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml
2014-01-14 14:05:41 -02:00
Felipe Cecagno
955f9edc99 fixing the issue of the whiteboard annotations not being shown in the proper slide; cleaning the environment (events.xml, recorded flag) when the session was recorded but the record button wasn't used 2013-12-02 13:57:05 -02:00
Calvin Walton
de0bac6f76 Skip corrupt/empty audio files when processing recording.
Now when an empty/corrupt audio file is detected, it will be replaced
with silence.
2013-10-18 11:39:03 -04:00
Calvin Walton
8facc0899e Check for corrupt video files, don't attempt to render them
A corrupt video file is defined as one where ffprobe either finds no
video stream, or it finds a video stream but cannot read any frames.
2013-10-11 11:19:40 -04:00
Richard Alam
92a31599f9 Merge pull request #270 from kepstin/presentation-resiliance
Make generation of png images for pdf pages more resiliant.
2013-10-04 12:50:22 -07:00
Calvin Walton
420b0b5573 Make generation of png images for pdf pages more resiliant.
We now use ghostscript to output pngs directly from the original pdf,
rather than using convert on the split pages. This should make corrupt
or strange pdfs less likely to cause issues.

As well, if a pdf page conversion fails (for any reason, including that
the original pdf is missing...) it will be logged, and a blank page
generated, and processing will continue.
2013-10-04 15:25:13 -04:00
Felipe Cecagno
8830951ac0 to specify the duration on ffmpeg we use -t instead of -to 2013-10-04 11:04:21 -03:00
Felipe Cecagno
00d0eb7b43 we only to the match between the video events and the record status events AFTER the webcam and deskshare merge 2013-10-04 11:03:49 -03:00
Gustavo Salazar
5dff55fb13 remove audio extension in webcam processing for matterhorn 2013-10-03 13:50:31 -05:00
Felipe Cecagno
d8b3375f48 we don't want to archive recordings in which there's no mark to start the recording; it would be the same as if the meeting would be created with record=false - the only difference is that the events are archived to recordings/raw/meeting_id/events.xml, and the recorded .done flag is created as well 2013-10-02 14:18:26 -03:00
Gustavo Salazar
ca6e32bc93 separate scaling and padding commands for deskshare 2013-10-01 17:11:23 -05:00
Gustavo Salazar
cfc6b3385b set sample rate 2013-10-01 17:05:55 -05:00
Gustavo Salazar
5d5d135557 set video quality 2013-10-01 16:53:39 -05:00
Felipe Cecagno
9a2c605866 Merge branch 'master' into multicamera-0.81
Conflicts:
	bigbluebutton-client/branding/default/style/css/BBBDefault.css
	bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/maps/VideoEventMapDelegate.as
2013-09-29 21:19:29 -03:00
Guilherme Augusto Dias
00d4c69f78 Fix audio processing issue
Fix an issue that occurs on processing recordings with no audio
2013-09-27 19:26:33 +00:00
Felipe Cecagno
32b52fefb8 start and stop recording marks are being considered in all medias (audio, video and deskshare); still needs to figure out the inconsistency when the last participant leaves the conference while it's being recorded, but couple of seconds later another participant joins the meeting; the problem is that after the last user leaves the conference, the scope is deleted so the recording flag is lost, and when the scope is created again, the recording flag has the default value, that is false; also, what should we do if the user doesn't click on the recording button? how to differentiate recordings made in a version with or without the recording button? 2013-09-25 00:34:15 -03:00
Felipe Cecagno
cf8b31591c this commit is an unfinished work; the new code that generates the audio and video files in the recording is being adapted to take into account the recording marks; the audio is done, but video and desktop sharing is still missing 2013-09-24 18:03:12 -03:00
Felipe Cecagno
aa597fe985 Merge branch 'master' of https://github.com/bigbluebutton/bigbluebutton into record-button-client
Conflicts:
	bigbluebutton-client/branding/default/style/css/BBBDefault.css
	bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml
	record-and-playback/core/lib/recordandplayback.rb
	record-and-playback/core/lib/recordandplayback/generators/audio_processor.rb
	record-and-playback/core/lib/recordandplayback/generators/events.rb
	record-and-playback/core/lib/recordandplayback/generators/video.rb
	record-and-playback/presentation/scripts/publish/presentation.rb
2013-09-24 15:03:44 -03:00
Felipe Cecagno
33d98bbff2 implemented the record button both client-side and server-side; still needs more work on the processing scripts; still needs to update the record button icons 2013-09-23 18:33:30 -03:00
Felipe Cecagno
54a34b4475 Merge branch 'record-button' of github.com:fcecagno/bigbluebutton into record-button
Conflicts:
	record-and-playback/core/lib/recordandplayback/generators/events.rb
2013-09-18 18:02:18 -03:00
Calvin Walton
ca9a4c2b92 Bump the max difference for audio stretch up to 5% 2013-08-26 13:33:23 -04:00
Calvin Walton
c2884bdb9d Add missing license header to edl.rb 2013-08-26 11:44:22 -04:00
Calvin Walton
42e195bbe8 Rewrite the audio/video encoding components for BigBlueButton.
I've been working on this for a while, and it's adapted from code that
has been fairly well-tested on a wide variety of recordings. I've found
it to do a more accurate job of combining multiple webcam files, and it
should be more accurate in the audio as well.

Another key feature is that it does fewer re-encoding steps during video
processing, which should both speed it up and hopefully improve quality.
The settings on the VP8 encoder have been tuned somewhat as well.
2013-08-26 11:20:33 -04:00
Calvin Walton
0fa60e2bc3 Use the old sox trim syntax for the version on ubuntu lucid 2013-08-15 13:36:52 -04:00
Calvin Walton
6b56c4103d Correct variable name to refer to original audio length 2013-08-15 13:34:19 -04:00
Calvin Walton
d2afbe9383 Convert timestamps to numbers for subtraction 2013-08-15 13:30:36 -04:00
Calvin Walton
acbd0e5b7e Stretch freeswitch audio to match event timing
This helps maintain audio sync with video and events when freeswitch's
internal timing differs from red5's.
2013-08-14 17:25:10 -04:00
Guilherme Augusto Dias
daa32dab41 Fix slicing process
Fix events timestamp and duration
2013-08-01 13:59:02 +00:00
Guilherme Augusto Dias
dc249bf347 Slice timeline
Slice timeline according to START/STOP record events
2013-07-29 16:45:56 +00:00
Guilherme Augusto Dias
1122f7d298 Fix playback host address
Fix playback host address on configuration files
2013-07-29 16:28:04 +00:00
Calvin Walton
a5091ba3e8 RaP: Remove the ffmpeg version check, hardcode arguments for 0.11+
For BigBlueButton 0.81, we just require that you install ffmpeg 0.11.x
for recordings to function correctly. I'll also add a check to bbb-conf
to verify that the correct ffmpeg is available.
2013-07-23 15:46:47 -04:00
Guilherme Augusto Dias
04ff2f2074 Slicing audio events list
The event processing method slices the audio events list according to record events
2013-07-18 14:53:33 +00:00
Guilherme Augusto Dias
f0a86a8ae9 Changed trim audio method
The old audio file is kept and it's possible to set the start mark
2013-07-18 13:41:29 +00:00
Guilherme Augusto Dias
d402f95776 Handling START/STOP record events
Changed Events module: possible to retrieve and match record events
2013-07-18 13:15:09 +00:00
Calvin Walton
ecfe8b7db4 RaP: Adjust the 'convert' command to make opaque images
This forces a background colour of white on the generated png images for
slides in the slides and presentation recording formats. Fixes Issue
1588.
2013-07-17 18:08:51 -04:00
Gustavo Salazar
bed598ca7a remove events and files for webcam streams with length zero 2013-07-15 15:22:39 -05:00
Felipe Cecagno
6f7baabc3c starting to develop the record button using part of guga's code (https://github.com/gugat/bbb-record-button) 2013-06-17 14:23:45 -03:00
Felipe Cecagno
80a8792597 Merge branch 'master' of github.com:bigbluebutton/bigbluebutton into sync-playback 2013-07-12 22:23:52 -03:00
Gustavo Salazar
9b5e42223f Accept meeting id to create manifest.xml 2013-07-03 15:42:21 -05:00
Felipe Cecagno
e8b9ffab4d Merge branch 'master' of git://github.com/bigbluebutton/bigbluebutton into sync-playback 2013-07-01 15:33:09 -03:00
Felipe Cecagno
b176ef090f fixing the incorrect handling of the last timeline event on video processing 2013-07-01 15:32:25 -03:00
Gustavo Salazar
d63fbac298 Create missing start events for webcam streams fix #1561 2013-06-20 15:45:26 -05:00
Felipe Cecagno
fea7486ae3 implemented the possibility to include the desktop sharing streams to the presentation playback; it composes the presentation video file just like the other video streams, with the difference that while the screen is being sharing, it appears as the unique video stream in the presentation video - when the presenter stops sharing his screen, the other videos populate the video display;
also, the output video resolution is modified to the highest screen resolution shared during the conference, independently on the output video resolution set by the user; it was done to preserve the quality of the desktop sharing image; if there's no desktop sharing, the output video resolution is respected
2013-06-14 17:50:39 -03:00
Felipe Cecagno
fda4e203f9 extracted FFMPEG_LOG_LEVEL to a module constant, and use it in all FFmpeg commands; now it's easy to increase the log level during development 2013-06-14 17:44:10 -03:00
Felipe Cecagno
8ca4e949aa modified the BigBlueButton.execute method so it can raise an exception when the command passed didn't finish successfully; you can optionally pass fail_on_error=false so it won't raise an exception 2013-06-14 17:39:29 -03:00
Felipe Cecagno
ced61d3fba rap-worker now keeps track of the processing time of a recording; a file called processing_time is generated during the process phase, and this information is added to metadata.xml when the recording is published - this information isn't retrieved by getRecordings because no modification was done on bbb-web to include this information, but at least it's there so the sysadmin can check how long does a recording take to get processed 2013-06-13 17:13:20 -03:00
Felipe Cecagno
53c071ddc3 ref #1516
Refactored the code that generates the video file used in the presentation playback. The problem with the sync of video sources was related to problems of precision inside FFmpeg (sometimes the script runs FFmpeg to trim video files, and the output video file trimmed sometimes was 3+ seconds bigger or smaller than the requested).
Also it's a little more modular, so it will be easier to expand functionality. The processing steps are more explicit now, and the logs are better now to understand the final output.
A new parameter on presentation.yml was added to enable the admin to add an offset for the audio stream - this is mainly useful when the session ran with h264, because the video takes longer for the client to encode, and then in the recording we can see the huge gap between audio and video.
2013-06-13 17:10:52 -03:00
Gustavo Salazar
0aa1c9867c support ingest for matterhorn 1.4 2013-06-07 16:27:14 -05:00
Gustavo Salazar
2ae224765e a log file by meeting in archive phase 2013-04-29 16:03:21 -05:00
Gustavo Salazar
4c60948ae0 Merge pull request #77 from fcecagno/fixing-video-processing
fixing the start-stop camera events matches, so now even if there's no s...
2013-04-28 17:40:50 -07:00
Gustavo Salazar
0166939205 use the 'Crop Box' of pdf page 2013-04-05 14:00:13 -05:00
Gustavo Salazar
7fe05d349f sanity check for webcam and deskshare 2013-04-04 15:08:49 -05:00
Felipe Cecagno
213b9793a8 updating record-and-playback from master 2013-02-28 16:45:09 -03:00
Felipe Cecagno
0afa3511ae included the fastimage gem to the record and playback Gemfile 2013-02-22 22:17:53 -03:00
Gustavo Salazar
406e467c8b set audio sample rate according to the recorded audio file 2013-02-13 14:42:23 -05:00
Felipe Cecagno
d8734f6606 fixing identation 2013-02-08 16:22:09 -02:00
Felipe Cecagno
ee1bfee1fb changed the behavior of BigBlueButton.execute so the caller can check if the execution was successfully or not 2013-02-08 16:07:52 -02:00
Felipe Cecagno
420f5c976b adding a patch waiting to be pulled on BigBlueButton master (https://github.com/bigbluebutton/bigbluebutton/pull/77) 2013-02-06 17:44:07 -02:00
Felipe Cecagno
8531534bc7 copied the entire record-and-playback module of BigBlueButton master (pre 0.81) to the v0.8 tag; the only file merged is record-and-playback/core/lib/recordandplayback.rb 2013-02-04 15:34:54 -02:00
Gilson Souza
e1207b60e4 corrected some issues 2013-02-04 13:34:00 -02:00
Gilson Souza
c7d4146c25 Adding mconf scripts to process and publish records. 2013-02-04 13:31:57 -02:00
Gustavo Salazar
c761ef0bf1 generate tail padding when processing audio 2013-01-23 12:44:20 -05:00
Felipe Cecagno
5176e508dd fixing the start-stop camera events matches, so now even if there's no stop video event, the video processing will run smoothly 2012-12-06 21:28:13 -02:00
Gustavo Salazar
5d53bdfd4a Send one video stream(webcam OR deskshare) to Matterhorn server 2012-10-24 13:40:41 -05:00
Gustavo Salazar
ac32c59029 Extract pdf page in a temp dir 2012-10-23 13:53:43 -05:00
Gustavo Salazar
f3c8477b27 Fixed frame rate in mpg file 2012-09-28 11:52:35 -05:00
Gustavo Salazar
aa3350115d Ask for ffmpeg version before using loop parameter. 2012-09-25 20:08:52 -05:00
Gustavo Salazar
2462802d54 Change ffmpeg commands to support version 0.11.2 2012-09-21 17:27:11 -05:00
gustavo salazar
6d90e31b85 Set playback_host in bigbluebutton.yml 2012-09-10 16:12:10 -05:00
Gustavo Salazar
f5ee8b6cbf Update license. 2012-09-04 16:42:13 -05:00
Markos Calderon
5bb870b385 Merge branch 'master' of https://github.com/bigbluebutton/bigbluebutton into add-sanity-check 2012-08-30 16:13:44 -05:00
Gustavo Salazar
a8fae3bbf9 Ask if duration of video is 0. 2012-08-28 14:38:23 -05:00
Gustavo Salazar
63c421abd5 Remove options used by libx264. 2012-08-27 17:34:08 -05:00
Felipe Cecagno
f9d7f11d63 reverted the code used to process the video for the matterhorn integration; many fixes on the video processing for the new playback format "presentation"; now it's possible to set the output video resolution for the presentation playback - it's VGA by default but could be set to HD 2012-08-27 12:41:26 -03:00
Markos Calderon
0c9e45682e added failed status 2012-08-21 16:55:41 -05:00
Markos Calderon
d75ca5dca4 finish testing of sanity check 2012-08-20 18:12:58 -05:00
Markos Calderon
9d9bf10e81 pending changes in rap-worker 2012-08-15 19:10:29 -05:00
Markos Calderon
7fb265e756 adding sanity check 2012-08-13 15:22:53 -05:00
Gustavo Salazar
a85e8c144e Use webm for webcam in playback. 2012-08-07 16:36:52 -05:00
Gustavo Salazar
e523dbf9e6 Merge pull request #55 from mconf/video-playback-into-master
Video playback
2012-08-03 09:08:25 -07:00
Markos Calderon
2e8715988b Fix for event urls and support for https 2012-08-01 18:55:50 -05:00
Felipe Cecagno
e8dc780c37 integrated the video playback into master, but the whiteboard events playback, as well as the presentation playback, is not functional yet - it seems that the writing.js is broken on master, tried to fix it without success 2012-08-01 17:40:58 -03:00
Richard Alam
4ee4eb79cc - strip controls chars from chat messages as it fails the process of recordings 2012-05-12 23:17:38 -07:00
Richard Alam
93b274f4c8 - fix http://code.google.com/p/bigbluebutton/issues/detail?id=1087 2012-05-16 19:11:00 +00:00
Richard Alam
7b1ff2d4bb - add utf-8 encoding magic comment to recording ruby scripts
http://blog.grayproductions.net/articles/understanding_m17n
2012-05-03 18:56:01 +00:00
Gustavo Salazar
6c85a36005 Convert timestamp to float so when dividing the result will contain
decimals
2012-02-17 13:02:52 -05:00
Markos Calderon
2f7a2afe9c fix for video processing in long meetings 2012-01-26 10:30:57 -08:00
Richard Alam
ef85442a1b - trim audio file when they overlap 2012-01-18 17:29:14 +00:00
Richard Alam
3659effee3 Fix http://code.google.com/p/bigbluebutton/issues/detail?id=982
- if the length from header info is zero (corrupted header http://comments.gmane.org/gmane.comp.audio.sox/2637)
   determine length from file size and then fix the file to have proper length in header info.
2012-01-16 21:03:04 +00:00
Markos Calderon
4a797ecdc1 Merge remote branch 'gugat/issue1106' 2012-01-06 09:17:06 -08:00
gugat
d685a5456a Return silence with lenght of the recording when there is not audio file. 2012-01-06 11:35:02 -05:00
gugat
ea2c453807 Add info log messages from each method of generators
Add info log messages from publish script of slides. The log was empty before, was just created.
Add --check option to bbb-record. Taking same logic from bbb-conf and adding info about the failed task with each error.
2012-01-05 17:07:34 -05:00
Markos Calderon
77f664c6bd checking dirs instead of done files 2011-12-07 13:18:21 -08:00
Markos Calderon
c95a8bc56a adding a checking in rap-worker 2011-12-06 12:22:35 -08:00
Markos Calderon
e5d511239a fixed issue 1074 2011-11-22 16:04:08 -08:00
gugat
381e120c65 Use ffmpeg to concatenate videos. Mencoder command hangs with popen. 2011-11-21 09:03:41 -08:00
Fred Dixon
a3849c9a52 Removed old comments from rap-worker.rb 2011-11-20 11:16:11 -08:00
Richard Alam
62c3b220a1 change silence limit from 10 to 60 minutes as some people join the meeting very early
and thus prevents the recording from being processed.
2011-11-15 10:19:12 -05:00
Markos Calderon
7b511015e2 fix for jpg images in playback 2011-11-10 08:59:41 -08:00
Fred Dixon
ccc87f0831 Temporarily disabled messages 'Skipping ... ' from record and playback scripts as they generate large log files 2011-09-27 08:49:06 -07:00
gugat
46e6598cc3 Improve quality in images 2011-09-16 10:47:58 -07:00
Richard Alam
5cb7eb6d8a - locate audio files in the process dir not in the original loc (/var/freeswitch/meetings) because
if the admin cleans up that dir, determining recording length from file will fail.
2011-09-08 15:43:39 +00:00
Richard Alam
162dd2226f - remove duplicate audio events 2011-09-07 20:51:07 +00:00
Fred Dixon
1d9d646e36 Testing bbb-record-core with the latest version of Ruby. SystemTimer is not needed in 1.9.2 2011-09-05 12:37:34 -07:00
Richard Alam
bf54da8be4 - remove duplicate audio events 2011-09-02 20:12:34 +00:00
Richard Alam
b59fc8d3aa - use start_record_timestamp, file, bridge to compare if 3 start events are eql? 2011-09-02 18:14:44 +00:00
Richard Alam
b95d3166ca - don't process duplicate audio events 2011-09-02 15:20:36 +00:00
Richard Alam
c660ab9651 - add more logging on padding issue 2011-08-18 11:01:24 -04:00
Richard Alam
9057cd79c1 -remove audio padding at the end of the recording 2011-08-18 10:46:03 -04:00
Marco Calderon
a32992946c Merge branch 'master' of github.com:bigbluebutton/bigbluebutton 2011-08-16 08:18:09 +00:00
Marco Calderon
28ad4f6ce8 Cleanup script 2011-08-16 08:17:21 +00:00
Richard Alam
f6d7540ff5 - add some doc on why we limit length of silence file 2011-08-15 17:28:53 -04:00
Richard Alam
1c92d22b0d fix typo 2011-08-15 15:32:03 -04:00
Richard Alam
e59cb41e7f - raise exception when length of audio is 0 and when the silence is grater than 10 minutes. 2011-08-15 15:27:25 -04:00
gugat
915acb8169 Overwrite eql? in AudioRecordingEvent class
and use uniq! in the array start_events in the method
start_audio_recording_events
2011-07-29 02:02:43 -05:00
Richard Alam
76dab31f61 - don't raise an exception when executing external command and some text gets printed on stderr. Just log the error and move on. 2011-08-05 16:48:19 +00:00
gugat
0593ebdc14 Avoid squished deskshare video 2011-07-24 19:17:53 -05:00
gugat
59031812be Add logger in rap-worker.rb 2011-07-20 20:13:22 -05:00
Richard Alam
e97a57e813 - make imagemagick generate smaller PNG files.... 2011-07-19 11:36:03 -04:00
gugat
e721dd19a1 Require open4 in recordandplayback.rb
Add open4 to Gemfile
2011-07-15 17:09:11 -05:00
gugat
c56facd64c Change image presentations (gif, jpg) to png, so they will be played properly 2011-07-14 18:51:51 -05:00
gugat
21eed7e1d4 Merge branch 'master' of git://github.com/bigbluebutton/bigbluebutton into respaldo 2011-07-11 14:26:47 -05:00
Fred Dixon
c431169bd7 Changed redis host for bigbluebutton.yml to 127.0.0.1 2011-07-10 08:38:12 -07:00
gugat
12bdbf8475 Add logi to check redis port an host 2011-07-04 20:01:41 -05:00
gugat
428dbe84f2 Create script with logic we need to add for record and playback
Based in bbb-conf create functions to check errors in record and playback log files
2011-06-30 21:17:01 -05:00
gugat
b247c749a8 Add log info to BigBlueButton.execute : exitstatus, succeed? , exited?
Change IO.popen to  BigBlueButton.execute in /core/scripts/rap-worker.rb (2)
2011-06-29 17:39:25 -05:00
gugat
1c45591583 Change BigBlueButton.execute to use Open4 2011-06-29 00:08:58 -05:00
gugat
b72e140be9 Execute mencoder command with BigBlueButton.execute in archive.rb 2011-06-28 19:35:45 +00:00
gugat
9526a5c713 Merge branch 'master' of git://github.com/bigbluebutton/bigbluebutton into respaldo 2011-06-28 15:34:21 +00:00
Richard Alam
7f4d38b5a6 - process metdata properly and simple playback 2011-06-26 10:56:03 -04:00
Richard Alam
d044221d70 - start implementing get recording api 2011-06-22 15:53:27 -04:00
gugat
794d419631 Substitute IO.popen by BigBlueButton.execute in presentation.rb and video.rb 2011-05-25 07:06:36 +00:00
gugat
25bb768026 Return output in BigBlueButton.execute
Use BigBlueButton.execute in determine_length_of_audio_from_file in audio.rb
2011-05-25 03:50:05 +00:00
gugat
9038522311 Change BigBlueButton.execute to log error properly 2011-05-25 00:43:48 +00:00
Richard Alam
ef40a1cb28 - cleanup
- make the length of the blank video into a float instead of int. This way we hope to have
   a blank video with 8.74sec long instead of 8sec long.
2011-06-15 12:20:10 -04:00
Richard Alam
12c5b34cea - store start and stop webcam events by sending message from video app
instead of relying on status event
2011-06-13 14:32:07 -04:00
Richard Alam
1af29981fd - move the rap core god conf into default god/conf 2011-06-08 21:14:52 -04:00
Fred Dixon
b5cd824a29 Added lsb-section to record and playback god init.d script 2011-06-08 15:28:22 -07:00
Richard Alam
e67534997b - move so that it gets built as part of bbb-record-core 2011-06-08 17:35:15 -04:00
Richard Alam
f2c603c1a5 - create god scripts to manage record-and-processing script 2011-06-07 14:54:38 -04:00
Richard Alam
350d71b53e - setup logger properly 2011-06-06 16:09:53 -04:00
Richard Alam
f2b6b07112 - no need to "sudo -u tomcat6" as main script already runs as tomcat6 2011-06-06 14:58:16 -04:00
Richard Alam
9609de20a9 - run as tomcat6 user 2011-06-06 14:45:25 -04:00
Richard Alam
870acbf50e - start automating archive, ingest, publish 2011-06-06 14:42:38 -04:00
Richard Alam
87a53dce50 - archive only new recordings 2011-06-06 13:38:16 -04:00
Richard Alam
d5eaaee2b7 - ffmpeg that comes with Ubuntu 10.04 segfaults when using padbottom/top/left/right
- need to upgrade to newest ffmpeg based on instructions in http://ubuntuforums.org/showpost.php?p=9868359&postcount=1289
2011-06-06 12:08:05 -04:00
Richard Alam
6b6b5bea1f - look into recorded .done file to see if the meeting needs to be archived 2011-06-03 12:17:51 -04:00
Richard Alam
1bb6e20291 - renamed ingenst-and-processing script
- log when saving metadata
2011-06-03 11:15:24 -04:00
Richard Alam
6d82190ba5 - paddings must be even 2011-06-01 18:27:27 -04:00
Richard Alam
d142763b58 - use pad_top/bottom/left/right options for ffmpeg that comes with Ubuntu 10.04 2011-06-01 18:16:50 -04:00
Richard Alam
6208587706 - update SystemTimer to 1.2.3 2011-05-27 19:45:05 -04:00
Richard Alam
c7c69296f8 - scale webcams to fit 640x480 while maintaining aspect ratio 2011-05-26 09:56:59 -04:00
Richard Alam
6f314df412 - make the deskshare fit into 640x480 frame size while maintaining aspect ratio 2011-05-25 16:06:16 -04:00
Richard Alam
353b4e6868 - fix matching start and stop events 2011-05-25 13:20:03 -04:00
Richard Alam
26bf7f5344 - fix problem where event name isn't extracted from redis properly 2011-05-25 10:17:14 -04:00
Richard Alam
d5149a168c have metadata as attribs instead of nodes 2011-05-24 18:29:16 -04:00