示例#1
0
  /**
   * Internal helper to fork a process with handbrake and read the values from the process
   *
   * @param videoTranscoding
   * @return true: all ok; false: an error happend along the way
   */
  private boolean forkTranscodingProcess(VideoTranscoding videoTranscoding) {
    OLATResource video = videoTranscoding.getVideoResource();
    VideoModule videoModule = CoreSpringFactory.getImpl(VideoModule.class);
    VideoManager videoManager = CoreSpringFactory.getImpl(VideoManager.class);
    File masterFile = videoManager.getVideoFile(video);
    File transcodingFolder =
        ((LocalFolderImpl) videoManager.getTranscodingContainer(video)).getBasefile();
    File transcodedFile =
        new File(
            transcodingFolder,
            Integer.toString(videoTranscoding.getResolution()) + masterFile.getName());
    // mark this as beeing transcoded by this local transcoder
    videoTranscoding.setTranscoder(VideoTranscoding.TRANSCODER_LOCAL);
    videoTranscoding = videoManager.updateVideoTranscoding(videoTranscoding);

    ArrayList<String> cmd = new ArrayList<>();
    String tasksetConfig = videoModule.getTranscodingTasksetConfig();
    if (tasksetConfig != null && !"Mac OS X".equals(System.getProperty("os.name"))) {
      cmd.add("taskset");
      cmd.add("-c");
      cmd.add(tasksetConfig);
    }
    cmd.add("HandBrakeCLI");
    cmd.add("-i");
    cmd.add(masterFile.getAbsolutePath());
    cmd.add("-o");
    cmd.add(transcodedFile.getAbsolutePath());
    cmd.add("--optimize");
    cmd.add("--preset");
    cmd.add("Normal");
    cmd.add("--height");
    cmd.add(Integer.toString(videoTranscoding.getResolution()));
    cmd.add("--deinterlace");
    cmd.add("--crop");
    cmd.add("0:0:0:0");

    Process process = null;
    try {
      if (log.isDebug()) {
        log.debug(cmd.toString());
      }
      ProcessBuilder builder = new ProcessBuilder(cmd);
      process = builder.start();
      return updateVideoTranscodingFromProcessOutput(process, videoTranscoding, transcodedFile);
    } catch (IOException e) {
      log.error("Could not spawn convert sub process", e);
      return false;
    } finally {
      if (process != null) {
        process.destroy();
        process = null;
      }
    }
  }