SetInbboundConnectivity() public method

public SetInbboundConnectivity ( InboundConnectivity pConnectivity, bool isAudio ) : void
pConnectivity InboundConnectivity
isAudio bool
return void
        public bool Initialize()
        {
            if (_rtsp.Application == null)
            {
                FATAL("RTSP protocol not yet assigned to an application");
                return(false);
            }
            //2. Compute the bandwidthHint
            uint bandwidth = 0;

            if (_videoTrack != null)
            {
                bandwidth += _videoTrack["bandwidth"];
            }
            if (_audioTrack != null)
            {
                bandwidth += _audioTrack["bandwidth"];
            }
            if (bandwidth == 0)
            {
                bandwidth = _bandwidthHint;
            }
            if (_streamName == "")
            {
                _streamName = $"rtsp_{_rtsp.Id}";
            }
            if (!_rtsp.Application.StreamNameAvailable(_streamName, _rtsp))
            {
                FATAL("Stream name {0} already taken", _streamName);
                return(false);
            }
            var streamCapabilities = new StreamCapabilities {
                BandwidthHint = bandwidth
            };

            if (_videoTrack != null)
            {
                streamCapabilities.VideoCodecId = VideoCodec.H264;
                streamCapabilities.InitVideoH264(Utils.DecodeFromBase64(_videoTrack["h264SPS"]), Utils.DecodeFromBase64(_videoTrack["h264PPS"]));
            }
            if (_audioTrack != null)
            {
                streamCapabilities.AudioCodecId = (AudioCodec)(byte)_audioTrack["codec"];
                switch (streamCapabilities.AudioCodecId)
                {
                case AudioCodec.Aac:
                    var aac = Utils.DecodeFromHex(_audioTrack["codecSetup"]);
                    streamCapabilities.InitAudioAAC(new MemoryStream(aac), aac.Length);
                    streamCapabilities.Samplerate = streamCapabilities.Aac._sampleRate;
                    break;

                default:
                    streamCapabilities.Samplerate = _audioTrack["rate"];
                    break;
                }
            }
            _inStream = new InNetRTPStream(_rtsp, _rtsp.Application.StreamsManager, _streamName, streamCapabilities, _rtcpDetectionInterval);
            var session = _rtsp.CustomParameters;

            if (session["customParameters", "externalStreamConfig", "width"] != null &&
                session["customParameters", "externalStreamConfig", "height"] != null)
            {
                StreamCapabilities cap = _inStream.Capabilities;
                if (cap.VideoCodecId == VideoCodec.H264)
                {
                    cap.Avc._widthOverride  = session["customParameters", "externalStreamConfig", "width"];
                    cap.Avc._heightOverride = session["customParameters", "externalStreamConfig", "height"];
                }
            }
            if (_rtpVideo != null)
            {
                _rtpVideo.SetStream(_inStream, false);
                _rtpVideo.InboundConnectivity = this;
                _rtcpVideo.SetInbboundConnectivity(this, false);
            }
            if (_rtpAudio != null)
            {
                _rtpAudio.SetStream(_inStream, true);
                _rtpAudio.InboundConnectivity = this;
                _rtcpAudio.SetInbboundConnectivity(this, true);
            }
            //7. Pickup all outbound waiting streams
            var subscribedOutStreams =
                _rtsp.Application.StreamsManager.GetWaitingSubscribers(
                    _streamName, _inStream.Type);

            //FINEST("subscribedOutStreams count: %"PRIz"u", subscribedOutStreams.size());

            //8. Bind the waiting subscribers
            foreach (var subscribedOutStream in subscribedOutStreams)
            {
                subscribedOutStream.Link(_inStream);
            }

            return(true);
        }