diff options
Diffstat (limited to 'MediaBrowser.Api/Playback/StreamState.cs')
| -rw-r--r-- | MediaBrowser.Api/Playback/StreamState.cs | 72 |
1 files changed, 69 insertions, 3 deletions
diff --git a/MediaBrowser.Api/Playback/StreamState.cs b/MediaBrowser.Api/Playback/StreamState.cs index bde5fe30d..ce7d79917 100644 --- a/MediaBrowser.Api/Playback/StreamState.cs +++ b/MediaBrowser.Api/Playback/StreamState.cs @@ -1,15 +1,21 @@ using MediaBrowser.Common.Net; +using MediaBrowser.Controller.LiveTv; using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Entities; using MediaBrowser.Model.IO; +using MediaBrowser.Model.Logging; +using System; using System.Collections.Generic; using System.IO; using System.Threading; namespace MediaBrowser.Api.Playback { - public class StreamState + public class StreamState : IDisposable { + private readonly ILogger _logger; + private readonly ILiveTvManager _liveTvManager; + public string RequestedUrl { get; set; } public StreamRequest Request { get; set; } @@ -51,8 +57,6 @@ namespace MediaBrowser.Api.Playback public bool HasMediaStreams { get; set; } - public CancellationTokenSource StandardInputCancellationTokenSource { get; set; } - public string LiveTvStreamId { get; set; } public int SegmentLength = 10; @@ -63,6 +67,12 @@ namespace MediaBrowser.Api.Playback public string AudioSync = "1"; public string VideoSync = "vfr"; + public StreamState(ILiveTvManager liveTvManager, ILogger logger) + { + _liveTvManager = liveTvManager; + _logger = logger; + } + public string InputAudioSync { get; set; } public string InputVideoSync { get; set; } @@ -93,5 +103,61 @@ namespace MediaBrowser.Api.Playback return MimeTypes.GetMimeType(outputPath); } + + public void Dispose() + { + DisposeLiveStream(); + DisposeLogStream(); + DisposeIsoMount(); + } + + private void DisposeLogStream() + { + if (LogFileStream != null) + { + try + { + LogFileStream.Dispose(); + } + catch (Exception ex) + { + _logger.ErrorException("Error disposing log stream", ex); + } + + LogFileStream = null; + } + } + + private void DisposeIsoMount() + { + if (IsoMount != null) + { + try + { + IsoMount.Dispose(); + } + catch (Exception ex) + { + _logger.ErrorException("Error disposing iso mount", ex); + } + + IsoMount = null; + } + } + + private async void DisposeLiveStream() + { + if (!string.IsNullOrEmpty(LiveTvStreamId)) + { + try + { + await _liveTvManager.CloseLiveStream(LiveTvStreamId, CancellationToken.None).ConfigureAwait(false); + } + catch (Exception ex) + { + _logger.ErrorException("Error closing live tv stream", ex); + } + } + } } } |
