Package net.pms.encoders

Source Code of net.pms.encoders.MEncoderWebVideo

/*
* PS3 Media Server, for streaming any medias to your PS3.
* Copyright (C) 2008  A.Brochard
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; version 2
* of the License only.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/
package net.pms.encoders;

import net.pms.configuration.PmsConfiguration;
import net.pms.dlna.DLNAMediaInfo;
import net.pms.dlna.DLNAResource;
import net.pms.formats.Format;
import net.pms.io.OutputParams;
import net.pms.io.PipeProcess;
import net.pms.io.ProcessWrapper;
import net.pms.io.ProcessWrapperImpl;
import net.pms.util.PlayerUtil;

import javax.swing.*;
import java.io.IOException;

public class MEncoderWebVideo extends Player {
  public static final String ID = "mencoderwebvideo";
  private final PmsConfiguration configuration;

  @Override
  public JComponent config() {
    return null;
  }

  @Override
  public String id() {
    return ID;
  }

  @Override
  public PlayerPurpose getPurpose() {
    return PlayerPurpose.VIDEO_WEB_STREAM_PLAYER;
  }

  @Override
  public boolean isTimeSeekable() {
    return false;
  }

  @Override
  public String mimeType() {
    return "video/mpeg";
  }

  protected String[] getDefaultArgs() {
    int nThreads = configuration.getMencoderMaxThreads();
    String acodec = configuration.isMencoderAc3Fixed() ? "ac3_fixed" : "ac3";
    return new String[]{
        "-msglevel", "all=2",
        "-quiet",
        "-prefer-ipv4",
        "-cache", "16384",
        "-oac", "lavc",
        "-of", "lavf",
        "-lavfopts", "format=dvd",
        "-ovc", "lavc",
        "-lavcopts", "vcodec=mpeg2video:vbitrate=4096:threads=" + nThreads + ":acodec=" + acodec + ":abitrate=128",
        "-vf", "harddup",
        "-ofps", "25"
      };
  }

  public MEncoderWebVideo(PmsConfiguration configuration) {
    this.configuration = configuration;
  }

  @Override
  public ProcessWrapper launchTranscode(
    DLNAResource dlna,
    DLNAMediaInfo media,
    OutputParams params
  ) throws IOException {
    params.minBufferSize = params.minFileSize;
    params.secondread_minsize = 100000;

    PipeProcess pipe = new PipeProcess("mencoder" + System.currentTimeMillis());
    params.input_pipes[0] = pipe;

    String cmdArray[] = new String[args().length + 4];
    cmdArray[0] = executable();
    final String filename = dlna.getSystemName();
    cmdArray[1] = filename;

    for (int i = 0; i < args().length; i++) {
      cmdArray[i + 2] = args()[i];
    }

    cmdArray[cmdArray.length - 2] = "-o";
    cmdArray[cmdArray.length - 1] = pipe.getInputPipe();

    ProcessWrapper mkfifo_process = pipe.getPipeProcess();

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

    ProcessWrapperImpl pw = new ProcessWrapperImpl(cmdArray, params);
    pw.attachProcess(mkfifo_process);

    // It can take a long time for Windows to create a named pipe (and
    // mkfifo can be slow if /tmp isn't memory-mapped), so run this in the
    // current thread.
    mkfifo_process.runInSameThread();

    pipe.deleteLater();

    pw.runInNewThread();

    // Not sure what good this 50ms wait will do for the calling method.
    try {
      Thread.sleep(50);
    } catch (InterruptedException e) { }

    return pw;
  }

  @Override
  public String name() {
    return "MEncoder Web Video";
  }

  @Override
  public String[] args() {
    return getDefaultArgs();
  }

  @Override
  public String executable() {
    return configuration.getMencoderPath();
  }

  @Override
  public int type() {
    return Format.VIDEO;
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public boolean isCompatible(DLNAResource resource) {
    return PlayerUtil.isWebVideo(resource);
  }
}
TOP

Related Classes of net.pms.encoders.MEncoderWebVideo

TOP
Copyright © 2018 www.massapi.com. 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.