Exemplo n.º 1
0
        /// <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());
        }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 3
0
        /// <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;
        }
Exemplo n.º 4
0
        /// <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;
        }