示例#1
0
  /**
   * 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;
  }