public TCPBridgeThread(StreamKind kind, IOutTarget target, string ip, int port, CancellationToken Token) { this.Kind = kind; this.Token = Token; Ip = ip; Port = port; Target = target; }
static IMutliStreamManager ParseLegacyArgs(string[] args) { IOutTarget VTarget = null, ATarget = null; void ParseTargetArgs(int baseIndex, ref IOutTarget t) { switch (args[baseIndex + 1]) { case "mpv": case "stdin": { string fargs = ""; if (args[baseIndex + 1] == "mpv") { fargs = args[baseIndex] == "video" ? "- --no-correct-pts --fps=30 " : "- --no-video --demuxer=rawaudio --demuxer-rawaudio-rate=48000 "; } if (args.Length > baseIndex + 4 && args[baseIndex + 3] == "args") { fargs += args[baseIndex + 4]; } t = new StdInTarget(args[baseIndex + 2], fargs); break; } case "tcp": { int port = int.Parse(args[baseIndex + 2]); Console.WriteLine($"Waiting for a client to connect on {port} ..."); t = new TCPTarget(System.Net.IPAddress.Any, port); break; } case "file": t = new OutFileTarget(args[baseIndex + 2]); break; default: throw new Exception($"{args[baseIndex + 1]} is not a valid video mode"); } } int index = Array.IndexOf(args, "video"); if (index >= 0) { ParseTargetArgs(index, ref VTarget); } index = Array.IndexOf(args, "audio"); if (index >= 0) { ParseTargetArgs(index, ref ATarget); } return(new SimpleStreamManager(VTarget, ATarget)); }
protected StreamThread(CancellationToken token, StreamKind kind, UsbDevStream dev, IOutTarget target, byte[] magic, int BufMax) { Token = token; Kind = kind; Device = dev; Target = target; MagicPacket = magic; MaxBufSize = BufMax; }
public SysDvrRTSPServer(bool videoSupport, bool audioSupport, bool localOnly, int port) { SysDVRVideoRTSPTarget v = null; SysDVRAudioRTSPTarget a = null; if (videoSupport) { v = new SysDVRVideoRTSPTarget(); } if (audioSupport) { a = new SysDVRAudioRTSPTarget(); } Video = v; Audio = a; server = new RtspServer(port, v, a, localOnly); }
public StreamingThread(StreamKind kind, IOutTarget target) { Kind = kind; Target = target; }
public AudioStreamThread(CancellationToken token, IOutTarget StreamTarget, UsbDevStream InputDevice, bool PrintStatsArg = false) : base(token, StreamKind.Audio, InputDevice, StreamTarget, REQMagic_AUDIO, AbufMaxSz) { PrintStats = PrintStatsArg; }
public VideoStreamThread(CancellationToken token, IOutTarget StreamTarget, UsbDevStream InputDevice, bool PrintStatsArg = false) : base(token, StreamKind.Video, InputDevice, StreamTarget, REQMagic_VIDEO, VbufMaxSz) { PrintStats = PrintStatsArg; }
static void Main(string[] args) { Console.WriteLine("UsbStream - 2.0 by exelix"); Console.WriteLine("https://github.com/exelix11/SysDVR \r\n"); if (args.Length < 3) { PrintGuide(); return; } IOutTarget VTarget = null; IOutTarget ATarget = null; bool PrintStats = false; bool DesyncFix = false; LogLevel UsbLogLevel = LogLevel.Error; void ParseTargetArgs(int baseIndex, ref IOutTarget t) { switch (args[baseIndex + 1]) { case "mpv": case "stdin": { string fargs = ""; if (args[baseIndex + 1] == "mpv") { fargs = args[baseIndex] == "video" ? "- --no-correct-pts --fps=30 " : "- --no-video --demuxer=rawaudio --demuxer-rawaudio-rate=48000 "; } if (args.Length > baseIndex + 4 && args[baseIndex + 3] == "args") { fargs += args[baseIndex + 4]; } t = new StdInTarget(args[baseIndex + 2], fargs); break; } case "tcp": { int port = int.Parse(args[baseIndex + 2]); Console.WriteLine($"Waiting for a client to connect on {port} ..."); t = new TCPTarget(System.Net.IPAddress.Any, port); break; } case "file": t = new OutFileTarget(args[baseIndex + 2]); break; default: throw new Exception($"{args[baseIndex + 1]} is not a valid video mode"); } } bool HasArg(string arg) => Array.IndexOf(args, arg) != -1; { int index = Array.IndexOf(args, "video"); if (index >= 0) { ParseTargetArgs(index, ref VTarget); } index = Array.IndexOf(args, "audio"); if (index >= 0) { ParseTargetArgs(index, ref ATarget); } DesyncFix = HasArg("--desync-fix"); PrintStats = HasArg("--print-stats"); if (HasArg("--usb-warn")) { UsbLogLevel = LogLevel.Info; } if (HasArg("--usb-debug")) { UsbLogLevel = LogLevel.Debug; } } if (VTarget == null && ATarget == null) { Console.WriteLine("Specify at least a video or audio target"); return; } var stream = GetDevice(UsbLogLevel); if (stream == null) { Console.WriteLine("Device not found, did you configure the drivers properly ?"); return; } CancellationTokenSource StopThreads = new CancellationTokenSource(); VideoStreamThread Video = null; if (VTarget != null) { Video = new VideoStreamThread(StopThreads.Token, VTarget, stream.OpenStreamDefault(), PrintStats, DesyncFix); } AudioStreamThread Audio = null; if (ATarget != null) { Audio = new AudioStreamThread(StopThreads.Token, ATarget, stream.OpenStreamAlt(), PrintStats); } Video?.StartThread(); Audio?.StartThread(); Console.WriteLine("Starting stream, press return to stop"); Console.ReadLine(); Console.WriteLine("Terminating threads..."); StopThreads.Cancel(); Video?.JoinThread(); Audio?.JoinThread(); Video?.Dispose(); Audio?.Dispose(); LibUsbCtx.Dispose(); }