Пример #1
0
        public MediaStream(IConfigurationSource configurator, IStreamBuffer streamBuffer, Action<TsPesPacket> freePacket)
        {
            if (null == streamBuffer)
                throw new ArgumentNullException(nameof(streamBuffer));
            if (null == freePacket)
                throw new ArgumentNullException(nameof(freePacket));

            _configurator = configurator;
            _streamBuffer = streamBuffer;
            _freePacket = freePacket;
        }
Пример #2
0
 public void Initialize(IBufferingManager bufferingManager, Action <IProgramStreams> programStreamsHandler = null)
 {
     if (null == bufferingManager)
     {
         throw new ArgumentNullException("bufferingManager");
     }
     this._bufferingManager = bufferingManager;
     this._streamBuffer     = bufferingManager.CreateStreamBuffer(this._streamType);
     this._mediaStream      = new MediaStream((IConfigurationSource)this._configurator, this._streamBuffer, new Action <TsPesPacket>(this._tsPesPacketPool.FreePesPacket));
     this._mediaStreams     = (ICollection <IMediaParserMediaStream>) new MediaStream[1]
     {
         this._mediaStream
     };
 }
Пример #3
0
 public MediaStream(IConfigurationSource configurator, IStreamBuffer streamBuffer, Action <TsPesPacket> freePacket)
 {
     if (null == streamBuffer)
     {
         throw new ArgumentNullException("streamBuffer");
     }
     if (null == freePacket)
     {
         throw new ArgumentNullException("freePacket");
     }
     this._configurator = configurator;
     this._streamBuffer = streamBuffer;
     this._freePacket   = freePacket;
 }
Пример #4
0
        public static Datagram Create(IStreamBuffer streamBuffer)
        {
            var index = -1;

            while ((index = streamBuffer.IndexOf(Datagram.DatagramHeader)) >= 0)
            {
                streamBuffer.Seek(index);
                if (streamBuffer.Length < 13)
                {
                    return(null);
                }

                var buffer = new byte[5];
                streamBuffer.ReadOnly(buffer, 0, buffer.Length);

                var length = (buffer[1] << 24) + (buffer[2] << 16) + (buffer[3] << 8) + (buffer[4]);
                if (length + 13 >= streamBuffer.Capacity)
                {
                    streamBuffer.Reset();
                    return(null);
                }
                if (streamBuffer.Length < length + 13)
                {
                    return(null);
                }

                var data = new byte[length + 13];
                streamBuffer.ReadOnly(data, 0, data.Length);

                if (DatagramFactory.Verify(data))
                {
                    streamBuffer.Seek(data.Length);
                    return(DatagramFactory.Create(data));
                }
                else
                {
                    streamBuffer.Seek(1);
                }
            }

            return(null);
        }
Пример #5
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);
        }
Пример #6
0
 protected virtual void Dispose(bool disposing)
 {
     if (!disposing)
     {
         return;
     }
     if (!object.Equals((object)default(TConfigurator), (object)this._configurator))
     {
         this._configurator.ConfigurationComplete -= new EventHandler(this.OnConfigurationComplete);
     }
     if (null != this.ConfigurationComplete)
     {
         Debug.WriteLine("MediaParserBase<>.Dispose(bool) ConfigurationComplete event is still subscribed");
         this.ConfigurationComplete = (EventHandler)null;
     }
     using (this._streamBuffer)
         ;
     using (this._mediaStream)
         ;
     this._mediaStreams     = (ICollection <IMediaParserMediaStream>)null;
     this._mediaStream      = (MediaStream)null;
     this._bufferingManager = (IBufferingManager)null;
     this._streamBuffer     = (IStreamBuffer)null;
 }