/// <summary> /// Create new demux from a stream /// </summary> /// <param name="stream"></param> private void UpdateDemux(EncryptedStream stream) { TSDemux newDemux; if (_demux != null && _demux.IsMediaInfoReady ) { newDemux = new TSDemux(stream, _demux, _playback.Metadata, _playback.CurrentDownloadBitrate, _bwHistory); } else { newDemux = new TSDemux(stream, _audioBuffer, _videoBuffer, _playback.Metadata, _playback.CurrentDownloadBitrate, _bwHistory); } if (_demux != null) { if (!_demux.IsMediaInfoReady) { // If last demux has no media info ready, we are not carrying over demux parser buffers has been allocated, // so make sure we discard those buffers by Flush(true) _demux.Flush(true); HLSTrace.WriteLine("Discard samples as last demux has no media info ready"); } _demux.Dispose(); } _demux = newDemux; while (!_demux.IsMediaInfoReady && !_demux.IsEndOfStream) { _demux.ReadChunk(); } if (!_demux.IsMediaInfoReady) RaiseError("unable to parse stream"); }