def _side_by_side(self, mp, location=None): logger.info('Executing SideBySide for MP {0}'.format( mp.getIdentifier())) mp.setOpStatus('sidebyside', mediapackage.OP_PROCESSING) if not location: name = datetime.now().replace(microsecond=0).isoformat() location = location or os.path.join(self.export_path, name + '.mp4') self.repo.update(mp) self.dispatcher.emit('start-operation', 'sidebyside', mp) audio = None #'camera' camera = screen = None for track in mp.getTracks(): if track.getMimeType()[0:5] == 'audio': audio = track.getURI() else: if track.getFlavor()[0:9] == 'presenter': camera = track.getURI() if track.getFlavor()[0:12] == 'presentation': screen = track.getURI() try: sidebyside.create_sbs(location, screen, camera, audio) mp.setOpStatus('sidebyside', mediapackage.OP_DONE) self.dispatcher.emit('stop-operation', 'sidebyside', mp, True) except: logger.error("Failed SideBySide for MP {0}".format( mp.getIdentifier())) mp.setOpStatus('sidebyside', mediapackage.OP_FAILED) self.dispatcher.emit('stop-operation', 'sidebyside', mp, False) self.repo.update(mp)
def _side_by_side(self, mp, location=None): self.logger.info('Executing SideBySide for MP {0}'.format(mp.getIdentifier())) mp.setOpStatus('sidebyside',mediapackage.OP_PROCESSING) if not location: name = datetime.now().replace(microsecond=0).isoformat() location = location or os.path.join(self.export_path, name + '.mp4') self.repo.update(mp) self.dispatcher.emit('start-operation', 'sidebyside', mp) audio = None #'camera' camera = screen = None for track in mp.getTracks(): if track.getMimeType()[0:5] == 'audio': audio = track.getURI() else: if track.getFlavor()[0:9] == 'presenter' : camera = track.getURI() if track.getFlavor()[0:12] == 'presentation': screen = track.getURI() try: sidebyside.create_sbs(location, camera, screen, audio, self.sbs_layout) mp.setOpStatus('sidebyside',mediapackage.OP_DONE) self.dispatcher.emit('stop-operation', 'sidebyside', mp, True) except: self.logger.error("Failed SideBySide for MP {0}".format(mp.getIdentifier())) mp.setOpStatus('sidebyside', mediapackage.OP_FAILED) self.dispatcher.emit('stop-operation', 'sidebyside', mp, False) self.repo.update(mp)
def _side_by_side(self, mp, location=None): location = location or self.gen_location('mp4') self.logger.info('Executing SideBySide for MP {0}'.format( mp.getIdentifier())) mp.setOpStatus('sidebyside', mediapackage.OP_PROCESSING) self.repo.update(mp) self.dispatcher.emit('start-operation', 'sidebyside', mp) audio = None #'camera' camera = screen = None for track in mp.getTracks(): if track.getMimeType()[0:5] == 'audio': audio = track.getURI() else: if track.getFlavor()[0:9] == 'presenter': camera = track.getURI() if track.getFlavor()[0:12] == 'presentation': screen = track.getURI() try: sidebyside.create_sbs(location, camera, screen, audio, self.sbs_layout, self.logger) mp.setOpStatus('sidebyside', mediapackage.OP_DONE) self.dispatcher.emit('stop-operation', 'sidebyside', mp, True) except: self.logger.error("Failed SideBySide for MP {0}".format( mp.getIdentifier())) mp.setOpStatus('sidebyside', mediapackage.OP_FAILED) self.dispatcher.emit('stop-operation', 'sidebyside', mp, False) self.repo.update(mp)
def _side_by_side(self, mp, params={}): """Tries to immediately do the side by side operation to a mediapackage. If the side by side operation cannot be done, logger prints it properly. Args: mp (Mediapackage): the mediapackage. location (str): the location for the new video file. """ location = self.gen_location('mp4') if not "location" in params else params["location"] audio_mode = "auto" if not "audio" in params else params["audio"] sbs_layout = self.sbs_layout if not "layout" in params else params["layout"] if audio_mode not in ["embedded", "external", "auto"]: self.logger.warning("SideBySide for MP {}: unknown value {} for parameter 'audio', default to auto-mode".format(mp.getIdentifier(), audio_mode)) audio_mode = "auto" audio = None #'camera' camera = screen = None for track in mp.getTracksVideoMaster(): if track.getFlavor()[0:9] == 'presenter': camera = track.getURI() if track.getFlavor()[0:12] == 'presentation': screen = track.getURI() if mp.getTracksAudio(): audio = mp.getTracksAudio()[0].getURI() if not camera or not screen: raise IOError('Error in SideBySide process: Two videos needed (with presenter and presentation flavors)') if audio_mode == "auto": self.logger.info('SideBySide for MP {0}: auto audio-mode'.format(mp.getIdentifier())) # Look for embedded audio track, if this not exists use external audio info = get_info(camera) if 'audio-codec' in info.get_stream_info().get_streams()[0].get_tags().to_string(): self.logger.info('SideBySide for MP {0}: embedded audio detected'.format(mp.getIdentifier())) audio = None else: self.logger.info('SideBySide for MP {0}: embedded audio NOT detected, trying to use external audio...'.format(mp.getIdentifier())) elif audio_mode == "embedded": self.logger.info('SideBySide for MP {0}: embedded audio-mode'.format(mp.getIdentifier())) # Look for embedded audio track, if this not exists use external audio info = get_info(camera) if 'audio-codec' in info.get_stream_info().get_streams()[0].get_tags().to_string(): self.logger.info('SideBySide for MP {0}: embedded audio detected'.format(mp.getIdentifier())) audio = None else: self.logger.info('SideBySide for MP {0}: embedded audio NOT detected, trying to use external audio...'.format(mp.getIdentifier())) else: self.logger.info('SideBySide for MP {0}: external audio-mode'.format(mp.getIdentifier())) if not audio: self.logger.info('SideBySide for MP {0}: external audio NOT detected, trying to use embedded audio...'.format(mp.getIdentifier())) sidebyside.create_sbs(location, camera, screen, audio, sbs_layout, self.logger)
def _side_by_side(self, mp, params={}): """Tries to immediately do the side by side operation to a mediapackage. If the side by side operation cannot be done, logger prints it properly. Args: mp (Mediapackage): the mediapackage. location (str): the location for the new video file. """ location = self.gen_location('mp4') if not "location" in params else params["location"] audio_mode = "auto" if not "audio" in params else params["audio"] sbs_layout = self.sbs_layout if not "layout" in params else params["layout"] if audio_mode not in ["embedded", "external", "auto"]: self.logger.warning("SideBySide for MP {}: unknown value {} for parameter 'audio', default to auto-mode".format(mp.getIdentifier(), audio_mode)) audio_mode = "auto" audio = None #'camera' camera = screen = None for track in mp.getTracksVideoMaster(): if track.getFlavor()[0:9] == 'presenter': camera = track.getURI() if track.getFlavor()[0:12] == 'presentation': screen = track.getURI() if mp.getTracksAudio(): audio = mp.getTracksAudio()[0].getURI() if not camera or not screen: raise IOError, 'Error in SideBySide process: Two videos needed (with presenter and presentation flavors)' if audio_mode == "auto": self.logger.info('SideBySide for MP {0}: auto audio-mode'.format(mp.getIdentifier())) # Look for embedded audio track, if this not exists use external audio info = get_info(camera) if 'audio-codec' in info.get_stream_info().get_streams()[0].get_tags().to_string(): self.logger.info('SideBySide for MP {0}: embedded audio detected'.format(mp.getIdentifier())) audio = None else: self.logger.info('SideBySide for MP {0}: embedded audio NOT detected, trying to use external audio...'.format(mp.getIdentifier())) elif audio_mode == "embedded": self.logger.info('SideBySide for MP {0}: embedded audio-mode'.format(mp.getIdentifier())) # Look for embedded audio track, if this not exists use external audio info = get_info(camera) if 'audio-codec' in info.get_stream_info().get_streams()[0].get_tags().to_string(): self.logger.info('SideBySide for MP {0}: embedded audio detected'.format(mp.getIdentifier())) audio = None else: self.logger.info('SideBySide for MP {0}: embedded audio NOT detected, trying to use external audio...'.format(mp.getIdentifier())) else: self.logger.info('SideBySide for MP {0}: external audio-mode'.format(mp.getIdentifier())) if not audio: self.logger.info('SideBySide for MP {0}: external audio NOT detected, trying to use embedded audio...'.format(mp.getIdentifier())) sidebyside.create_sbs(location, camera, screen, audio, sbs_layout, self.logger)
def create_sbs_video(sbs_location, sbs_layout, mp): audio = None # 'camera' camera = screen = None for track in mp.getTracks(): if track.getMimeType()[0:5] == 'audio': audio = track.getURI() else: if track.getFlavor()[0:9] == 'presenter': camera = track.getURI() if track.getFlavor()[0:12] == 'presentation': screen = track.getURI() create_sbs(sbs_location, camera, screen, audio, sbs_layout)
def test_sbs_with_audio(self): out = tempfile.NamedTemporaryFile() screen = path.join(self.base_dir, 'SCREEN.mp4') camera = path.join(self.base_dir, 'CAMERA.mp4') audio = path.join(self.base_dir, 'AUDIO.mp3') out = sidebyside.create_sbs(out.name, camera, screen, audio) self.assertTrue(out)
def test_sbs_with_audio(self): out = tempfile.NamedTemporaryFile() screen = path.join(self.base_dir, 'SCREEN.mp4') camera = path.join(self.base_dir, 'CAMERA.mp4') audio = path.join(self.base_dir, 'AUDIO.mp3') out = sidebyside.create_sbs(out.name, screen, camera, audio) self.assertTrue(out)
def _side_by_side(self, mp, params={}): """Tries to immediately do the side by side operation to a mediapackage. If the side by side operation cannot be done, logger prints it properly. Args: mp (Mediapackage): the mediapackage. location (str): the location for the new video file. """ location = self.gen_location("mp4") if not "location" in params else params["location"] audio_mode = "auto" if not "audio" in params else params["audio"] sbs_layout = self.sbs_layout if not "layout" in params else params["layout"] if audio_mode not in ["embedded", "external", "auto"]: self.logger.warning( "SideBySide for MP {}: unknown value {} for parameter 'audio', default to auto-mode".format( mp.getIdentifier(), audio ) ) audio_mode = "auto" self.logger.info("Executing SideBySide for MP {0}".format(mp.getIdentifier())) mp.setOpStatus("sidebyside", mediapackage.OP_PROCESSING) self.repo.update(mp) self.dispatcher.emit("start-operation", "sidebyside", mp) audio = None #'camera' camera = screen = None for track in mp.getTracksVideoMaster(): if track.getFlavor()[0:9] == "presenter": camera = track.getURI() if track.getFlavor()[0:12] == "presentation": screen = track.getURI() if mp.getTracksAudio(): audio = mp.getTracksAudio()[0].getURI() try: if not camera or not screen: raise IOError, "Error in SideBySide proccess: Two videos needed (with presenter and presentation flavors)" if audio_mode == "auto": self.logger.debug("SideBySide for MP {0}: auto audio-mode".format(mp.getIdentifier())) # Look for embedded audio track, if this not exists use external audio info = get_info(camera) if "audio-codec" in info.get_stream_info().get_streams()[0].get_tags().to_string(): self.logger.debug("SideBySide for MP {0}: embedded audio detected".format(mp.getIdentifier())) audio = None else: self.logger.debug( "SideBySide for MP {0}: embedded audio NOT detected, trying to use external audio...".format( mp.getIdentifier() ) ) elif audio_mode == "embedded": self.logger.debug("SideBySide for MP {0}: embedded audio-mode".format(mp.getIdentifier())) # Look for embedded audio track, if this not exists use external audio info = get_info(camera) if "audio-codec" in info.get_stream_info().get_streams()[0].get_tags().to_string(): self.logger.debug("SideBySide for MP {0}: embedded audio detected".format(mp.getIdentifier())) audio = None else: self.logger.debug( "SideBySide for MP {0}: embedded audio NOT detected, trying to use external audio...".format( mp.getIdentifier() ) ) else: self.logger.debug("SideBySide for MP {0}: external audio-mode".format(mp.getIdentifier())) if not audio: self.logger.debug( "SideBySide for MP {0}: external audio NOT detected, trying to use embedded audio...".format( mp.getIdentifier() ) ) sidebyside.create_sbs(location, camera, screen, audio, sbs_layout, self.logger) self.operation_success(mp, SBS) except Exception as exc: self.operation_error(mp, SBS, exc) self.repo.update(mp)