Skip to content

Commit

Permalink
Add API to get selected stream groups and selectors (#53)
Browse files Browse the repository at this point in the history
* Add API to get selected stream groups and selectors
* Use Stream.StreamSelector instead of StreamHolder.StreamHolder when comparing streams
  • Loading branch information
ppaneksamsung authored and GitHub Enterprise committed Oct 19, 2020
1 parent 8767b1a commit 718fc6c
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 14 deletions.
1 change: 1 addition & 0 deletions JuvoPlayer/Common/IStream.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ namespace JuvoPlayer.Common
{
public interface IStream : IDisposable
{
IStreamSelector StreamSelector { get; }
Task Prepare();
Task LoadChunks(Segment segment, IStreamRenderer streamRenderer, CancellationToken token);
Task<StreamConfig> GetStreamConfig(CancellationToken token);
Expand Down
1 change: 1 addition & 0 deletions JuvoPlayer/Common/IStreamProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ public interface IStreamProvider
{
Task<Timeline> Prepare();
StreamGroup[] GetStreamGroups(Period period);
(StreamGroup[], IStreamSelector[]) GetSelectedStreamGroups();

IStream CreateStream(
Period period,
Expand Down
9 changes: 5 additions & 4 deletions JuvoPlayer/Dash/DashStream.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ public class DashStream : IStream
private IStreamRenderer _renderer;
private RepresentationWrapper[] _representations;
private Segment _segment;
private IStreamSelector _streamSelector;

public DashStream(
IThroughputHistory throughputHistory,
Expand All @@ -60,12 +59,14 @@ public DashStream(
_downloader = downloader;
_clock = clock;
_demuxer = demuxer;
_streamSelector = streamSelector;
StreamSelector = streamSelector;
_maxBufferTime = TimeSpan.FromSeconds(8);
}

public StreamGroup StreamGroup { get; private set; }

public IStreamSelector StreamSelector { get; private set; }

public async Task Prepare()
{
if (_representations == null
Expand Down Expand Up @@ -165,7 +166,7 @@ internal void SetAdaptationSet(

internal void SetStreamSelector(IStreamSelector selector)
{
_streamSelector = selector;
StreamSelector = selector;
}

private async Task RunLoadChunksLoop(CancellationToken cancellationToken)
Expand Down Expand Up @@ -316,7 +317,7 @@ await OnChunkLoaded(chunk,

private RepresentationWrapper SelectRepresentation()
{
var selectedIndex = _streamSelector.Select(StreamGroup);
var selectedIndex = StreamSelector.Select(StreamGroup);
return _representations[selectedIndex];
}

Expand Down
15 changes: 15 additions & 0 deletions JuvoPlayer/Dash/DashStreamProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,21 @@ public StreamGroup[] GetStreamGroups(Period period)
return dashPeriod.AvailableStreams;
}

public (StreamGroup[], IStreamSelector[]) GetSelectedStreamGroups()
{
var streamCount = _dashStreams.Count;
var streamGroups = new StreamGroup[streamCount];
var selectors = new IStreamSelector[streamCount];
for (var index = 0; index < streamCount; ++index)
{
var stream = _dashStreams[index];
streamGroups[index] = stream.StreamGroup;
selectors[index] = stream.StreamSelector;
}

return (streamGroups, selectors);
}

public IStream CreateStream(
Period clientPeriod,
StreamGroup streamGroup,
Expand Down
1 change: 1 addition & 0 deletions JuvoPlayer/IPlayer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ public interface IPlayer : IAsyncDisposable
Task Pause();
Task Seek(TimeSpan position);
StreamGroup[] GetStreamGroups();
(StreamGroup[], IStreamSelector[]) GetSelectedStreamGroups();
Task SetStreamGroups(StreamGroup[] streamGroups, IStreamSelector[] selectors);
}
}
17 changes: 7 additions & 10 deletions JuvoPlayer/Players/Player.cs
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,11 @@ public StreamGroup[] GetStreamGroups()
return _streamProvider.GetStreamGroups(_currentPeriod);
}

public (StreamGroup[], IStreamSelector[]) GetSelectedStreamGroups()
{
return _streamProvider.GetSelectedStreamGroups();
}

public async Task SetStreamGroups(StreamGroup[] streamGroups, IStreamSelector[] selectors)
{
_logger.Info();
Expand Down Expand Up @@ -216,7 +221,6 @@ public async Task SetStreamGroups(StreamGroup[] streamGroups, IStreamSelector[]

// Reuse previously selected stream and update IStreamSelector only
_streamHolders.Remove(contentType);
oldStreamHolder.StreamSelector = selector;
streamHolders[contentType] = oldStreamHolder;
var stream = oldStreamHolder.Stream;
_streamProvider.UpdateStream(stream, selector);
Expand Down Expand Up @@ -428,10 +432,7 @@ private async Task PreparePlayer(StreamConfig[] streamConfigs)
_platformPlayer.Open(_window, streamConfigs);
_platformPlayerEosSubscription = _platformPlayer
.OnEos()
.Subscribe(_ =>
{
_eventSubject.OnNext(new EosEvent());
});
.Subscribe(_ => { _eventSubject.OnNext(new EosEvent()); });
var synchronizationContext = SynchronizationContext.Current;
var cancellationToken = _cancellationTokenSource.Token;
await _platformPlayer.PrepareAsync(contentType =>
Expand Down Expand Up @@ -513,7 +514,6 @@ private StreamHolder CreateStreamHolder(
stream,
streamRenderer,
streamGroup,
streamSelector,
bufferingObserver,
OnStreamRendererBuffering);
}
Expand Down Expand Up @@ -657,27 +657,24 @@ private class StreamHolder : IDisposable
public StreamHolder(IStream stream,
StreamRenderer streamRenderer,
StreamGroup streamGroup,
IStreamSelector streamSelector,
BufferingObserver bufferingObserver,
Action<bool> onStreamRendererBuffering)
{
Stream = stream;
StreamRenderer = streamRenderer;
StreamGroup = streamGroup;
StreamSelector = streamSelector;
BufferingObserver = bufferingObserver;
_bufferingObserverSubscription =
BufferingObserver
.OnBuffering()
.Subscribe(onStreamRendererBuffering);

}

public IStream Stream { get; }
public StreamRenderer StreamRenderer { get; }
public StreamGroup StreamGroup { get; }
public BufferingObserver BufferingObserver { get; }
public IStreamSelector StreamSelector { get; set; }
public IStreamSelector StreamSelector => Stream.StreamSelector;

public void StartPushingPackets(
Segment segment,
Expand Down

0 comments on commit 718fc6c

Please sign in to comment.