public static CaptureSession StartCapture(CaptureParameters parameters, IConsole console = null, EventHandler starting = null) { return(new CaptureSession(BuildCaptureArguments(parameters), parameters.ControlStructure, console, starting)); }
static string BuildCaptureArguments(CaptureParameters parameters) { StringBuilder args = new StringBuilder(); args.Append("capture"); if (IntPtr.Zero != waitableCurrentProcess) { args.AppendFormat(" lifetime {0}", waitableCurrentProcess); } if (parameters.Source is CaptureParameters.DeviceWASSourceInfo devSource) { args.AppendFormat(" from-was-dev {0}", devSource.DeviceId.EncodeParameterArgument()); } else if (parameters.Source is CaptureParameters.DefaultDeviceWASSourceInfo defSource && (defSource.Flow != DataFlow.Render || defSource.Role != Role.Console)) { args.AppendFormat(" from-was {0} {1}", ToString(defSource.Flow, false).EncodeParameterArgument(), defSource.Role.ToString().ToLowerInvariant().EncodeParameterArgument()); } if (null != parameters.ControlStructure) { args.AppendFormat(" shm {0}", parameters.ControlStructure.Name.EncodeParameterArgument()); if (!parameters.WithSharedMemoryTapSink) { args.Append(" no-shm-tap"); } if (!parameters.WithSharedMemoryAveragingSink) { args.Append(" no-shm-averaging"); } } if (parameters.SampleRate.HasValue) { args.AppendFormat(" samplerate {0}", parameters.SampleRate.GetValueOrDefault()); } if (0 != parameters.Channels) { args.AppendFormat(" channel-mask {0}", (int)parameters.Channels); } if (parameters.NetworkSink is CaptureParameters.NetworkSinkInfo netSink) { if (!string.IsNullOrEmpty(netSink.BindAddress)) { args.AppendFormat(" bind {0}", netSink.BindAddress.EncodeParameterArgument()); } if (!string.IsNullOrEmpty(netSink.PeerAddress) || !string.IsNullOrEmpty(netSink.PeerService)) { args.AppendFormat(" to-network-peer {0} {1}", netSink.PeerAddress.EncodeParameterArgument(), netSink.PeerService.EncodeParameterArgument()); } else { args.Append(" to-network"); } } if (parameters.WASSink is CaptureParameters.DeviceWASSinkInfo devSink) { args.AppendFormat(" to-was-dev {0}", devSink.DeviceId.EncodeParameterArgument()); } else if (parameters.WASSink is CaptureParameters.DefaultDeviceWASSinkInfo defSink) { args.AppendFormat(" to-was {0}", defSink.Role.ToString().ToLowerInvariant().EncodeParameterArgument()); } if (parameters.Duration.HasValue) { args.AppendFormat(" duration {0}", parameters.Duration.GetValueOrDefault().TotalSeconds.ToString().EncodeParameterArgument()); } return(args.ToString()); }