33
33
LOGFILE = LOGS + meetingId + '.log'
34
34
ffmpeg .set_logfile (LOGFILE )
35
35
source_events = '/var/bigbluebutton/recording/raw/' + meetingId + '/events.xml'
36
+ # Deskshare
37
+ SOURCE_DESKSHARE = source_dir + 'deskshare/deskshare.webm'
38
+ TMP_DESKSHARE_FILE = temp_dir + 'deskshare.mp4'
39
+
36
40
37
41
def extract_timings (bbb_version ):
38
42
doc = minidom .parse (events_file )
@@ -42,14 +46,15 @@ def extract_timings(bbb_version):
42
46
43
47
for image in doc .getElementsByTagName ('image' ):
44
48
path = image .getAttribute ('xlink:href' )
49
+
45
50
if j == 0 and '2.0.0' > bbb_version :
46
51
path = u'/usr/local/bigbluebutton/core/scripts/logo.png'
47
52
j += 1
48
53
49
54
in_times = str (image .getAttribute ('in' )).split (' ' )
50
55
out_times = image .getAttribute ('out' ).split (' ' )
51
56
52
- temp = float ( out_times [len (out_times ) - 1 ] )
57
+ temp = float (out_times [len (out_times ) - 1 ])
53
58
if temp > total_length :
54
59
total_length = temp
55
60
@@ -67,18 +72,17 @@ def create_slideshow(dictionary, length, result, bbb_version):
67
72
times = dictionary .keys ()
68
73
times .sort ()
69
74
75
+ ffmpeg .webm_to_mp4 (SOURCE_DESKSHARE , TMP_DESKSHARE_FILE )
76
+
77
+ print >> sys .stderr , "-=create_slideshow=-"
70
78
for i , t in enumerate (times ):
71
- print >> sys .stderr , "_create_slideshow_"
72
- print >> sys .stderr , (i , t )
79
+ # print >> sys.stderr, (i, t)
73
80
74
- #if i < 1 and '2.0.0' > bbbversion:
81
+ # if i < 1 and '2.0.0' > bbbversion:
75
82
# continue
76
83
77
-
78
- print >> sys .stderr , "_create_slideshow_after_skip_"
79
- print >> sys .stderr , (i , t )
80
-
81
84
tmp_name = '%d.mp4' % i
85
+ tmp_ts_name = '%d.ts' % i
82
86
image = dictionary [t ]
83
87
84
88
if i == len (times ) - 1 :
@@ -87,13 +91,20 @@ def create_slideshow(dictionary, length, result, bbb_version):
87
91
duration = times [i + 1 ] - t
88
92
89
93
out_file = temp_dir + tmp_name
94
+ out_ts_file = temp_dir + tmp_ts_name
95
+
96
+ if "deskshare.png" in image :
97
+ print >> sys .stderr , (0 , i , t , duration )
98
+ ffmpeg .trim_video_by_seconds (TMP_DESKSHARE_FILE , t , duration , out_file )
99
+ ffmpeg .mp4_to_ts (out_file , out_ts_file )
100
+ else :
101
+ print >> sys .stderr , (1 , i , t , duration )
102
+ ffmpeg .create_video_from_image (image , duration , out_ts_file )
90
103
91
- ffmpeg .create_video_from_image (image , duration , out_file )
92
- f .write ('file ' + out_file + '\n ' )
104
+ f .write ('file ' + out_ts_file + '\n ' )
93
105
f .close ()
94
106
95
107
ffmpeg .concat_videos (video_list , result )
96
-
97
108
os .remove (video_list )
98
109
99
110
@@ -114,16 +125,16 @@ def rescale_presentation(new_height, new_width, dictionary, bbb_version):
114
125
times = dictionary .keys ()
115
126
times .sort ()
116
127
for i , t in enumerate (times ):
117
- # ?
118
- print >> sys .stderr , "_rescale_presentation_"
119
- print >> sys .stderr , (i , t )
128
+ # ?
129
+ # print >> sys.stderr, "_rescale_presentation_"
130
+ # print >> sys.stderr, (i, t)
120
131
121
132
if i < 1 and '2.0.0' > bbb_version :
122
133
continue
123
134
124
- print >> sys .stderr , "_rescale_presentation_after_skip_"
125
- print >> sys .stderr , (i , t )
126
-
135
+ # print >> sys.stderr, "_rescale_presentation_after_skip_"
136
+ # print >> sys.stderr, (i, t)
137
+
127
138
ffmpeg .rescale_image (dictionary [t ], new_height , new_width , dictionary [t ])
128
139
129
140
@@ -170,14 +181,14 @@ def prepare(bbb_version):
170
181
171
182
shutil .copytree ("presentation" , temp_dir + "presentation" )
172
183
dictionary , length = extract_timings (bbb_version )
173
- #debug
184
+ # debug
174
185
print >> sys .stderr , "dictionary"
175
186
print >> sys .stderr , (dictionary )
176
187
print >> sys .stderr , "length"
177
188
print >> sys .stderr , (length )
178
189
dims = get_different_presentations (dictionary )
179
- #debug
180
- print >> sys .stderr , "dims"
190
+ # debug
191
+ print >> sys .stderr , "dims"
181
192
print >> sys .stderr , (dims )
182
193
check_presentation_dims (dictionary , dims , bbb_version )
183
194
return dictionary , length , dims
@@ -190,8 +201,8 @@ def get_different_presentations(dictionary):
190
201
presentations = []
191
202
dims = {}
192
203
for t in times :
193
- #?if t < 1:
194
- #? continue
204
+ # ?if t < 1:
205
+ # ? continue
195
206
196
207
name = dictionary [t ].split ("/" )[7 ]
197
208
# debug
@@ -216,6 +227,7 @@ def serve_webcams():
216
227
if os .path .exists ('video/webcams.webm' ):
217
228
shutil .copy2 ('video/webcams.webm' , './download/' )
218
229
230
+
219
231
def copy_mp4 (result , dest ):
220
232
if os .path .exists (result ):
221
233
shutil .copy2 (result , dest )
@@ -226,21 +238,23 @@ def zipdir(path):
226
238
zipf = zipfile .ZipFile (filename , 'w' , zipfile .ZIP_DEFLATED )
227
239
for root , dirs , files in os .walk (path ):
228
240
for f in files :
229
- zipf .write (os .path .join (root , f ) )
241
+ zipf .write (os .path .join (root , f ))
230
242
zipf .close ()
231
243
232
- #Create symlink instead so that files are deleted
233
- #if not os.path.exists('/var/bigbluebutton/playback/presentation/download/' + filename):
244
+ # Create symlink instead so that files are deleted
245
+ # if not os.path.exists('/var/bigbluebutton/playback/presentation/download/' + filename):
234
246
# os.symlink(source_dir + filename, '/var/bigbluebutton/playback/presentation/download/' + filename)
235
247
248
+
236
249
def bbbversion ():
237
250
global bbb_ver
238
251
bbb_ver = 0
239
252
s_events = minidom .parse (source_events )
240
253
for event in s_events .getElementsByTagName ('recording' ):
241
- bbb_ver = event .getAttribute ('bbb_version' )
254
+ bbb_ver = event .getAttribute ('bbb_version' )
242
255
return bbb_ver
243
256
257
+
244
258
def main ():
245
259
sys .stderr = open (LOGFILE , 'a' )
246
260
print >> sys .stderr , "\n <-------------------" + time .strftime ("%c" ) + "----------------------->\n "
@@ -262,12 +276,13 @@ def main():
262
276
ffmpeg .trim_audio_start (dictionary , length , audio , audio_trimmed )
263
277
ffmpeg .mux_slideshow_audio (slideshow , audio_trimmed , result )
264
278
serve_webcams ()
265
- #zipdir('./download/')
279
+ # zipdir('./download/')
266
280
copy_mp4 (result , source_dir + meetingId + '.mp4' )
267
281
finally :
268
282
print >> sys .stderr , "Cleaning up temp files..."
269
283
cleanup ()
270
284
print >> sys .stderr , "Done"
271
285
286
+
272
287
if __name__ == "__main__" :
273
288
main ()
0 commit comments