Ejemplo n.º 1
0
        public VorbisReader(Stream stream, bool closeStreamOnDispose)
        {
            _decoders = new List<VorbisStreamDecoder>();
            _serials = new List<int>();

            if (stream.CanSeek)
            {
                // TODO: need to check the first byte(s) for Matroska

                _packetProvider = new Ogg.ContainerReader(stream, NewStream);

                // NewStream will populate our decoder list...
            }
            else
            {
                // RTP???
                throw new NotSupportedException("The specified stream is not seekable.");
            }

            _packetProvider.Init();

            _sourceStream = stream;
            _closeSourceOnDispose = closeStreamOnDispose;

            // TODO: check the skeleton to see if we need to find a particular stream serial
            //       to start decoding

            // by this point, the container init should have found at least one vorbis stream...
            if (_decoders.Count == 0) throw new InvalidDataException("No Vorbis data is available in the specified file.");

            _streamIdx = 0;
        }
Ejemplo n.º 2
0
        internal VorbisStreamDecoder(IPacketProvider packetProvider)
        {
            _packetProvider = packetProvider;

            _pagesSeen    = new List <int>();
            _lastPageSeen = -1;
        }
Ejemplo n.º 3
0
 internal VorbisStreamDecoder(IPacketProvider packetProvider)
 {
     _packetProvider = packetProvider;
     _packetProvider.ParameterChange += SetParametersChanging;
     _pagesSeen    = new List <int>();
     _lastPageSeen = -1;
 }
Ejemplo n.º 4
0
        internal VorbisStreamDecoder(IPacketProvider packetProvider)
        {
            _packetProvider = packetProvider;

            _pagesSeen = new List<int>();
            _lastPageSeen = -1;
        }
Ejemplo n.º 5
0
 public VorbisReader(IPacketProvider packetProvider)
     : this()
 {
     var ea = new NewStreamEventArgs(packetProvider);
     NewStream(this, ea);
     if (ea.IgnoreStream) throw new InvalidDataException("No Vorbis data found!");
 }
