Пример #1
0
        protected PesStreamHandler(PesStreamParameters parameters)
        {
            if (null == parameters)
                throw new ArgumentNullException(nameof(parameters));

            StreamType = parameters.StreamType;
            Pid = parameters.Pid;
        }
Пример #2
0
 protected PesStreamHandler(PesStreamParameters parameters)
 {
     if (null == parameters)
     {
         throw new ArgumentNullException(nameof(parameters));
     }
     StreamType = parameters.StreamType;
     _pid       = parameters.Pid;
 }
Пример #3
0
 protected PesStreamHandler(PesStreamParameters parameters)
 {
     if (null == parameters)
     {
         throw new ArgumentNullException("parameters");
     }
     this.StreamType = parameters.StreamType;
     this.Pid        = parameters.Pid;
 }
Пример #4
0
 protected AudioMediaParser(TsStreamType streamType, TConfigurator configurator, ITsPesPacketPool pesPacketPool, IShoutcastMetadataFilterFactory shoutcastMetadataFilterFactory, IMetadataSink metadataSink)
     : base(streamType, configurator, pesPacketPool)
 {
     if (null == shoutcastMetadataFilterFactory)
     {
         throw new ArgumentNullException("shoutcastMetadataFilterFactory");
     }
     if (null == metadataSink)
     {
         throw new ArgumentNullException("metadataSink");
     }
     this._shoutcastMetadataFilterFactory = shoutcastMetadataFilterFactory;
     this._metadataSink = metadataSink;
 }
Пример #5
0
        public StreamBuffer(TsStreamType streamType, Action<TsPesPacket> freePesPacket, IBufferingManager bufferingManager)
        {
            if (null == streamType)
                throw new ArgumentNullException(nameof(streamType));
            if (null == freePesPacket)
                throw new ArgumentNullException(nameof(freePesPacket));
            if (null == bufferingManager)
                throw new ArgumentNullException(nameof(bufferingManager));

            _streamType = streamType;
            _freePesPacket = freePesPacket;
            _bufferingManager = bufferingManager;
            _isMedia = TsStreamType.StreamContents.Audio == _streamType.Contents || TsStreamType.StreamContents.Video == _streamType.Contents;
        }
        public TsPacketizedElementaryStream(IBufferPool bufferPool, ITsPesPacketPool pesPacketPool, Action<TsPesPacket> packetHandler, TsStreamType streamType, uint pid)
        {
            if (null == bufferPool)
                throw new ArgumentNullException(nameof(bufferPool));
            if (null == pesPacketPool)
                throw new ArgumentNullException(nameof(pesPacketPool));

            _bufferPool = bufferPool;
            _pesPacketPool = pesPacketPool;

            _streamType = streamType;
            _pid = pid;

            _handler = packetHandler;
        }
Пример #7
0
 protected MediaParserBase(TsStreamType streamType, TConfigurator configurator, ITsPesPacketPool tsPesPacketPool)
 {
     if (null == streamType)
     {
         throw new ArgumentNullException("streamType");
     }
     if (object.ReferenceEquals((object)default(TConfigurator), (object)configurator))
     {
         throw new ArgumentNullException("configurator");
     }
     if (null == tsPesPacketPool)
     {
         throw new ArgumentNullException("tsPesPacketPool");
     }
     this._streamType      = streamType;
     this._configurator    = configurator;
     this._tsPesPacketPool = tsPesPacketPool;
     this._configurator.ConfigurationComplete += new EventHandler(this.OnConfigurationComplete);
 }
Пример #8
0
 public StreamBuffer(TsStreamType streamType, Action <TsPesPacket> freePesPacket, IBufferingManager bufferingManager)
 {
     if (null == streamType)
     {
         throw new ArgumentNullException("streamType");
     }
     if (null == freePesPacket)
     {
         throw new ArgumentNullException("freePesPacket");
     }
     if (null == bufferingManager)
     {
         throw new ArgumentNullException("bufferingManager");
     }
     this._streamType       = streamType;
     this._freePesPacket    = freePesPacket;
     this._bufferingManager = bufferingManager;
     this._isMedia          = TsStreamType.StreamContents.Audio == this._streamType.Contents || TsStreamType.StreamContents.Video == this._streamType.Contents;
 }
Пример #9
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);
        }
Пример #10
0
        public PesStreamHandler GetPesHandler(TsStreamType streamType, uint pid, IMediaStreamMetadata mediaStreamMetadata, Action <TsPesPacket> nextHandler)
        {
            PesStreamHandler handler;

            if (this._handlers.TryGetValue(pid, out handler))
            {
                Debug.WriteLine("Found PES {0} stream ({1}) with PID {2}", (object)streamType.Contents, (object)streamType.Description, (object)pid);
            }
            else
            {
                Debug.WriteLine("Create PES {0} stream ({1}) with PID {2}", (object)streamType.Contents, (object)streamType.Description, (object)pid);
                PesStreamParameters parameters = this._parameterFactory();
                parameters.Pid                 = pid;
                parameters.StreamType          = streamType;
                parameters.NextHandler         = nextHandler;
                parameters.MediaStreamMetadata = mediaStreamMetadata;
                handler             = this._handlerFactory.CreateHandler(parameters);
                this._handlers[pid] = handler;
            }
            return(handler);
        }
