void SetupFactory() { Logger.Debug("PeerChannel", "CreateFactory"); if (factory == null) { Logger.Debug("PeerChannel", "factory not found, create it."); var factoryConf = new WebRtcFactoryConfiguration { EnableAudioBufferEvents = false }; if (mediaOption.AudioUpstreamEnabled) { Logger.Debug("PeerChannel", $"audio upstream setting found, set device id: {mediaOption.MicrophoneDevice.Id}"); factoryConf.AudioCaptureDeviceId = mediaOption.MicrophoneDevice.Id; //factoryConf.AudioRenderingEnabled = true; } else { //factoryConf.AudioRenderingEnabled = false; } if (mediaOption.AudioDownstreamEnabled) { Logger.Debug("PeerChannel", $"audio downstream setting found, set device id: {mediaOption.SpeakerDevice.Id}"); factoryConf.AudioRenderDeviceId = mediaOption.SpeakerDevice.Id; //factoryConf.AudioCapturingEnabled = true; } else { //factoryConf.AudioCapturingEnabled = false; } if (mediaOption.VideoUpstreamEnabled && mediaOption.VideoCaptureCapability.DeviceId.Equals(Device.Screen.DeviceId)) { Logger.Debug("PeerChannel", "screen-share setting found, set device id"); factoryConf.CustomVideoFactory = screen.CreateCapturerFactory(); } else { factoryConf.CustomVideoFactory = null; } factory = new WebRtcFactory(factoryConf); /* * factory.OnAudioPostCaptureInitialize += Factory_OnAudioPostCaptureInit; * factory.OnAudioPostCaptureRuntimeSetting += Factory_OnAudioPostCaptureRuntimeSetting; * factory.OnAudioPostCapture += Factory_OnAudioPostCaptureBuffer; * * factory.OnAudioPreRenderInitialize += Factory_OnAudioPreRenderInit; * factory.OnAudioPreRenderRuntimeSetting += Factory_OnAudioPreRenderRuntimeSetting; * factory.OnAudioPreRender += Factory_OnAudioPreRenderBuffer; */ } }
public VideoCapturerCreationParameters CreationParameters(WebRtcFactory factory) { var param = new VideoCapturerCreationParameters(); param.Name = DeviceName; param.Id = DeviceId; if (DeviceId.Equals("screen-share")) { param.Factory = factory; } param.Format = CreateVideoFormat(); return(param); }
/// <summary> /// WebRTC Establishment: Builds the Peer Connection. /// </summary> /// <param name="mediaOptions"></param> /// <returns></returns> private async Task <RTCPeerConnection> BuildPeerConnection(MediaOptions mediaOptions) { return(await Task.Run(() => { var factory = new WebRtcFactory(new WebRtcFactoryConfiguration()); var peerConnection = new RTCPeerConnection( new RTCConfiguration() { Factory = factory, BundlePolicy = RTCBundlePolicy.Balanced, IceTransportPolicy = RTCIceTransportPolicy.All }); peerConnection.OnTrack += this.OnTrack; peerConnection.OnRemoveTrack += this.OnRemoveTrack; if ((mediaOptions.SendVideo || mediaOptions.LocalLoopback) && this.LocalVideoTrack == null) { if (mediaOptions.SendVideo || mediaOptions.LocalLoopback) { this.LocalVideoTrack = this.GetLocalVideo(factory); } } if (mediaOptions.SendAudio && this.LocalAudioTrack == null) { if (mediaOptions.SendAudio) { this.LocalAudioTrack = this.GetLocalAudio(factory); } } if (mediaOptions.SendVideo) { peerConnection.AddTrack(this.LocalVideoTrack); } if (mediaOptions.SendAudio) { peerConnection.AddTrack(this.LocalAudioTrack); } if (mediaOptions.LocalLoopback) { this.LocalVideoTrack.Element = MediaElementMaker.Bind(this.LocalVideo); } return peerConnection; })); }
private RTCConfiguration ConfigureRtc() { var factoryConfig = new WebRtcFactoryConfiguration(); _factory = new WebRtcFactory(factoryConfig); var config = new RTCConfiguration() { Factory = _factory, BundlePolicy = RTCBundlePolicy.Balanced, IceTransportPolicy = RTCIceTransportPolicy.All, IceServers = _iceServers }; return(config); }