public void DataEventAfterSingleConfigurationChange() { Assert.DoesNotThrow( () => { using (var bufferController = new StreamBufferController(Observable.Return <PlayerState>(PlayerState.Playing))) { bufferController.Initialize(StreamType.Audio); bufferController.Initialize(StreamType.Video); var dataArgsHolder = new DataRequest[(int)StreamType.Count]; using (bufferController.DataNeededStateChanged() .Subscribe(a => { dataArgsHolder[(int)a.StreamType] = a; }, SynchronizationContext.Current)) { var conf = new MetaDataStreamConfig { Bandwidth = 123456789, BufferDuration = TimeSpan.FromSeconds(15), Stream = StreamType.Audio }; bufferController.SetMetaDataConfiguration(conf); SpinWait.SpinUntil(() => dataArgsHolder[(int)StreamType.Audio] != null, TimeSpan.FromSeconds(2)); Assert.IsTrue( dataArgsHolder[(int)StreamType.Audio].CompareMetaData(conf), $"Expected: Same Result: {conf} {dataArgsHolder[(int)StreamType.Audio]}"); } } }); }
public void UpdateBufferConfiguration(MetaDataStreamConfig newStreamConfig) { var previousMax = maxBufferDuration; UpdateBufferDuration(newStreamConfig.BufferDuration); var durationDiff = maxBufferDuration - previousMax; Interlocked.Add(ref bufferAvailableTicks, durationDiff.Ticks); }
public static bool CompareMetaData(this DataRequest a, MetaDataStreamConfig b) { if (a == null && b == null) { return(true); } if (a == null || b == null) { return(false); } return(a.StreamType == b.StreamType() && a.Duration == b.BufferDuration); }