/* * PS3 Media Server, for streaming any media to your PS3. * Copyright (C) 2008-2013 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.io.OutputParams; import net.pms.io.ProcessWrapper; import net.pms.io.ProcessWrapperImpl; import net.pms.util.PlayerUtil; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.swing.JComponent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class FFmpegWebAudio extends FFmpegAudio { private static final Logger logger = LoggerFactory.getLogger(FFmpegWebAudio.class); private final PmsConfiguration configuration; private final FFmpegProtocols protocols; public static final String ID = "ffmpegwebaudio"; public FFmpegWebAudio(PmsConfiguration configuration) { super(configuration); this.configuration = configuration; this.protocols = getProtocols(); } // use FFmpegWebAudio(PmsConfiguration) @Deprecated public FFmpegWebAudio(PmsConfiguration configuration, FFmpegProtocols protocols) { this(configuration); } @Override public JComponent config() { return null; } @Override public PlayerPurpose getPurpose() { return PlayerPurpose.AUDIO_WEB_STREAM_PLAYER; } @Override public String id() { return ID; } @Override public boolean isTimeSeekable() { return false; } @Override public String name() { return "FFmpeg Web Audio"; } @Override public ProcessWrapper launchTranscode( DLNAResource dlna, DLNAMediaInfo media, OutputParams params ) throws IOException { final String filename = protocols.getFilename(dlna.getSystemName()); params.maxBufferSize = configuration.getMaxAudioBuffer(); params.waitbeforestart = 6000; params.manageFastStart(); int nThreads = configuration.getNumberOfCpuCores(); List<String> cmdList = new ArrayList<String>(); cmdList.add(executable()); cmdList.addAll(getGlobalOptions(logger)); // decoder threads cmdList.add("-threads"); cmdList.add("" + nThreads); cmdList.add("-i"); cmdList.add(filename); // encoder threads cmdList.add("-threads"); cmdList.add("" + nThreads); // Add the output options (-f, -ab, -ar) cmdList.addAll(getAudioTranscodeOptions(dlna, media, params)); cmdList.add("pipe:"); String[] cmdArray = new String[ cmdList.size() ]; cmdList.toArray(cmdArray); cmdArray = finalizeTranscoderArgs( filename, dlna, media, params, cmdArray ); ProcessWrapperImpl pw = new ProcessWrapperImpl(cmdArray, params); pw.runInNewThread(); return pw; } @Override public boolean isCompatible(DLNAResource dlna) { if (!PlayerUtil.isWebAudio(dlna)) { return false; } String protocol = dlna.getFormat().getMatchedExtension(); return protocols.isSupportedProtocol(protocol); } }