public void NoBufferEventAfterSubscription() { Assert.DoesNotThrowAsync( async() => { using (var bufferController = new StreamBufferController(Observable.Return <PlayerState>(PlayerState.Playing))) { bufferController.Initialize(StreamType.Audio); bufferController.Initialize(StreamType.Video); var eventCount = 0; bufferController.BufferingStateChanged() .Subscribe(a => eventCount++ , SynchronizationContext.Current); if (eventCount == 0) { await Task.Delay(TimeSpan.FromSeconds(1)); } Assert.IsTrue(eventCount == 0, $"Expected: eventCount == 0 Result: eventCount == {eventCount}"); } }); }
public void BufferOnEventFromMultipleSources() { Assert.DoesNotThrowAsync( async() => { using (var bufferController = new StreamBufferController(Observable.Return <PlayerState>(PlayerState.Playing))) { bufferController.Initialize(StreamType.Audio); bufferController.Initialize(StreamType.Video); var eventCount = 0; var eventOnCount = 0; using (bufferController.BufferingStateChanged() .Subscribe(a => { eventCount++; if (a) { eventOnCount++; } }, SynchronizationContext.Current)) { var audio = BuildPacketList(StreamType.Audio, TimeSpan.FromSeconds(15), 100); var video = BuildPacketList(StreamType.Video, TimeSpan.FromSeconds(15), 100); await Task.WhenAll( bufferController.PushPackets(audio), bufferController.PushPackets(video) ); await Task.WhenAll( bufferController.PullPackets(audio), bufferController.PullPackets(video) ); SpinWait.SpinUntil(() => eventOnCount > 0 && eventCount > 0, TimeSpan.FromSeconds(2)); Assert.IsTrue(eventCount > 0, $"Expected: eventCount > 0 Result: eventCount=={eventCount}"); Assert.IsTrue(eventOnCount > 0, $"Expected: eventOnCount > 0 Result: eventOnCount=={eventOnCount}"); await Task.WhenAll( audio.DisposePackets(), video.DisposePackets() ); } } }); }
public void BufferOnOffEventFromSingleSource() { Assert.DoesNotThrowAsync( async() => { using (var bufferController = new StreamBufferController(Observable.Return <PlayerState>(PlayerState.Playing))) { bufferController.Initialize(StreamType.Audio); var eventCount = 0; var eventOnCount = 0; var eventOffCount = 0; using (bufferController.BufferingStateChanged() .Subscribe(a => { eventCount++; if (a) { eventOnCount++; } else { eventOffCount++; } }, SynchronizationContext.Current)) { var audioPackets1 = BuildPacketList(StreamType.Audio, TimeSpan.FromSeconds(15), 100); var audioPackets2 = BuildPacketList(StreamType.Audio, TimeSpan.FromSeconds(15), 100, TimeSpan.FromSeconds(15)); await bufferController.PushPackets(audioPackets1); await bufferController.PullPackets(audioPackets1); SpinWait.SpinUntil(() => eventOnCount == 1, TimeSpan.FromSeconds(2)); await bufferController.PushPackets(audioPackets2); SpinWait.SpinUntil(() => eventOnCount > 0 && eventOffCount > 0, TimeSpan.FromSeconds(2)); Assert.IsTrue(eventOffCount == 1, $"Expected: eventOffCount==1 Result eventOffCount=={eventOffCount}"); Assert.IsTrue(eventOnCount == 1, $"Expected: eventOnCount==1 Result eventOnCount=={eventOnCount}"); await audioPackets1.DisposePackets(); await audioPackets2.DisposePackets(); } } }); }
public IObservable <bool> BufferingStateChanged() => bufferController.BufferingStateChanged();