/// <summary> /// /// </summary> /// <param name="dependencies"></param> public RenderStreamingInternal(ref RenderStreamingDependencies dependencies) { if (dependencies.signaling == null) { throw new ArgumentException("Signaling instance is null."); } if (dependencies.startCoroutine == null) { throw new ArgumentException("Coroutine action instance is null."); } if (s_list.Count == 0) { WebRTC.WebRTC.Initialize(dependencies.encoderType); } _config = dependencies.config; _startCoroutine = dependencies.startCoroutine; _signaling = dependencies.signaling; _signaling.OnStart += OnStart; _signaling.OnCreateConnection += OnCreateConnection; _signaling.OnDestroyConnection += OnDestroyConnection; _signaling.OnOffer += OnOffer; _signaling.OnAnswer += OnAnswer; _signaling.OnIceCandidate += OnIceCandidate; _signaling.Start(); s_list.Add(this); _startCoroutine(WebRTC.WebRTC.Update()); }
private void _Run( RTCConfiguration?conf = null, bool?hardwareEncoder = null, ISignaling signaling = null, SignalingHandlerBase[] handlers = null ) { RTCConfiguration _conf = conf.GetValueOrDefault(new RTCConfiguration { iceServers = iceServers }); if (hardwareEncoder != null) { hardwareEncoderSupport = hardwareEncoder.Value; } var encoderType = hardwareEncoderSupport ? EncoderType.Hardware : EncoderType.Software; if (signaling != null) { signalingType = signaling.GetType().FullName; //todo:: This property is not needed by FurioosSignaling. urlSignaling = signaling.Url; interval = signaling.Interval; } ISignaling _signaling = signaling ?? CreateSignaling( signalingType, urlSignaling, interval, SynchronizationContext.Current); RenderStreamingDependencies dependencies = new RenderStreamingDependencies { config = _conf, encoderType = encoderType, signaling = _signaling, startCoroutine = StartCoroutine, resentOfferInterval = interval, }; var _handlers = (handlers ?? this.handlers.AsEnumerable()).Where(_ => _ != null); if (_handlers.Count() == 0) { throw new InvalidOperationException("Handler list is empty."); } m_instance = new RenderStreamingInternal(ref dependencies); m_provider = new SignalingEventProvider(m_instance); foreach (var handler in _handlers) { handler.SetHandler(m_instance); m_provider.Subscribe(handler); } m_running = true; }
/// <summary> /// /// </summary> /// <param name="conf"></param> /// <param name="hardwareEncoder"></param> /// <param name="signaling"></param> /// <param name="handlers"></param> public void Run( RTCConfiguration?conf = null, bool?hardwareEncoder = null, ISignaling signaling = null, SignalingHandlerBase[] handlers = null ) { RTCConfiguration _conf = conf.GetValueOrDefault(new RTCConfiguration { iceServers = iceServers }); if (hardwareEncoder != null) { hardwareEncoderSupport = hardwareEncoder.Value; } var encoderType = hardwareEncoderSupport ? EncoderType.Hardware : EncoderType.Software; if (signaling != null) { signalingType = signaling.GetType().FullName; //todo:: This property is not needed by FurioosSignaling. urlSignaling = signaling.Url; interval = signaling.Interval; } ISignaling _signaling = signaling ?? CreateSignaling( signalingType, urlSignaling, interval, SynchronizationContext.Current); RenderStreamingDependencies dependencies = new RenderStreamingDependencies { config = _conf, encoderType = encoderType, signaling = _signaling, startCoroutine = StartCoroutine, resentOfferInterval = interval, }; m_instance = new RenderStreamingInternal(ref dependencies); m_provider = new SignalingEventProvider(m_instance); SignalingHandlerBase[] _handlers = handlers ?? this.handlers.ToArray(); foreach (var source in _handlers) { source.SetHandler(m_instance); m_provider.Subscribe(source); } m_running = true; }
/// <summary> /// /// </summary> /// <param name="conf"></param> /// <param name="hardwareEncoder"></param> /// <param name="signaling"></param> /// <param name="handlers"></param> public void Run( RTCConfiguration?conf = null, bool?hardwareEncoder = null, ISignaling signaling = null, SignalingHandlerBase[] handlers = null ) { RTCConfiguration _conf = conf.GetValueOrDefault(new RTCConfiguration { iceServers = iceServers }); bool _hardwareEncoder = hardwareEncoder.GetValueOrDefault(hardwareEncoderSupport); var encoderType = _hardwareEncoder ? EncoderType.Hardware : EncoderType.Software; ISignaling _signaling = signaling ?? CreateSignaling( signalingType, urlSignaling, interval, SynchronizationContext.Current); RenderStreamingDependencies dependencies = new RenderStreamingDependencies { config = _conf, encoderType = encoderType, signaling = _signaling, startCoroutine = StartCoroutine }; m_instance = new RenderStreamingInternal(ref dependencies); m_provider = new SignalingEventProvider(m_instance); SignalingHandlerBase[] _handlers = handlers ?? this.handlers.ToArray(); foreach (var source in _handlers) { source.SetHandler(m_instance); m_provider.Subscribe(source); } m_running = true; }