Exemple #1
0
        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}");
                }
            });
        }
Exemple #2
0
        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()
                            );
                    }
                }
            });
        }
Exemple #3
0
        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();