Package net.pms.io

Examples of net.pms.io.PipeIPCProcess


    OutputParams params
  ) throws IOException {
    final String filename = dlna.getSystemName();
    setAudioAndSubs(filename, media, params);

    PipeIPCProcess ffVideoPipe;
    ProcessWrapperImpl ffVideo;

    PipeIPCProcess ffAudioPipe[] = null;
    ProcessWrapperImpl ffAudio[] = null;

    String fps = media.getValidFps(false);

    int width  = media.getWidth();
    int height = media.getHeight();
    if (width < 320 || height < 240) {
      width  = -1;
      height = -1;
    }

    String videoType = "V_MPEG4/ISO/AVC";
    if (media.getCodecV() != null && media.getCodecV().startsWith("mpeg2")) {
      videoType = "V_MPEG-2";
    }

    if (this instanceof TsMuxeRAudio && media.getFirstAudioTrack() != null) {
      ffVideoPipe = new PipeIPCProcess(System.currentTimeMillis() + "fakevideo", System.currentTimeMillis() + "videoout", false, true);

      String timeEndValue1 = "-t";
      String timeEndValue2 = "" + params.timeend;
      if (params.timeend < 1) {
        timeEndValue1 = "-y";
        timeEndValue2 = "-y";
      }

      String[] ffmpegLPCMextract = new String[] {
        configuration.getFfmpegPath(),
        timeEndValue1, timeEndValue2,
        "-loop", "1",
        "-i", "DummyInput.jpg",
        "-f", "h264",
        "-c:v", "libx264",
        "-level", "31",
        "-pix_fmt", "yuv420p",
        "-an",
        "-y",
        ffVideoPipe.getInputPipe()
      };

      videoType = "V_MPEG4/ISO/AVC";

      OutputParams ffparams = new OutputParams(configuration);
      ffparams.maxBufferSize = 1;
      ffVideo = new ProcessWrapperImpl(ffmpegLPCMextract, ffparams);

      if (
        filename.toLowerCase().endsWith(".flac") &&
        media.getFirstAudioTrack().getBitsperSample() >= 24 &&
        media.getFirstAudioTrack().getSampleRate() % 48000 == 0
      ) {
        ffAudioPipe = new PipeIPCProcess[1];
        ffAudioPipe[0] = new PipeIPCProcess(System.currentTimeMillis() + "flacaudio", System.currentTimeMillis() + "audioout", false, true);

        String[] flacCmd = new String[] {
          configuration.getFlacPath(),
          "--output-name=" + ffAudioPipe[0].getInputPipe(),
          "-d",
          "-f",
          "-F",
          filename
        };

        ffparams = new OutputParams(configuration);
        ffparams.maxBufferSize = 1;
        ffAudio = new ProcessWrapperImpl[1];
        ffAudio[0] = new ProcessWrapperImpl(flacCmd, ffparams);
      } else {
        ffAudioPipe = new PipeIPCProcess[1];
        ffAudioPipe[0] = new PipeIPCProcess(System.currentTimeMillis() + "mlpaudio", System.currentTimeMillis() + "audioout", false, true);
        String depth = "pcm_s16le";
        String rate = "48000";

        if (media.getFirstAudioTrack().getBitsperSample() >= 24) {
          depth = "pcm_s24le";
        }

        if (media.getFirstAudioTrack().getSampleRate() > 48000) {
          rate = "" + media.getFirstAudioTrack().getSampleRate();
        }

        String[] flacCmd = new String[] {
          configuration.getFfmpegPath(),
          "-i", filename,
          "-ar", rate,
          "-f", "wav",
          "-acodec", depth,
          "-y",
          ffAudioPipe[0].getInputPipe()
        };

        ffparams = new OutputParams(configuration);
        ffparams.maxBufferSize = 1;
        ffAudio = new ProcessWrapperImpl[1];
        ffAudio[0] = new ProcessWrapperImpl(flacCmd, ffparams);
      }
    } else {
      params.waitbeforestart = 5000;
      params.manageFastStart();

      String mencoderPath = configuration.getMencoderPath();

      ffVideoPipe = new PipeIPCProcess(System.currentTimeMillis() + "ffmpegvideo", System.currentTimeMillis() + "videoout", false, true);

      // Special handling for evo files
      String evoValue1 = "-quiet";
      String evoValue2 = "-quiet";
      if (filename.toLowerCase().endsWith(".evo")) {
        evoValue1 = "-psprobe";
        evoValue2 = "1000000";
      }

      String[] ffmpegLPCMextract = new String[] {
        mencoderPath,
        "-ss", params.timeseek > 0 ? "" + params.timeseek : "0",
        params.stdin != null ? "-" : filename,
        evoValue1, evoValue2,
        "-really-quiet",
        "-msglevel", "statusline=2",
        "-ovc", "copy",
        "-nosound",
        "-mc", "0",
        "-noskip",
        "-of", "rawvideo",
        "-o", ffVideoPipe.getInputPipe()
      };

      InputFile newInput = new InputFile();
      newInput.setFilename(filename);
      newInput.setPush(params.stdin);

      /**
       * Note: This logic is weird; on one hand we check if the renderer requires videos to be Level 4.1 or below, but then
       * the other function allows the video to exceed those limits.
       * In reality this won't cause problems since renderers typically don't support above 4.1 anyway - nor are many
       * videos encoded higher than that either - but it's worth acknowledging the logic discrepancy.
       */
      if (!media.isVideoWithinH264LevelLimits(newInput, params.mediaRenderer) && params.mediaRenderer.isH264Level41Limited()) {
        LOGGER.info("The video will not play or will show a black screen");
      }

      if (media.getH264AnnexB() != null && media.getH264AnnexB().length > 0) {
        StreamModifier sm = new StreamModifier();
        sm.setHeader(media.getH264AnnexB());
        sm.setH264AnnexB(true);
        ffVideoPipe.setModifier(sm);
      }

      OutputParams ffparams = new OutputParams(configuration);
      ffparams.maxBufferSize = 1;
      ffparams.stdin = params.stdin;
      ffVideo = new ProcessWrapperImpl(ffmpegLPCMextract, ffparams);

      int numAudioTracks = 1;

      if (media.getAudioTracksList() != null && media.getAudioTracksList().size() > 1 && configuration.isMuxAllAudioTracks()) {
        numAudioTracks = media.getAudioTracksList().size();
      }

      boolean singleMediaAudio = media.getAudioTracksList().size() <= 1;

      if (params.aid != null) {
        boolean ac3Remux;
        boolean dtsRemux;
        boolean encodedAudioPassthrough;
        boolean pcm;

        if (numAudioTracks <= 1) {
          ffAudioPipe = new PipeIPCProcess[numAudioTracks];
          ffAudioPipe[0] = new PipeIPCProcess(System.currentTimeMillis() + "ffmpegaudio01", System.currentTimeMillis() + "audioout", false, true);

          /**
           * Disable AC3 remux for stereo tracks with 384 kbits bitrate and PS3 renderer (PS3 FW bug?)
           *
           * Commented out until we can find a way to detect when a video has an audio track that switches from 2 to 6 channels
           * because MEncoder can't handle those files, which are very common these days.
          boolean ps3_and_stereo_and_384_kbits = params.aid != null &&
            (params.mediaRenderer.isPS3() && params.aid.getAudioProperties().getNumberOfChannels() == 2) &&
            (params.aid.getBitRate() > 370000 && params.aid.getBitRate() < 400000);
           */

          encodedAudioPassthrough = configuration.isEncodedAudioPassthrough() && params.aid.isNonPCMEncodedAudio() && params.mediaRenderer.isWrapEncodedAudioIntoPCM();
          ac3Remux = params.aid.isAC3() && configuration.isAudioRemuxAC3() && !encodedAudioPassthrough;
          dtsRemux = configuration.isAudioEmbedDtsInPcm() && params.aid.isDTS() && params.mediaRenderer.isDTSPlayable() && !encodedAudioPassthrough;

          pcm = configuration.isAudioUsePCM() &&
            media.isValidForLPCMTranscoding() &&
            (
              params.aid.isLossless() ||
              (params.aid.isDTS() && params.aid.getAudioProperties().getNumberOfChannels() <= 6) ||
              params.aid.isTrueHD() ||
              (
                !configuration.isMencoderUsePcmForHQAudioOnly() &&
                (
                  params.aid.isAC3() ||
                  params.aid.isMP3() ||
                  params.aid.isAAC() ||
                  params.aid.isVorbis() ||
                  // params.aid.isWMA() ||
                  params.aid.isMpegAudio()
                )
              )
            ) && params.mediaRenderer.isLPCMPlayable();

          int channels;
          if (ac3Remux) {
            channels = params.aid.getAudioProperties().getNumberOfChannels(); // AC-3 remux
          } else if (dtsRemux || encodedAudioPassthrough) {
            channels = 2;
          } else if (pcm) {
            channels = params.aid.getAudioProperties().getNumberOfChannels();
          } else {
            channels = configuration.getAudioChannelCount(); // 5.1 max for AC-3 encoding
          }

          if (!ac3Remux && (dtsRemux || pcm || encodedAudioPassthrough)) {
            // DTS remux or LPCM
            StreamModifier sm = new StreamModifier();
            sm.setPcm(pcm);
            sm.setDtsEmbed(dtsRemux);
            sm.setEncodedAudioPassthrough(encodedAudioPassthrough);
            sm.setNbChannels(channels);
            sm.setSampleFrequency(params.aid.getSampleRate() < 48000 ? 48000 : params.aid.getSampleRate());
            sm.setBitsPerSample(16);

            String mixer = null;

            if (pcm && !dtsRemux && !encodedAudioPassthrough) {
              mixer = getLPCMChannelMappingForMencoder(params.aid);
            }

            ffmpegLPCMextract = new String[] {
              mencoderPath,
              "-ss", params.timeseek > 0 ? "" + params.timeseek : "0",
              params.stdin != null ? "-" : filename,
              evoValue1, evoValue2,
              "-really-quiet",
              "-msglevel", "statusline=2",
              "-channels", "" + sm.getNbChannels(),
              "-ovc", "copy",
              "-of", "rawaudio",
              "-mc", sm.isDtsEmbed() || sm.isEncodedAudioPassthrough() ? "0.1" : "0",
              "-noskip",
              "-oac", sm.isDtsEmbed() || sm.isEncodedAudioPassthrough() ? "copy" : "pcm",
              isNotBlank(mixer) ? "-af" : "-quiet", isNotBlank(mixer) ? mixer : "-quiet",
              singleMediaAudio ? "-quiet" : "-aid", singleMediaAudio ? "-quiet" : ("" + params.aid.getId()),
              "-srate", "48000",
              "-o", ffAudioPipe[0].getInputPipe()
            };

            // Use PCM trick when media renderer does not support DTS in MPEG
            if (!params.mediaRenderer.isMuxDTSToMpeg()) {
              ffAudioPipe[0].setModifier(sm);
            }
          } else {
            // AC-3 remux or encoding
            ffmpegLPCMextract = new String[] {
              mencoderPath,
              "-ss", params.timeseek > 0 ? "" + params.timeseek : "0",
              params.stdin != null ? "-" : filename,
              evoValue1, evoValue2,
              "-really-quiet",
              "-msglevel", "statusline=2",
              "-channels", "" + channels,
              "-ovc", "copy",
              "-of", "rawaudio",
              "-mc", "0",
              "-noskip",
              "-oac", (ac3Remux) ? "copy" : "lavc",
              params.aid.isAC3() ? "-fafmttag" : "-quiet", params.aid.isAC3() ? "0x2000" : "-quiet",
              "-lavcopts", "acodec=" + (configuration.isMencoderAc3Fixed() ? "ac3_fixed" : "ac3") + ":abitrate=" + CodecUtil.getAC3Bitrate(configuration, params.aid),
              "-af", "lavcresample=48000",
              "-srate", "48000",
              singleMediaAudio ? "-quiet" : "-aid", singleMediaAudio ? "-quiet" : ("" + params.aid.getId()),
              "-o", ffAudioPipe[0].getInputPipe()
            };
          }

          ffparams = new OutputParams(configuration);
          ffparams.maxBufferSize = 1;
          ffparams.stdin = params.stdin;
          ffAudio = new ProcessWrapperImpl[numAudioTracks];
          ffAudio[0] = new ProcessWrapperImpl(ffmpegLPCMextract, ffparams);
        } else {
          ffAudioPipe = new PipeIPCProcess[numAudioTracks];
          ffAudio = new ProcessWrapperImpl[numAudioTracks];
          for (int i = 0; i < media.getAudioTracksList().size(); i++) {
            DLNAMediaAudio audio = media.getAudioTracksList().get(i);
            ffAudioPipe[i] = new PipeIPCProcess(System.currentTimeMillis() + "ffmpeg" + i, System.currentTimeMillis() + "audioout" + i, false, true);

            /**
             * Disable AC3 remux for stereo tracks with 384 kbits bitrate and PS3 renderer (PS3 FW bug?)
             *
             * Commented out until we can find a way to detect when a video has an audio track that switches from 2 to 6 channels
View Full Code Here


      TsMuxeRVideo ts = new TsMuxeRVideo();
      File f = new File(configuration.getTempFolder(), "pms-tsmuxer.meta");
      String cmd[] = new String[]{ ts.executable(), f.getAbsolutePath(), pipe.getInputPipe() };
      pw = new ProcessWrapperImpl(cmd, params);

      PipeIPCProcess ffVideoPipe = new PipeIPCProcess(System.currentTimeMillis() + "ffmpegvideo", System.currentTimeMillis() + "videoout", false, true);

      cmdList.add(ffVideoPipe.getInputPipe());

      OutputParams ffparams = new OutputParams(configuration);
      ffparams.maxBufferSize = 1;
      ffparams.stdin = params.stdin;

      String[] cmdArrayDts = new String[cmdList.size()];
      cmdList.toArray(cmdArrayDts);

      cmdArrayDts = finalizeTranscoderArgs(
        filename,
        dlna,
        media,
        params,
        cmdArrayDts
      );

      ProcessWrapperImpl ffVideo = new ProcessWrapperImpl(cmdArrayDts, ffparams);

      ProcessWrapper ff_video_pipe_process = ffVideoPipe.getPipeProcess();
      pw.attachProcess(ff_video_pipe_process);
      ff_video_pipe_process.runInNewThread();
      ffVideoPipe.deleteLater();

      pw.attachProcess(ffVideo);
      ffVideo.runInNewThread();

      PipeIPCProcess ffAudioPipe = new PipeIPCProcess(System.currentTimeMillis() + "ffmpegaudio01", System.currentTimeMillis() + "audioout", false, true);
      StreamModifier sm = new StreamModifier();
      sm.setPcm(false);
      sm.setDtsEmbed(dtsRemux);
      sm.setSampleFrequency(48000);
      sm.setBitsPerSample(16);
      sm.setNbChannels(2);

      List<String> cmdListDTS = new ArrayList<>();
      cmdListDTS.add(executable());
      cmdListDTS.add("-y");
      cmdListDTS.add("-ss");

      if (params.timeseek > 0) {
        cmdListDTS.add(String.valueOf(params.timeseek));
      } else {
        cmdListDTS.add("0");
      }

      if (params.stdin == null) {
        cmdListDTS.add("-i");
      } else {
        cmdListDTS.add("-");
      }
      cmdListDTS.add(filename);

      if (params.timeseek > 0) {
        cmdListDTS.add("-copypriorss");
        cmdListDTS.add("0");
        cmdListDTS.add("-avoid_negative_ts");
        cmdListDTS.add("1");
      }

      cmdListDTS.add("-ac");
      cmdListDTS.add("2");

      cmdListDTS.add("-f");
      cmdListDTS.add("dts");

      cmdListDTS.add("-c:a");
      cmdListDTS.add("copy");

      cmdListDTS.add(ffAudioPipe.getInputPipe());

      String[] cmdArrayDTS = new String[cmdListDTS.size()];
      cmdListDTS.toArray(cmdArrayDTS);

      if (!params.mediaRenderer.isMuxDTSToMpeg()) { // No need to use the PCM trick when media renderer supports DTS
        ffAudioPipe.setModifier(sm);
      }

      OutputParams ffaudioparams = new OutputParams(configuration);
      ffaudioparams.maxBufferSize = 1;
      ffaudioparams.stdin = params.stdin;
      ProcessWrapperImpl ffAudio = new ProcessWrapperImpl(cmdArrayDTS, ffaudioparams);

      params.stdin = null;
      try (PrintWriter pwMux = new PrintWriter(f)) {
        pwMux.println("MUXOPT --no-pcr-on-video-pid --no-asyncio --new-audio-pes --vbr --vbv-len=500");
        String videoType = "V_MPEG-2";

        if (renderer.isTranscodeToH264()) {
          videoType = "V_MPEG4/ISO/AVC";
        }

        if (params.no_videoencode && params.forceType != null) {
          videoType = params.forceType;
        }

        StringBuilder fps = new StringBuilder();
        fps.append("");
        if (params.forceFps != null) {
          fps.append("fps=").append(params.forceFps).append(", ");
        }

        String audioType = "A_AC3";
        if (dtsRemux) {
          if (params.mediaRenderer.isMuxDTSToMpeg()) {
            // Renderer can play proper DTS track
            audioType = "A_DTS";
          } else {
            // DTS padded in LPCM trick
            audioType = "A_LPCM";
          }
        }

        pwMux.println(videoType + ", \"" + ffVideoPipe.getOutputPipe() + "\", " + fps + "level=4.1, insertSEI, contSPS, track=1");
        pwMux.println(audioType + ", \"" + ffAudioPipe.getOutputPipe() + "\", track=2");
      }

      ProcessWrapper pipe_process = pipe.getPipeProcess();
      pw.attachProcess(pipe_process);
      pipe_process.runInNewThread();

      try {
        wait(50);
      } catch (InterruptedException e) {
      }

      pipe.deleteLater();
      params.input_pipes[0] = pipe;

      ProcessWrapper ff_pipe_process = ffAudioPipe.getPipeProcess();
      pw.attachProcess(ff_pipe_process);
      ff_pipe_process.runInNewThread();

      try {
        wait(50);
      } catch (InterruptedException e) {
      }

      ffAudioPipe.deleteLater();
      pw.attachProcess(ffAudio);
      ffAudio.runInNewThread();
    }

    pw.runInNewThread();
View Full Code Here

        TsMuxeRVideo ts = new TsMuxeRVideo(configuration);
        File f = new File(configuration.getTempFolder(), "pms-tsmuxer.meta");
        String cmd[] = new String[]{ ts.executable(), f.getAbsolutePath(), pipe.getInputPipe() };
        pw = new ProcessWrapperImpl(cmd, params);

        PipeIPCProcess ffVideoPipe = new PipeIPCProcess(System.currentTimeMillis() + "ffmpegvideo", System.currentTimeMillis() + "videoout", false, true);

        cmdList.add("-o");
        cmdList.add(ffVideoPipe.getInputPipe());

        OutputParams ffparams = new OutputParams(configuration);
        ffparams.maxBufferSize = 1;
        ffparams.stdin = params.stdin;

        String[] cmdArray = new String[cmdList.size()];
        cmdList.toArray(cmdArray);
        ProcessWrapperImpl ffVideo = new ProcessWrapperImpl(cmdArray, ffparams);

        ProcessWrapper ff_video_pipe_process = ffVideoPipe.getPipeProcess();
        pw.attachProcess(ff_video_pipe_process);
        ff_video_pipe_process.runInNewThread();
        ffVideoPipe.deleteLater();

        pw.attachProcess(ffVideo);
        ffVideo.runInNewThread();

        String aid = null;
        if (media != null && media.getAudioTracksList().size() > 1 && params.aid != null) {
          if (media.getContainer() != null && (media.getContainer().equals(FormatConfiguration.AVI) || media.getContainer().equals(FormatConfiguration.FLV))) {
            // TODO confirm (MP4s, OGMs and MOVs already tested: first aid is 0; AVIs: first aid is 1)
            // for AVIs, FLVs and MOVs mencoder starts audio tracks numbering from 1
            aid = "" + (params.aid.getId() + 1);
          } else {
            // everything else from 0
            aid = "" + params.aid.getId();
          }
        }

        PipeIPCProcess ffAudioPipe = new PipeIPCProcess(System.currentTimeMillis() + "ffmpegaudio01", System.currentTimeMillis() + "audioout", false, true);
        StreamModifier sm = new StreamModifier();
        sm.setPcm(pcm);
        sm.setDtsEmbed(dtsRemux);
        sm.setSampleFrequency(48000);
        sm.setBitsPerSample(16);

        String mixer = null;
        if (pcm && !dtsRemux) {
          mixer = getLPCMChannelMappingForMencoder(params.aid); // LPCM always outputs 5.1/7.1 for multichannel tracks. Downmix with player if needed!
        }

        sm.setNbChannels(channels);

        // it seems the -really-quiet prevents mencoder to stop the pipe output after some time...
        // -mc 0.1 make the DTS-HD extraction works better with latest mencoder builds, and makes no impact on the regular DTS one
        String ffmpegLPCMextract[] = new String[]{
          executable(),
          "-ss", "0",
          filename,
          "-really-quiet",
          "-msglevel", "statusline=2",
          "-channels", "" + channels,
          "-ovc", "copy",
          "-of", "rawaudio",
          "-mc", dtsRemux ? "0.1" : "0",
          "-noskip",
          (aid == null) ? "-quiet" : "-aid", (aid == null) ? "-quiet" : aid,
          "-oac", (ac3Remux || dtsRemux) ? "copy" : "pcm",
          (isNotBlank(mixer) && !channels_filter_present) ? "-af" : "-quiet", (isNotBlank(mixer) && !channels_filter_present) ? mixer : "-quiet",
          "-srate", "48000",
          "-o", ffAudioPipe.getInputPipe()
        };

        if (!params.mediaRenderer.isMuxDTSToMpeg()) { // no need to use the PCM trick when media renderer supports DTS
          ffAudioPipe.setModifier(sm);
        }

        if (media != null && media.getDvdtrack() > 0) {
          ffmpegLPCMextract[3] = "-dvd-device";
          ffmpegLPCMextract[4] = filename;
          ffmpegLPCMextract[5] = "dvd://" + media.getDvdtrack();
        } else if (params.stdin != null) {
          ffmpegLPCMextract[3] = "-";
        }

        if (filename.toLowerCase().endsWith(".evo")) {
          ffmpegLPCMextract[4] = "-psprobe";
          ffmpegLPCMextract[5] = "1000000";
        }

        if (params.timeseek > 0) {
          ffmpegLPCMextract[2] = "" + params.timeseek;
        }

        OutputParams ffaudioparams = new OutputParams(configuration);
        ffaudioparams.maxBufferSize = 1;
        ffaudioparams.stdin = params.stdin;
        ProcessWrapperImpl ffAudio = new ProcessWrapperImpl(ffmpegLPCMextract, ffaudioparams);

        params.stdin = null;

        PrintWriter pwMux = new PrintWriter(f);
        pwMux.println("MUXOPT --no-pcr-on-video-pid --no-asyncio --new-audio-pes --vbr --vbv-len=500");
        String videoType = "V_MPEG-2";

        if (params.no_videoencode && params.forceType != null) {
          videoType = params.forceType;
        }

        String fps = "";
        if (params.forceFps != null) {
          fps = "fps=" + params.forceFps + ", ";
        }

        String audioType;
        if (ac3Remux) {
          audioType = "A_AC3";
        } else if (dtsRemux) {
          if (params.mediaRenderer.isMuxDTSToMpeg()) {
            //renderer can play proper DTS track
            audioType = "A_DTS";
          } else {
            // DTS padded in LPCM trick
            audioType = "A_LPCM";
          }
        } else {
          // PCM
          audioType = "A_LPCM";
        }


        // mencoder bug (confirmed with mencoder r35003 + ffmpeg 0.11.1):
        // audio delay is ignored when playing from file start (-ss 0)
        // override with tsmuxer.meta setting
        String timeshift = "";
        if (mencoderAC3RemuxAudioDelayBug) {
          timeshift = "timeshift=" + params.aid.getAudioProperties().getAudioDelay() + "ms, ";
        }

        pwMux.println(videoType + ", \"" + ffVideoPipe.getOutputPipe() + "\", " + fps + "level=4.1, insertSEI, contSPS, track=1");
        pwMux.println(audioType + ", \"" + ffAudioPipe.getOutputPipe() + "\", " + timeshift + "track=2");
        pwMux.close();

        ProcessWrapper pipe_process = pipe.getPipeProcess();
        pw.attachProcess(pipe_process);
        pipe_process.runInNewThread();

        try {
          Thread.sleep(50);
        } catch (InterruptedException e) {
        }

        pipe.deleteLater();
        params.input_pipes[0] = pipe;

        ProcessWrapper ff_pipe_process = ffAudioPipe.getPipeProcess();
        pw.attachProcess(ff_pipe_process);
        ff_pipe_process.runInNewThread();

        try {
          Thread.sleep(50);
        } catch (InterruptedException e) {
        }

        ffAudioPipe.deleteLater();
        pw.attachProcess(ffAudio);
        ffAudio.runInNewThread();
      }
    } else {
      boolean directpipe = Platform.isMac() || Platform.isFreeBSD();
View Full Code Here

TOP

Related Classes of net.pms.io.PipeIPCProcess

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.