/// <summary> /// Asynchronously streams a windows screen and audio capture to a specified IP-Address. /// </summary> /// <returns>The windows screen to ip async.</returns> /// <param name="videoDeviceName">Video device name.</param> /// <param name="audioDeviceName">Audio device name.</param> /// <param name="ip">IP-Address.</param> /// <param name="mode">Streaming mode.</param> /// <param name="frameRate">Desired frame rate.</param> /// <param name="quality">Quality of compression.</param> public async Task<bool> StreamWindowsScreenToIpAsync (string videoDeviceName, string audioDeviceName, string ip, string port, VideoCodec vcodec, AudioCodec acodec, StreamingMode mode, int frameRate, Resolution outputSize, string videoExtras, int quality = 20) { // TODO: -b for bitrate string input = string.Format ( "-f dshow -i video=\"{0}\":audio=\"{1}\" -r {2} -async 1 -vcodec {3} {4} -q {5} -s {6} -maxrate 750k -bufsize 3000k -acodec {7} -ab 128k", videoDeviceName, audioDeviceName, frameRate.ToString(), FFmpegManager.GetCodecName(vcodec), videoExtras, quality.ToString(), outputSize, FFmpegManager.GetCodecName(acodec) ); string output = string.Format ( "-f mpegts udp://{0}:{1}?pkt_size=188?buffer_size=10000000?fifo_size=100000", ip, port ); string args = input + " " + output; try { FFmpegProcess = FFmpegManager.GetFFmpegProcess(args); } catch(FileNotFoundException e) { throw new FileNotFoundException (e.Message, e); } FFmpegProcess.Start (); await Task.Run(() => FFmpegProcess.WaitForExit ()); return true; }
/// <summary> /// Captures the screen on linux systems. /// </summary> /// <param name="inputResolution">Input screen resolution.</param> /// <param name="frameRate">Desired frame rate.</param> public void CaptureLinuxScreen (Resolution inputResolution, int frameRate) { string args = string.Format("-video_size {0} -framerate {1} -f x11grab -i :0.0+100,200 -f alsa -ac 2 -i pulse output.flv", inputResolution, frameRate.ToString()); FFmpegProcess = FFmpegManager.RunFFmpegProcess(args); FFmpegProcess.ErrorDataReceived += OnDataReceived; }
/// <summary> /// Streams the video to URL. /// </summary> /// <param name="url">URL.</param> /// <param name="inputResolution">Input resolution.</param> /// <param name="outputResolution">Output resolution.</param> public void StreamVideoToUrl(string url, Resolution inputResolution, Resolution outputResolution) { // -preset ultrafast -tune zerolatency TODO: Checken! string args = string.Format( "-f x11grab -s {0} -r 15 -i :0.0 -c:v libx264 -preset fast -pix_fmt yuv420p -s {1} -threads 0 -f flv \"{2}\"", inputResolution, outputResolution, url ); FFmpegProcess = FFmpegManager.RunFFmpegProcess(args); FFmpegProcess.ErrorDataReceived += OnDataReceived; }