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; }
internal VorbisStreamDecoder(IPacketProvider packetProvider) { _packetProvider = packetProvider; _pagesSeen = new List <int>(); _lastPageSeen = -1; }
internal VorbisStreamDecoder(IPacketProvider packetProvider) { _packetProvider = packetProvider; _packetProvider.ParameterChange += SetParametersChanging; _pagesSeen = new List <int>(); _lastPageSeen = -1; }
internal VorbisStreamDecoder(IPacketProvider packetProvider) { _packetProvider = packetProvider; _pagesSeen = new List<int>(); _lastPageSeen = -1; }
public VorbisReader(IPacketProvider packetProvider) : this() { var ea = new NewStreamEventArgs(packetProvider); NewStream(this, ea); if (ea.IgnoreStream) throw new InvalidDataException("No Vorbis data found!"); }
internal VorbisStreamDecoder(IPacketProvider packetProvider) { _packetProvider = packetProvider; _packetProvider.ParameterChange += SetParametersChanging; _pagesSeen = new HashSet <int>(); }
/// <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); } }
internal VorbisStreamDecoder(IPacketProvider packetProvider) { _packetProvider = packetProvider; _packetProvider.ParameterChange += SetParametersChanging; _pagesSeen = new List<int>(); _lastPageSeen = -1; }
public NewStreamEventArgs(IPacketProvider packetProvider) { if (packetProvider == null) { throw new ArgumentNullException("packetProvider"); } PacketProvider = packetProvider; }
public void Dispose() { if (_packetProvider != null) { var temp = _packetProvider; _packetProvider = null; temp.Dispose(); } }
public void Dispose() { if (_packetProvider != null) { IPacketProvider packetProvider = _packetProvider; _packetProvider = null; packetProvider.ParameterChange -= SetParametersChanging; packetProvider.Dispose(); } }
private void SkipOpusTags(IPacketProvider packetProvider) { DataPacket packet = packetProvider.PeekNextPacket(); byte[] buffer = GetPacketData(packet); if (Encoding.UTF8.GetString(buffer, 0, 8) == "OpusTags") { packetProvider.GetNextPacket(); } }
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."); } }
public VorbisReader(IPacketProvider packetProvider) : this() { NewStreamEventArgs newStreamEventArgs = new NewStreamEventArgs(packetProvider); NewStream(this, newStreamEventArgs); if (newStreamEventArgs.IgnoreStream) { throw new InvalidDataException("No Vorbis data found!"); } }
public void Dispose() { if (this._packetProvider != null) { this._packetProvider.Dispose(); this._packetProvider = (IPacketProvider)null; } if (this._closeSourceOnDispose) { this._sourceStream.Close(); } this._sourceStream = (Stream)null; }
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); }
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); } } }
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; } }
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; }
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)); }
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); }
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); } }
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) { } }
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; } }
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(); }
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); }
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)); } }
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); } }
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); } } }
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); }
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(); } } }
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); } }
public void Dispose() { if (_packetProvider != null) { _packetProvider.Dispose(); _packetProvider = null; } if (_closeSourceOnDispose) { _sourceStream.Close(); } _sourceStream = null; }
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; }
VorbisAudioStream(IPacketProvider packetProvider) : this(new VorbisReader(packetProvider)) { }
/// <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; }
public void Dispose() { if (this._packetProvider != null) { this._packetProvider.Dispose(); this._packetProvider = (IPacketProvider) null; } if (this._closeSourceOnDispose) this._sourceStream.Close(); this._sourceStream = (Stream) null; }