コード例 #1
0
        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;
                 */
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: WebRtcConductor.cs プロジェクト: p4telj/ApolloLens2
        /// <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;
            }));
        }
コード例 #4
0
        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);
        }