Пример #1
0
		/// <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;
		}
Пример #2
0
		/// <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;
		}
Пример #3
0
		/// <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;
		}