Пример #11
0
        public IStreamBuffer CreateStreamBuffer(TsStreamType streamType)
        {
            this.ThrowIfDisposed();
            StreamBuffer streamBuffer = new StreamBuffer(streamType, new Action <TsPesPacket>(this._packetPool.FreePesPacket), (IBufferingManager)this);
            bool         lockTaken    = false;
            object       obj          = null;

            try
            {
                Monitor.Enter(obj = this._lock, ref lockTaken);
                this._queues.Add((IBufferingQueue)streamBuffer);
                this.ResizeStatuses();
            }
            finally
            {
                if (lockTaken)
                {
                    Monitor.Exit(obj);
                }
            }
            return((IStreamBuffer)streamBuffer);
        }
Пример #12
0
        public PesStreamHandler GetPesHandler(TsStreamType streamType, uint pid, IMediaStreamMetadata mediaStreamMetadata, Action<TsPesPacket> nextHandler)
        {
            PesStreamHandler handler;

            if (_handlers.TryGetValue(pid, out handler))
                Debug.WriteLine("Found PES {0} stream ({1}) with PID {2}", streamType.Contents, streamType.Description, pid);
            else
            {
                Debug.WriteLine("Create PES {0} stream ({1}) with PID {2}", streamType.Contents, streamType.Description, pid);

                var parameters = _parameterFactory();

                parameters.Pid = pid;
                parameters.StreamType = streamType;
                parameters.NextHandler = nextHandler;
                parameters.MediaStreamMetadata = mediaStreamMetadata;

                handler = _handlerFactory.CreateHandler(parameters);

                _handlers[pid] = handler;
            }

            return handler;
        }
 public IStreamBuffer CreateStreamBuffer(TsStreamType streamType)
 {
     return((IStreamBuffer) new StreamBuffer(streamType, new Action <TsPesPacket>(this._packetPool.FreePesPacket), (IBufferingManager)this));
 }
Пример #14
0
        public IStreamBuffer CreateStreamBuffer(TsStreamType streamType)
        {
            ThrowIfDisposed();

            var buffer = new StreamBuffer(streamType, _packetPool.FreePesPacket, this);

            lock (_lock)
            {
                _queues.Add(buffer);

                ResizeStatuses();
            }

            return buffer;
        }
Пример #15
0
        TsPacketizedElementaryStream CreatePacketizedElementaryStream(TsStreamType streamType, uint pid, IMediaStreamMetadata mediaStreamMetadata)
        {
            var streamBuffer = _bufferingManager.CreateStreamBuffer(streamType);

            MediaStream mediaStream = null;

            var pesStreamHandler = _pesHandlers.GetPesHandler(streamType, pid, mediaStreamMetadata, packet =>
            {
                // ReSharper disable AccessToModifiedClosure
                if (null != mediaStream)
                    mediaStream.EnqueuePacket(packet);
                else if (null != packet)
                    _tsPesPacketPool.FreePesPacket(packet);
                // ReSharper restore AccessToModifiedClosure
            });

            var pes = new TsPacketizedElementaryStream(_bufferPool, _tsPesPacketPool, pesStreamHandler.PacketHandler, streamType, pid);

            var configurator = pesStreamHandler.Configurator;

            if (null != configurator)
            {
                EventHandler configuratorOnConfigurationComplete = null;

                configuratorOnConfigurationComplete = (o, e) =>
                {
                    configurator.ConfigurationComplete -= configuratorOnConfigurationComplete;

                    CheckConfigurationComplete();
                };

                configurator.ConfigurationComplete += configuratorOnConfigurationComplete;
            }

            mediaStream = new MediaStream(configurator, streamBuffer, _tsPesPacketPool.FreePesPacket);

            AddMediaStream(mediaStream);

            _tsTimemestamp.RegisterMediaStream(mediaStream, pesStreamHandler.GetDuration);

            if (null == configurator)
                CheckConfigurationComplete();

            return pes;
        }
Пример #16
0
 public TsPacketizedElementaryStream CreateStream(TsStreamType streamType, uint pid, IMediaStreamMetadata mediaStreamMetadata)
 {
     return _pesStreamFactory(streamType, pid, mediaStreamMetadata);
 }
Пример #17
0
 public IStreamBuffer CreateStreamBuffer(TsStreamType streamType)
 {
     return new StreamBuffer(streamType, _packetPool.FreePesPacket, this);
 }