Ejemplo n.º 6
0
        internal VorbisStreamDecoder(IPacketProvider packetProvider)
        {
            _packetProvider = packetProvider;
            _packetProvider.ParameterChange += SetParametersChanging;

            _pagesSeen = new HashSet <int>();
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Creates an opus decoder and reads from the ogg stream until a data packet is encountered,
        /// queuing it up for future decoding. Tags are also parsed if they are encountered.
        /// </summary>
        /// <returns>True if the stream is valid and ready to be decoded</returns>
        private bool Initialize()
        {
            try
            {
                OggContainerReader reader = new OggContainerReader(_inputStream, true);
                if (!reader.Init())
                {
                    _lastError = "Could not initialize stream";
                    return(false);
                }

                //if (!reader.FindNextStream())
                //{
                //    _lastError = "Could not find elementary stream";
                //    return false;
                //}
                if (reader.StreamSerials.Length == 0)
                {
                    _lastError = "Initialization failed: No elementary streams found in input file";
                    return(false);
                }

                int streamSerial = reader.StreamSerials[0];
                _packetProvider = reader.GetStream(streamSerial);
                QueueNextPacket();

                return(true);
            }
            catch (Exception e)
            {
                _lastError = "Unknown initialization error: " + e.Message;
                return(false);
            }
        }
Ejemplo n.º 8
0
        internal VorbisStreamDecoder(IPacketProvider packetProvider)
        {
            _packetProvider = packetProvider;
            _packetProvider.ParameterChange += SetParametersChanging;

            _pagesSeen = new List<int>();
            _lastPageSeen = -1;
        }
Ejemplo n.º 9
0
 public NewStreamEventArgs(IPacketProvider packetProvider)
 {
     if (packetProvider == null)
     {
         throw new ArgumentNullException("packetProvider");
     }
     PacketProvider = packetProvider;
 }
Ejemplo n.º 10
0
 public void Dispose()
 {
     if (_packetProvider != null)
     {
         var temp = _packetProvider;
         _packetProvider = null;
         temp.Dispose();
     }
 }
Ejemplo n.º 11
0
 public void Dispose()
 {
     if (_packetProvider != null)
     {
         IPacketProvider packetProvider = _packetProvider;
         _packetProvider = null;
         packetProvider.ParameterChange -= SetParametersChanging;
         packetProvider.Dispose();
     }
 }
Ejemplo n.º 12
0
        private void SkipOpusTags(IPacketProvider packetProvider)
        {
            DataPacket packet = packetProvider.PeekNextPacket();
            byte[] buffer = GetPacketData(packet);

            if (Encoding.UTF8.GetString(buffer, 0, 8) == "OpusTags")
            {
                packetProvider.GetNextPacket();
            }
        }
Ejemplo n.º 13
0
 public void Dispose()
 {
     if (_packetProvider != null)
     {
         var temp = _packetProvider;
         _packetProvider       = null;
         temp.ParameterChange -= SetParametersChanging;
         temp.Dispose();
     }
 }
        public VorbisReader(IPacketProvider packetProvider) : this()
        {
            var ea = new NewStreamEventArgs(packetProvider);

            NewStream(this, ea);
            if (ea.IgnoreStream)
            {
                throw new InvalidDataException("No Vorbis data found.");
            }
        }
Ejemplo n.º 15
0
        public VorbisReader(IPacketProvider packetProvider)
            : this()
        {
            NewStreamEventArgs newStreamEventArgs = new NewStreamEventArgs(packetProvider);

            NewStream(this, newStreamEventArgs);
            if (newStreamEventArgs.IgnoreStream)
            {
                throw new InvalidDataException("No Vorbis data found!");
            }
        }
Ejemplo n.º 16
0
 public void Dispose()
 {
     if (this._packetProvider != null)
     {
         this._packetProvider.Dispose();
         this._packetProvider = (IPacketProvider)null;
     }
     if (this._closeSourceOnDispose)
     {
         this._sourceStream.Close();
     }
     this._sourceStream = (Stream)null;
 }
Ejemplo n.º 17
0
        public StreamPageReader(IPageData pageReader, int streamSerial)
        {
            _reader = pageReader;

            // The packet provider has a reference to us, and we have a reference to it.
            // The page reader has a reference to us.
            // The container reader has a _weak_ reference to the packet provider.
            // The user has a reference to the packet provider.
            // So long as the user doesn't drop their reference and the page reader doesn't drop us,
            //  the packet provider will stay alive.
            // This is important since the container reader only holds a week reference to it.
            PacketProvider = CreatePacketProvider(this, streamSerial);
        }
Ejemplo n.º 18
0
        private void ProcessUtxoBlocks(CancellationToken ct)
        {
            foreach (RegistryRegisterUtxoConfidential transactionRegisterUtxo in _registryUtxoBlocks.GetConsumingEnumerable(ct))
            {
                //TODO: add logic that will check whether received Transaction Header was already stored into blockchain

                bool isNew = _registryMemPool.EnqueueTransactionWitness(transactionRegisterUtxo);

                if (isNew)
                {
                    IPacketProvider packetProvider = _rawPacketProvidersFactory.Create(transactionRegisterUtxo);
                    _udpCommunicationService.PostMessage(_registryGroupState.GetAllNeighbors(), packetProvider);
                }
            }
        }
Ejemplo n.º 19
0
        public void NewStream(object sender, NewStreamEventArgs ea)
        {
            IPacketProvider     packetProvider      = ea.PacketProvider;
            VorbisStreamDecoder vorbisStreamDecoder = new VorbisStreamDecoder(packetProvider);

            if (vorbisStreamDecoder.TryInit())
            {
                _decoders.Add(vorbisStreamDecoder);
                _serials.Add(packetProvider.StreamSerial);
            }
            else
            {
                ea.IgnoreStream = true;
            }
        }
Ejemplo n.º 20
0
        protected override OggOpusStructure ReadFile(Stream stream, bool readAudioData = true)
        {
            var structure = new OggOpusStructure();

            var reader = new OggContainerReader(stream, false);
            reader.Init();
            int streamSerial = reader.StreamSerials[0];
            IPacketProvider packetProvider = reader.GetStream(streamSerial);

            ReadOpusHead(structure, packetProvider);
            SkipOpusTags(packetProvider);
            ReadData(structure, packetProvider);

            return structure;
        }
Ejemplo n.º 21
0
        public void PostMessage(IKey destination, IPacketProvider message)
        {
            if (destination == null)
            {
                throw new ArgumentNullException(nameof(destination));
            }

            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            byte[] messageBytes = message.GetBytes();
            _log.Debug($"Enqueuing to single destination {destination.Value.ToHexString()} message {messageBytes.ToHexString()}");
            _messagesQueue.Add(new KeyValuePair <IKey, byte[]>(destination, messageBytes));
        }
Ejemplo n.º 22
0
        private bool ProcessNewStream(IPacketProvider packetProvider)
        {
            var decoder = CreateStreamDecoder(packetProvider);

            decoder.ClipSamples = true;

            var ea = new NewStreamEventArgs(decoder);

            NewStream?.Invoke(this, ref ea);
            if (!ea.IgnoreStream)
            {
                _decoders.Add(decoder);
                return(true);
            }
            return(false);
        }
Ejemplo n.º 23
0
        private void ProcessBlocks(CancellationToken ct)
        {
            foreach (SynchronizationConfirmedBlock synchronizationBlock in _synchronizationBlocks.GetConsumingEnumerable(ct))
            {
                if ((_synchronizationContext.LastBlockDescriptor?.BlockHeight ?? 0) >= synchronizationBlock.BlockHeight)
                {
                    continue;
                }

                _synchronizationContext.UpdateLastSyncBlockDescriptor(new SynchronizationDescriptor(synchronizationBlock.BlockHeight, _hashCalculation.CalculateHash(synchronizationBlock.RawData), synchronizationBlock.ReportedTime, DateTime.Now, synchronizationBlock.Round));

                _chainDataService.Add(synchronizationBlock);

                IPacketProvider packetProvider = _rawPacketProvidersFactory.Create(synchronizationBlock);
                _communicationService.PostMessage(_neighborhoodState.GetAllNeighbors(), packetProvider);
            }
        }
Ejemplo n.º 24
0
        private void NewStream(int streamSerial)
        {
            DataPacket nextPacket = this._packetProvider.GetNextPacket(streamSerial);

            if ((int)nextPacket.PeekByte() != (int)VorbisStreamDecoder.InitialPacketMarker)
            {
                return;
            }
            VorbisStreamDecoder vorbisStreamDecoder = new VorbisStreamDecoder((Func <DataPacket>)(() =>
            {
                IPacketProvider local_0 = this._packetProvider;
                if (local_0 != null)
                {
                    return(local_0.GetNextPacket(streamSerial));
                }
                else
                {
                    return((DataPacket)null);
                }
            }), (Func <int>)(() =>
            {
                IPacketProvider local_0 = this._packetProvider;
                if (local_0 != null)
                {
                    return(local_0.GetTotalPageCount(streamSerial));
                }
                else
                {
                    return(0);
                }
            }));

            try
            {
                if (!vorbisStreamDecoder.TryInit(nextPacket))
                {
                    return;
                }
                this._decoders.Add(vorbisStreamDecoder);
                this._serials.Add(streamSerial);
            }
            catch (InvalidDataException ex)
            {
            }
        }
Ejemplo n.º 25
0
 public VorbisReader(Stream stream, bool closeStreamOnDispose)
 {
     this._decoders = new List <VorbisStreamDecoder>();
     this._serials  = new List <int>();
     if (!stream.CanSeek)
     {
         throw new NotSupportedException("The specified stream is not seekable.");
     }
     this._packetProvider = (IPacketProvider) new ContainerReader(stream, new Action <int>(this.NewStream));
     this._packetProvider.Init();
     this._sourceStream         = stream;
     this._closeSourceOnDispose = closeStreamOnDispose;
     if (this._decoders.Count == 0)
     {
         throw new InvalidDataException("No Vorbis data is available in the specified file.");
     }
     this._streamIdx = 0;
 }
        public void Dispose()
        {
            if (_packetProvider != null)
            {
                _packetProvider.ParameterChange -= SetParametersChanging;
                _packetProvider.Dispose();
                _packetProvider = null;
            }

            if (Books != null)
            {
                foreach (var book in Books)
                {
                    book.Dispose();
                }
                Books = null;
            }
        }
Ejemplo n.º 27
0
        private static void ReadOpusHead(OggOpusStructure structure, IPacketProvider packetProvider)
        {
            DataPacket packet = packetProvider.GetNextPacket();
            byte[] buffer = GetPacketData(packet);
            packet.Done();

            BinaryReader reader = GetBinaryReader(new MemoryStream(buffer), Endianness.LittleEndian);
            if (reader.ReadUTF8(8) != "OpusHead")
            {
                throw new InvalidDataException("Expected OpusHead segment");
            }

            structure.Version = reader.ReadByte();
            structure.ChannelCount = reader.ReadByte();
            structure.PreSkip = reader.ReadInt16();
            structure.SampleRate = reader.ReadInt32();
            structure.OutputGain = reader.ReadInt16();
            structure.ChannelMapping = reader.ReadByte();
        }
Ejemplo n.º 28
0
        private bool ProcessNewStream(IPacketProvider packetProvider)
        {
            IStreamDecoder decoder;

            try
            {
                decoder = new NVorbis.StreamDecoder(packetProvider);
            }
#pragma warning disable CA1031 // Do not catch general exception types
            catch (Exception ex)
            {
                // an exception here probably means the packet provider returned non-Vorbis data, so warn and reject the stream
                System.Diagnostics.Trace.TraceWarning($"Could not load stream {packetProvider.StreamSerial} due to error: {ex.Message}");
                return(false);
            }
#pragma warning restore CA1031 // Do not catch general exception types
            _streamDecoders.AddLast(decoder);
            return(true);
        }
Ejemplo n.º 29
0
        public void PostMessage(IEnumerable <IKey> destinations, IPacketProvider message)
        {
            if (destinations == null)
            {
                throw new ArgumentNullException(nameof(destinations));
            }

            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            foreach (IKey destination in destinations)
            {
                byte[] messageBytes = message.GetBytes();
                _log.Debug($"Enqueuing to one of multiple destinations {destination.Value.ToHexString()} message {messageBytes.ToHexString()}");
                _messagesQueue.Add(new KeyValuePair <IKey, byte[]>(destination, messageBytes));
            }
        }
Ejemplo n.º 30
0
        internal StreamDecoder(IPacketProvider packetProvider, IFactory factory)
        {
            _packetProvider = packetProvider ?? throw new ArgumentNullException(nameof(packetProvider));
            _factory        = factory ?? throw new ArgumentNullException(nameof(factory));

            _stats = new StreamStats();

            _currentPosition = 0L;
            ClipSamples      = true;

            var packet = _packetProvider.PeekNextPacket();

            if (!ProcessHeaderPackets(packet))
            {
                _packetProvider = null !;
                packet?.Reset();

                throw GetInvalidStreamException(packet);
            }
        }
Ejemplo n.º 31
0
        private void ProcessBlocks(CancellationToken ct)
        {
            foreach (ITransactionRegistryBlock transactionRegisterBlock in _registrationBlocks.GetConsumingEnumerable(ct))
            {
                if (_timer == null)
                {
                    _timer = new Timer(new TimerCallback(TimerElapsed), _registryMemPool, 120000, Timeout.Infinite);
                }

                //TODO: add logic that will check whether received Transaction Header was already stored into blockchain

                bool isNew = _registryMemPool.EnqueueTransactionRegisterBlock(transactionRegisterBlock);

                if (isNew)
                {
                    IPacketProvider packetProvider = _rawPacketProvidersFactory.Create(transactionRegisterBlock);
                    _udpCommunicationService.PostMessage(_registryGroupState.GetAllNeighbors(), packetProvider);
                }
            }
        }
Ejemplo n.º 32
0
        private static void ReadData(OggOpusStructure structure, IPacketProvider packetProvider)
        {
            bool       finished = false;
            DataPacket packet   = packetProvider.GetNextPacket();

            while (!finished)
            {
                finished = packet.IsEndOfStream;
                byte[] buffer = GetPacketData(packet);

                var frame = new OpusFrame();
                frame.Length      = buffer.Length;
                frame.Data        = buffer;
                frame.SampleCount = GetOpusSamplesPerFrame(frame.Data[0], 48000);
                structure.Frames.Add(frame);

                packet = packetProvider.GetNextPacket();
            }

            structure.SampleCount = structure.Frames.Sum(x => x.SampleCount);
        }
Ejemplo n.º 33
0
        private bool ProcessNewStream(IPacketProvider packetProvider)
        {
            var relock = _reader.Release();

            try
            {
                if (NewStreamCallback?.Invoke(packetProvider) ?? true)
                {
                    _packetProviders.Add(new WeakReference <IPacketProvider>(packetProvider));
                    _foundStream = true;
                    return(true);
                }
                return(false);
            }
            finally
            {
                if (relock)
                {
                    _reader.Lock();
                }
            }
        }
Ejemplo n.º 34
0
        static void Main(string[] args)
        {
            IPacketProvider pConvert = PacketProvider.CreateProvider();
            string          phone    = "18212001111";

            //终端连接鉴权平台回复通用应答
            byte[] body = new REQ_PB_8001().Encode(new PB8001()
            {
                MessageId    = JT808Cmd.RSP_0102,
                Serialnumber = 0,
                Result       = 0
            });

            byte[] buffer = pConvert.Encode(new PacketFrom()
            {
                msgBody         = body,
                msgId           = JT808Cmd.REQ_8001,
                msgSerialnumber = 0,
                pEncryptFlag    = 0,
                pSerialnumber   = 1,
                pSubFlag        = 0,
                pTotal          = 1,
                simNumber       = phone.ToBCD(),
            });

            //解析终端发回的数据包
            PacketMessage msg = pConvert.Decode(buffer, 0, buffer.Length);

            //解析消息体内容
            if (msg.pmPacketHead.phMessageId == JT808Cmd.RSP_0102)
            {
                PB0102 bodyInfo = new REP_PB_0102().Decode(msg.pmMessageBody);
            }
            else if (msg.pmPacketHead.phMessageId == JT808Cmd.RSP_0100)
            {
                PB0100 bodyinfo = new REP_PB_0100().Decode(msg.pmMessageBody);
            }
        }
Ejemplo n.º 35
0
        public void Dispose()
        {
            if (_packetProvider != null)
            {
                _packetProvider.Dispose();
                _packetProvider = null;
            }

            if (_closeSourceOnDispose)
            {
                _sourceStream.Close();
            }

            _sourceStream = null;
        }
Ejemplo n.º 36
0
 public VorbisReader(Stream stream, bool closeStreamOnDispose)
 {
   this._decoders = new List<VorbisStreamDecoder>();
   this._serials = new List<int>();
   if (!stream.CanSeek)
     throw new NotSupportedException("The specified stream is not seekable.");
   this._packetProvider = (IPacketProvider) new ContainerReader(stream, new Action<int>(this.NewStream));
   this._packetProvider.Init();
   this._sourceStream = stream;
   this._closeSourceOnDispose = closeStreamOnDispose;
   if (this._decoders.Count == 0)
     throw new InvalidDataException("No Vorbis data is available in the specified file.");
   this._streamIdx = 0;
 }
Ejemplo n.º 37
0
 VorbisAudioStream(IPacketProvider packetProvider)
     : this(new VorbisReader(packetProvider))
 {
 }
Ejemplo n.º 38
0
        /// <summary>
        /// Creates a new instance of <see cref="NewStreamEventArgs"/> with the specified <see cref="IPacketProvider"/>.
        /// </summary>
        /// <param name="packetProvider">An <see cref="IPacketProvider"/> instance.</param>
        public NewStreamEventArgs(IPacketProvider packetProvider)
        {
            if (packetProvider == null) throw new ArgumentNullException("packetProvider");

            PacketProvider = packetProvider;
        }
Ejemplo n.º 39
0
 public void Dispose()
 {
   if (this._packetProvider != null)
   {
     this._packetProvider.Dispose();
     this._packetProvider = (IPacketProvider) null;
   }
   if (this._closeSourceOnDispose)
     this._sourceStream.Close();
   this._sourceStream = (Stream) null;
 }
Ejemplo n.º 40
0
 public void Dispose()
 {
     if (_packetProvider != null)
     {
         var temp = _packetProvider;
         _packetProvider = null;
         temp.Dispose();
     }
 }
Ejemplo n.º 41
0
 public void Dispose()
 {
     if (_packetProvider != null)
     {
         var temp = _packetProvider;
         _packetProvider = null;
         temp.ParameterChange -= SetParametersChanging;
         temp.Dispose();
     }
 }