コード例 #1
0
 public static CaptureSession StartCapture(CaptureParameters parameters, IConsole console = null, EventHandler starting = null)
 {
     return(new CaptureSession(BuildCaptureArguments(parameters), parameters.ControlStructure, console, starting));
 }
コード例 #2
0
        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());
        }