aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/LiveTv/TunerHosts/MulticastStream.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Server.Implementations/LiveTv/TunerHosts/MulticastStream.cs')
-rw-r--r--Emby.Server.Implementations/LiveTv/TunerHosts/MulticastStream.cs46
1 files changed, 14 insertions, 32 deletions
diff --git a/Emby.Server.Implementations/LiveTv/TunerHosts/MulticastStream.cs b/Emby.Server.Implementations/LiveTv/TunerHosts/MulticastStream.cs
index 567f4ce20..45a0c348e 100644
--- a/Emby.Server.Implementations/LiveTv/TunerHosts/MulticastStream.cs
+++ b/Emby.Server.Implementations/LiveTv/TunerHosts/MulticastStream.cs
@@ -39,21 +39,9 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
if (bytesRead > 0)
{
- var allStreams = _outputStreams.ToList();
-
- //if (allStreams.Count == 1)
- //{
- // allStreams[0].Value.Write(buffer, 0, bytesRead);
- //}
- //else
+ foreach (var stream in _outputStreams)
{
- //byte[] copy = new byte[bytesRead];
- //Buffer.BlockCopy(buffer, 0, copy, 0, bytesRead);
-
- foreach (var stream in allStreams)
- {
- stream.Value.Queue(buffer, 0, bytesRead);
- }
+ stream.Value.Queue(buffer, 0, bytesRead);
}
if (onStarted != null)
@@ -73,27 +61,21 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
public Task CopyToAsync(Stream stream, CancellationToken cancellationToken)
{
- var result = new QueueStream(stream, _logger)
- {
- OnFinished = OnFinished
- };
-
- _outputStreams.TryAdd(result.Id, result);
+ var queueStream = new QueueStream(stream, _logger);
- result.Start(cancellationToken);
+ _outputStreams.TryAdd(queueStream.Id, queueStream);
- return result.TaskCompletion.Task;
- }
-
- public void RemoveOutputStream(QueueStream stream)
- {
- QueueStream removed;
- _outputStreams.TryRemove(stream.Id, out removed);
- }
+ try
+ {
+ queueStream.Start(cancellationToken);
+ }
+ finally
+ {
+ _outputStreams.TryRemove(queueStream.Id, out queueStream);
+ GC.Collect();
+ }
- private void OnFinished(QueueStream queueStream)
- {
- RemoveOutputStream(queueStream);
+ return Task.FromResult(true);
}
}
}