/** * Implementation of job execution * * @param context * @return * @throws JobExecutionException */ private boolean doExecute(JobExecutionContext context) throws JobExecutionException { VideoModule videoModule = CoreSpringFactory.getImpl(VideoModule.class); if (!videoModule.isTranscodingLocal()) { log.debug("Skipping execution of video transcoding job, local transcoding disabled"); return false; } // Find first one to work with VideoManager videoManager = CoreSpringFactory.getImpl(VideoManager.class); List<VideoTranscoding> videoTranscodings = videoManager.getVideoTranscodingsPendingAndInProgress(); VideoTranscoding videoTranscoding = null; for (VideoTranscoding videoTrans : videoTranscodings) { String transcoder = videoTrans.getTranscoder(); if (transcoder == null) { log.info( "Start transcoding video with resolution::" + videoTrans.getResolution() + " for video resource::" + videoTrans.getVideoResource().getResourceableId()); videoTrans.setTranscoder(VideoTranscoding.TRANSCODER_LOCAL); videoTranscoding = videoManager.updateVideoTranscoding(videoTrans); break; } else if (transcoder.equals(VideoTranscoding.TRANSCODER_LOCAL)) { log.info( "Continue with transcoding video with resolution::" + videoTrans.getResolution() + " for video resource::" + videoTrans.getVideoResource().getResourceableId()); videoTranscoding = videoTrans; break; } } if (videoTranscoding == null) { log.debug( "Skipping execution of video transcoding job, no pending video transcoding found in database"); return false; } // Ready transcode, forke process now boolean success = forkTranscodingProcess(videoTranscoding); // Transcoding done, call execution again until no more videos to be // processed. If an error happend, don't continue to not get into a loop if (success) { success = doExecute(context); } return success; }