90 logger.warning("Can't find requested media {0}!".format(media_id)) |
90 logger.warning("Can't find requested media {0}!".format(media_id)) |
91 return |
91 return |
92 # extract converter output |
92 # extract converter output |
93 logger.debug("Starting conversion process for {0!r} to {1}".format(media, media_format)) |
93 logger.debug("Starting conversion process for {0!r} to {1}".format(media, media_format)) |
94 manager = ITransactionManager(media) |
94 manager = ITransactionManager(media) |
95 for loop, conversion in converter.convert(media): |
95 for width, conversion in converter.convert(media): |
96 logger.debug("Finished FFmpeg conversion process. {0} bytes output".format(len(conversion))) |
96 logger.debug("Finished FFmpeg conversion process to {0}, {1} bytes output".format(media_format, |
|
97 len(conversion))) |
97 # add conversion in a transaction attempts loop |
98 # add conversion in a transaction attempts loop |
98 for attempt in manager.attempts(): |
99 if len(conversion) > 0: |
99 with attempt as t: |
100 for attempt in manager.attempts(): |
100 IMediaConversions(media).add_conversion(conversion, media_format, converter.format, loop) |
101 with attempt as t: |
101 if t.status == 'Committed': |
102 IMediaConversions(media).add_conversion(conversion, media_format, converter.format, width) |
102 break |
103 if t.status == 'Committed': |
|
104 break |
|
105 else: |
|
106 logger.warning("Finished FFmpeg conversion process with **NO OUTPUT** !!!") |
103 finally: |
107 finally: |
104 if manager is not None: |
108 if manager is not None: |
105 manager.abort() |
109 manager.abort() |
106 connection.close() |
110 connection.close() |
107 storage.close() |
111 storage.close() |
127 ConversionThread(ConversionProcess(settings)).start() |
131 ConversionThread(ConversionProcess(settings)).start() |
128 return [200, 'Conversion process started'] |
132 return [200, 'Conversion process started'] |
129 |
133 |
130 def test(self, settings): |
134 def test(self, settings): |
131 messages = ['Conversion process ready to handle requests.'] |
135 messages = ['Conversion process ready to handle requests.'] |
132 ffmpeg = shutil.which('ffmpeg') |
136 for command in ('ffmpeg', 'ffprobe'): |
133 if ffmpeg is None: |
137 whereis = shutil.which(command) |
134 messages.append("WARNING: missing 'ffmpeg' command!") |
138 if whereis is None: |
135 else: |
139 messages.append("WARNING: missing required command '{0}'!".format(command)) |
136 messages.append("'ffmpeg' command is available.") |
140 else: |
|
141 messages.append("Required command '{0}' is available.".format(command)) |
137 return [200, '\n'.join(messages)] |
142 return [200, '\n'.join(messages)] |
138 |
143 |
139 |
144 |
140 class MediaConversionMessageHandler(ZMQMessageHandler): |
145 class MediaConversionMessageHandler(ZMQMessageHandler): |
141 """Media conversion message handler""" |
146 """Media conversion message handler""" |