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; }
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 }; }
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; }
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); }
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); }
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; }