Beispiel #1
0
        private TsPacketizedElementaryStream CreatePacketizedElementaryStream(TsStreamType streamType, uint pid, IMediaStreamMetadata mediaStreamMetadata)
        {
            IStreamBuffer    streamBuffer = this._bufferingManager.CreateStreamBuffer(streamType);
            MediaStream      mediaStream  = (MediaStream)null;
            PesStreamHandler pesHandler   = this._pesHandlers.GetPesHandler(streamType, pid, mediaStreamMetadata, (Action <TsPesPacket>)(packet =>
            {
                if (null != mediaStream)
                {
                    mediaStream.EnqueuePacket(packet);
                }
                else
                {
                    if (null == packet)
                    {
                        return;
                    }
                    this._tsPesPacketPool.FreePesPacket(packet);
                }
            }));
            TsPacketizedElementaryStream elementaryStream = new TsPacketizedElementaryStream(this._bufferPool, this._tsPesPacketPool, new Action <TsPesPacket>(pesHandler.PacketHandler), streamType, pid);
            IConfigurationSource         configurator     = pesHandler.Configurator;

            if (null != configurator)
            {
                EventHandler configuratorOnConfigurationComplete = (EventHandler)null;
                configuratorOnConfigurationComplete = (EventHandler)((o, e) =>
                {
                    configurator.ConfigurationComplete -= configuratorOnConfigurationComplete;
                    this.CheckConfigurationComplete();
                });
                configurator.ConfigurationComplete += configuratorOnConfigurationComplete;
            }
            mediaStream = new MediaStream(configurator, streamBuffer, new Action <TsPesPacket>(this._tsPesPacketPool.FreePesPacket));
            this.AddMediaStream(mediaStream);
            this._tsTimemestamp.RegisterMediaStream(mediaStream, new Func <TsPesPacket, TimeSpan?>(pesHandler.GetDuration));
            if (null == configurator)
            {
                this.CheckConfigurationComplete();
            }
            return(elementaryStream);
        }