public void Setup(NetworkSettings networkPars) { logger.Debug("ScreenReceiver::Setup(...)"); h264Session = new H264Session(); if (networkPars.TransportMode == TransportMode.Tcp) { rtpReceiver = new RtpTcpReceiver(h264Session); } else if (networkPars.TransportMode == TransportMode.Udp) { rtpReceiver = new RtpUdpReceiver(h264Session); } else { throw new Exception("networkPars.TransportMode"); } h264Session.SSRC = networkPars.SSRC; rtpReceiver.Open(networkPars); rtpReceiver.RtpPacketReceived += RtpReceiver_RtpPacketReceived; }
public void Setup(AudioEncoderSettings inputPars, NetworkSettings networkPars) { logger.Debug("AudioReceiver::Setup(...)"); try { decoder = new AudioDecoder(); decoder.Open(inputPars); waveFormat = new WaveFormat(8000, 16, 1); var _deviceId = inputPars.DeviceId; Guid deviceId = Guid.Empty; if (!string.IsNullOrEmpty(_deviceId)) { Guid.TryParse(_deviceId, out deviceId); } DirectSoundDeviceInfo deviceInfo = null; var DSDevices = DirectSoundOut.Devices; if (DSDevices != null && DSDevices.Count() > 0) { //DirectSoundOut.DSDEVID_DefaultPlayback deviceInfo = DSDevices.FirstOrDefault(d => d.Guid == deviceId) ?? DSDevices.FirstOrDefault(); } if (deviceId == null) { throw new Exception("Audio device not found..."); } if (deviceInfo != null) { logger.Info(deviceInfo.Description + " " + deviceInfo.ModuleName + " " + deviceInfo.Guid); wavePlayer = new NAudio.Wave.DirectSoundOut(deviceInfo.Guid); //wavePlayer = new NAudio.Wave.WaveOut(); wavePlayer.PlaybackStopped += WavePlayer_PlaybackStopped; waveBuffer = new BufferedWaveProvider(waveFormat) { BufferDuration = TimeSpan.FromMilliseconds(300), //BufferDuration = TimeSpan.FromMilliseconds(300), DiscardOnBufferOverflow = true }; volumeProvider = new VolumeSampleProvider(waveBuffer.ToSampleProvider()); var meteringSampleProvider = new MeteringSampleProvider(volumeProvider); meteringSampleProvider.StreamVolume += PostVolumeMeter_StreamVolume; wavePlayer.Init(meteringSampleProvider); bufferLost = false; } else { throw new Exception("DirectSound devices is not available..."); } session = new PCMUSession(); if (networkPars.TransportMode == TransportMode.Tcp) { rtpReceiver = new RtpTcpReceiver(session); } else { rtpReceiver = new RtpUdpReceiver(session); } session.SSRC = networkPars.SSRC; rtpReceiver.Open(networkPars); rtpReceiver.RtpPacketReceived += RtpReceiver_RtpPacketReceived; } catch (Exception ex) { logger.Debug(ex); CleanUp(); throw; } }
public void OnAddTrack(IRtpReceiver rtpReceiver, IMediaStream[] mediaStreams) { }
//public IntPtr hWnd = IntPtr.Zero; public void Setup(VideoEncoderSettings inputPars, VideoEncoderSettings outputPars, NetworkSettings networkPars) { logger.Debug("ScreenReceiver::Setup(...)"); var inputArgs = new MfVideoArgs { Width = inputPars.Resolution.Width, Height = inputPars.Resolution.Height, FrameRate = MfTool.PackToLong(inputPars.FrameRate), }; var outputArgs = new MfVideoArgs { Width = outputPars.Resolution.Width, Height = outputPars.Resolution.Height, FrameRate = MfTool.PackToLong(outputPars.FrameRate), }; int adapterIndex = 0; using (var dxgiFactory = new SharpDX.DXGI.Factory1()) { using (var adapter = dxgiFactory.GetAdapter1(adapterIndex)) { device = new Device(adapter, //DeviceCreationFlags.Debug | DeviceCreationFlags.VideoSupport | DeviceCreationFlags.BgraSupport); using (var multiThread = device.QueryInterface <SharpDX.Direct3D11.Multithread>()) { multiThread.SetMultithreadProtected(true); } } } sharedTexture = new Texture2D(device, new Texture2DDescription { CpuAccessFlags = CpuAccessFlags.None, BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource, Format = SharpDX.DXGI.Format.B8G8R8A8_UNorm, Width = outputArgs.Width, //640,//texture.Description.Width, Height = outputArgs.Height, //480,//texture.Description.Height, MipLevels = 1, ArraySize = 1, SampleDescription = { Count = 1, Quality = 0 }, Usage = ResourceUsage.Default, //OptionFlags = ResourceOptionFlags.GdiCompatible//ResourceOptionFlags.None, OptionFlags = ResourceOptionFlags.Shared, }); //ImageProvider = new D3DImageProvider(dispatcher); //decoder = new DXVADecoder(IntPtr.Zero); decoder = new MfH264Decoder(device); decoder.Setup(inputArgs); var decoderType = decoder.OutputMediaType; var decFormat = decoderType.Get(MediaTypeAttributeKeys.Subtype); var decFrameSize = MfTool.GetFrameSize(decoderType); processor = new MfVideoProcessor(device); var inProcArgs = new MfVideoArgs { Width = decFrameSize.Width, Height = decFrameSize.Height, Format = decFormat, }; var outProcArgs = new MfVideoArgs { Width = outputArgs.Width, Height = outputArgs.Height, Format = VideoFormatGuids.Argb32, }; processor.Setup(inProcArgs, outProcArgs); h264Session = new H264Session(); if (networkPars.TransportMode == TransportMode.Tcp) { rtpReceiver = new RtpTcpReceiver(h264Session); } else if (networkPars.TransportMode == TransportMode.Udp) { rtpReceiver = new RtpUdpReceiver(h264Session); } else { throw new Exception("networkPars.TransportMode"); } h264Session.SSRC = networkPars.SSRC; rtpReceiver.Open(networkPars); rtpReceiver.RtpPacketReceived += RtpReceiver_RtpPacketReceived; }