public FFmpegPipeline Concat(ConcatInputFile concatInputFile, FFmpegState ffmpegState) { concatInputFile.AddOption(new ConcatInputFormat()); concatInputFile.AddOption(new RealtimeInputOption()); concatInputFile.AddOption(new InfiniteLoopInputOption(HardwareAccelerationMode.None)); _pipelineSteps.Add(new NoSceneDetectOutputOption(0)); _pipelineSteps.Add(new EncoderCopyAll()); if (ffmpegState.DoNotMapMetadata) { _pipelineSteps.Add(new DoNotMapMetadataOutputOption()); } foreach (string desiredServiceProvider in ffmpegState.MetadataServiceProvider) { _pipelineSteps.Add(new MetadataServiceProviderOutputOption(desiredServiceProvider)); } foreach (string desiredServiceName in ffmpegState.MetadataServiceName) { _pipelineSteps.Add(new MetadataServiceNameOutputOption(desiredServiceName)); } _pipelineSteps.Add(new OutputFormatMpegTs()); _pipelineSteps.Add(new PipeProtocol()); if (ffmpegState.SaveReport) { _pipelineSteps.Add(new FFReportVariable(_reportsFolder, concatInputFile)); } return(new FFmpegPipeline(_pipelineSteps)); }
public Command ConcatChannel(string ffmpegPath, bool saveReports, Channel channel, string scheme, string host) { var resolution = new FrameSize(channel.FFmpegProfile.Resolution.Width, channel.FFmpegProfile.Resolution.Height); var concatInputFile = new ConcatInputFile( $"http://localhost:{Settings.ListenPort}/ffmpeg/concat/{channel.Number}", resolution); var pipelineBuilder = new PipelineBuilder( None, None, None, None, FileSystemLayout.FFmpegReportsFolder, FileSystemLayout.FontsCacheFolder, _logger); FFmpegPipeline pipeline = pipelineBuilder.Concat( concatInputFile, FFmpegState.Concat(saveReports, channel.Name)); return GetCommand(ffmpegPath, None, None, None, concatInputFile, pipeline); }
public bool AppliesTo(ConcatInputFile concatInputFile) => true;
public bool AppliesTo(ConcatInputFile concatInputFile) => false;