예제 #1
0
        //public void SignalONS(BaseOutNetRTMPStream pONS)
        //{
        //    if (_pSignaledRTMPOutNetStream.Contains(pONS)) return;
        //    _pSignaledRTMPOutNetStream.AddLast(pONS);
        //}

        public InFileRTMPStream CreateIFS(Variant metadata)
        {
            var pRtmpInFileStream = InFileRTMPStream.GetInstance(this, Application.StreamsManager, metadata);

            if (pRtmpInFileStream == null)
            {
                WARN("Unable to get file stream. Metadata:\n{0}", metadata.ToString());
                return(null);
            }
            if (!pRtmpInFileStream.Initialize(metadata[CONF_APPLICATION_CLIENTSIDEBUFFER]))
            {
                WARN("Unable to initialize file inbound stream");
                pRtmpInFileStream.Dispose();
                return(null);
            }
            // _inFileStreams.Add(pRtmpInFileStream);
            return(pRtmpInFileStream);
        }
예제 #2
0
 private void RemoveIFS(InFileRTMPStream pIFS) => pIFS.Dispose();
예제 #3
0
        public override OutNetRtmfpStream SubScribeStream(Peer peer, uint id, string name, FlowWriter writer, double start, double length)
        {
            var session           = writer.Band as Session;
            var outNetRtmfpStream = new OutNetRtmfpStream(session, session.Application.StreamsManager, id, name)
            {
                Writer = writer, Unbuffered = start == -3000
            };

            outNetRtmfpStream.Init();
            var inBoundStream = session.Application.StreamsManager.FindByTypeByName(StreamTypes.ST_IN_NET, name, true, false).Select(x => x.Value).OfType <IInStream>().FirstOrDefault();

            switch ((int)start)
            {
            case -2000:
                if (inBoundStream != null)
                {
                    inBoundStream.Link(outNetRtmfpStream);
                }
                else
                {
                    goto default;
                }
                break;

            case -1000:
                if (inBoundStream != null)
                {
                    inBoundStream.Link(outNetRtmfpStream);
                }
                else
                {
                    goto case -999;
                }
                break;

            case -999:
                if (ClientApplicationManager.ClusterApplication != null)
                {
                    ClientApplicationManager.ClusterApplication.GetProtocolHandler <BaseClusterAppProtocolHandler>().PlayStream(session.Application.Id, name);
                }
                break;

            default:
                var metadata          = session.Application.StreamsManager.GetMetaData(name, true, session.Application.Configuration);
                var pRtmpInFileStream = InFileRTMPStream.GetInstance(session, session.Application.StreamsManager, metadata);
                if (pRtmpInFileStream == null)
                {
                    WARN("Unable to get file stream. Metadata:\n{0}", metadata.ToString());
                    goto case -999;
                }
                if (!pRtmpInFileStream.Initialize(metadata[Defines.CONF_APPLICATION_CLIENTSIDEBUFFER]))
                {
                    WARN("Unable to initialize file inbound stream");
                    pRtmpInFileStream.Dispose();
                    goto case -999;
                }
                if (!pRtmpInFileStream.Link(outNetRtmfpStream))
                {
                    goto case -999;
                }
                if (!pRtmpInFileStream.Play(start, length))
                {
                    FATAL("Unable to start the playback");
                    goto case -999;
                }
                break;
            }
            return(outNetRtmfpStream);
        }