104 lines
3.4 KiB
Ruby
104 lines
3.4 KiB
Ruby
# Set encoding to utf-8
|
|
# encoding: UTF-8
|
|
|
|
#
|
|
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
|
#
|
|
# Copyright (c) 2019 BigBlueButton Inc. and by respective authors (see below).
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify it under the
|
|
# terms of the GNU Lesser General Public License as published by the Free Software
|
|
# Foundation; either version 3.0 of the License, or (at your option) any later
|
|
# version.
|
|
#
|
|
# BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Lesser General Public License along
|
|
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
|
|
# For DEVELOPMENT
|
|
# Allows us to run the script manually
|
|
# require File.expand_path('../../../../core/lib/recordandplayback', __FILE__)
|
|
|
|
# For PRODUCTION
|
|
require File.expand_path('../../../lib/recordandplayback', __FILE__)
|
|
|
|
require 'rubygems'
|
|
require 'optimist'
|
|
require 'yaml'
|
|
require 'json'
|
|
|
|
opts = Optimist::options do
|
|
opt :meeting_id, "Meeting id to archive", :type => String
|
|
end
|
|
|
|
meeting_id = opts[:meeting_id]
|
|
|
|
# This script lives in scripts/archive/steps while properties.yaml lives in scripts/
|
|
props = YAML::load(File.open('../../core/scripts/bigbluebutton.yml'))
|
|
|
|
recording_dir = props['recording_dir']
|
|
raw_archive_dir = "#{recording_dir}/raw/#{meeting_id}"
|
|
BigBlueButton.logger.info("Setting process dir")
|
|
BigBlueButton.logger.info("setting captions dir")
|
|
captions_dir = props['captions_dir']
|
|
|
|
log_dir = props['log_dir']
|
|
|
|
target_dir = "#{recording_dir}/process/presentation/#{meeting_id}"
|
|
|
|
# Generate captions.json for API
|
|
def create_api_captions_file(captions_meeting_dir)
|
|
BigBlueButton.logger.info("Generating closed captions for API")
|
|
|
|
captions = JSON.load(File.new("#{captions_meeting_dir}/captions_playback.json"))
|
|
captions_json = []
|
|
captions.each do |track|
|
|
caption = {}
|
|
caption[:kind] = :captions
|
|
caption[:label] = track['localeName']
|
|
caption[:lang] = track['locale']
|
|
caption[:source] = :live
|
|
captions_json << caption
|
|
end
|
|
|
|
File.open("#{captions_meeting_dir}/captions.json", "w") do |f|
|
|
f.write(captions_json.to_json)
|
|
end
|
|
end
|
|
|
|
if not FileTest.directory?(target_dir)
|
|
|
|
captions_meeting_dir = "#{captions_dir}/#{meeting_id}"
|
|
|
|
FileUtils.mkdir_p "#{log_dir}/presentation"
|
|
logger = Logger.new("#{log_dir}/presentation/process-#{meeting_id}.log", 'daily')
|
|
BigBlueButton.logger = logger
|
|
BigBlueButton.logger.info("Processing script captions.rb")
|
|
FileUtils.mkdir_p target_dir
|
|
|
|
begin
|
|
BigBlueButton.logger.info("Generating closed captions")
|
|
FileUtils.mkdir_p captions_meeting_dir
|
|
ret = BigBlueButton.exec_ret('utils/gen_webvtt', '-i', raw_archive_dir, '-o', captions_meeting_dir)
|
|
if ret != 0
|
|
raise "Generating closed caption files failed"
|
|
end
|
|
|
|
FileUtils.cp("#{captions_meeting_dir}/captions.json", "#{captions_meeting_dir}/captions_playback.json")
|
|
create_api_captions_file(captions_meeting_dir)
|
|
FileUtils.rm "#{captions_meeting_dir}/captions_playback.json"
|
|
|
|
rescue Exception => e
|
|
BigBlueButton.logger.error(e.message)
|
|
e.backtrace.each do |traceline|
|
|
BigBlueButton.logger.error(traceline)
|
|
end
|
|
exit 1
|
|
end
|
|
|
|
end
|