From 539fecd08b752a50ebdbcef45b51a998f1390167 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 28 Sep 2017 13:04:06 -0400 Subject: [PATCH] rework live stream creation --- MediaBrowser.Controller/IO/StreamHelper.cs | 5 -- .../LiveTv/ILiveTvManager.cs | 2 +- MediaBrowser.Controller/LiveTv/ITunerHost.cs | 15 +++- MediaBrowser.Controller/LiveTv/LiveStream.cs | 87 ------------------- .../MediaBrowser.Controller.csproj | 1 - MediaBrowser.Server.Mono/MonoAppHost.cs | 2 +- MediaBrowser.Server.Mono/Program.cs | 2 - MediaBrowser.ServerApplication/MainStartup.cs | 2 - .../WindowsAppHost.cs | 1 - 9 files changed, 16 insertions(+), 101 deletions(-) delete mode 100644 MediaBrowser.Controller/LiveTv/LiveStream.cs diff --git a/MediaBrowser.Controller/IO/StreamHelper.cs b/MediaBrowser.Controller/IO/StreamHelper.cs index af97a0233f..106fec41fc 100644 --- a/MediaBrowser.Controller/IO/StreamHelper.cs +++ b/MediaBrowser.Controller/IO/StreamHelper.cs @@ -6,11 +6,6 @@ namespace MediaBrowser.Controller.IO { public static class StreamHelper { - public static void CopyTo(Stream source, Stream destination, int bufferSize, CancellationToken cancellationToken) - { - CopyTo(source, destination, bufferSize, null, cancellationToken); - } - public static void CopyTo(Stream source, Stream destination, int bufferSize, Action onStarted, CancellationToken cancellationToken) { byte[] buffer = new byte[bufferSize]; diff --git a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs index 42c31c6299..be85e115c4 100644 --- a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs +++ b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs @@ -383,7 +383,7 @@ namespace MediaBrowser.Controller.LiveTv event EventHandler> SeriesTimerCreated; string GetEmbyTvActiveRecordingPath(string id); - Task GetEmbyTvLiveStream(string id); + Task GetEmbyTvLiveStream(string id); ActiveRecordingInfo GetActiveRecordingInfo(string path); diff --git a/MediaBrowser.Controller/LiveTv/ITunerHost.cs b/MediaBrowser.Controller/LiveTv/ITunerHost.cs index fc344298bb..2019259c56 100644 --- a/MediaBrowser.Controller/LiveTv/ITunerHost.cs +++ b/MediaBrowser.Controller/LiveTv/ITunerHost.cs @@ -36,7 +36,7 @@ namespace MediaBrowser.Controller.LiveTv /// The stream identifier. /// The cancellation token. /// Task<MediaSourceInfo>. - Task GetChannelStream(string channelId, string streamId, CancellationToken cancellationToken); + Task GetChannelStream(string channelId, string streamId, CancellationToken cancellationToken); /// /// Gets the channel stream media sources. /// @@ -56,4 +56,17 @@ namespace MediaBrowser.Controller.LiveTv /// Task. Task Validate(TunerHostInfo info); } + + public interface ILiveStream + { + Task Open(CancellationToken cancellationToken); + Task Close(); + int ConsumerCount { get; } + string OriginalStreamId { get; set; } + bool EnableStreamSharing { get; set; } + ITunerHost TunerHost { get; set; } + MediaSourceInfo OpenedMediaSource { get; set; } + string UniqueId { get; } + List SharedStreamIds { get; } + } } diff --git a/MediaBrowser.Controller/LiveTv/LiveStream.cs b/MediaBrowser.Controller/LiveTv/LiveStream.cs deleted file mode 100644 index 20947462e8..0000000000 --- a/MediaBrowser.Controller/LiveTv/LiveStream.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.IO; -using MediaBrowser.Model.System; - -namespace MediaBrowser.Controller.LiveTv -{ - public class LiveStream - { - public MediaSourceInfo OriginalMediaSource { get; set; } - public MediaSourceInfo OpenedMediaSource { get; set; } - public int ConsumerCount - { - get { return SharedStreamIds.Count; } - } - public ITunerHost TunerHost { get; set; } - public string OriginalStreamId { get; set; } - public bool EnableStreamSharing { get; set; } - public string UniqueId = Guid.NewGuid().ToString("N"); - - public List SharedStreamIds = new List(); - protected readonly IEnvironmentInfo Environment; - protected readonly IFileSystem FileSystem; - const int StreamCopyToBufferSize = 81920; - - public LiveStream(MediaSourceInfo mediaSource, IEnvironmentInfo environment, IFileSystem fileSystem) - { - OriginalMediaSource = mediaSource; - Environment = environment; - FileSystem = fileSystem; - OpenedMediaSource = mediaSource; - EnableStreamSharing = true; - } - - public Task Open(CancellationToken cancellationToken) - { - return OpenInternal(cancellationToken); - } - - protected virtual Task OpenInternal(CancellationToken cancellationToken) - { - return Task.FromResult(true); - } - - public virtual Task Close() - { - return Task.FromResult(true); - } - - protected Stream GetInputStream(string path, bool allowAsyncFileRead) - { - var fileOpenOptions = FileOpenOptions.SequentialScan; - - if (allowAsyncFileRead) - { - fileOpenOptions |= FileOpenOptions.Asynchronous; - } - - return FileSystem.GetFileStream(path, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.ReadWrite, fileOpenOptions); - } - - protected async Task DeleteTempFile(string path, int retryCount = 0) - { - try - { - FileSystem.DeleteFile(path); - return; - } - catch - { - - } - - if (retryCount > 20) - { - return; - } - - await Task.Delay(500).ConfigureAwait(false); - await DeleteTempFile(path, retryCount + 1).ConfigureAwait(false); - } - } -} diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 5ef763b62b..b33993859b 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -145,7 +145,6 @@ - diff --git a/MediaBrowser.Server.Mono/MonoAppHost.cs b/MediaBrowser.Server.Mono/MonoAppHost.cs index fe684d928d..312f147323 100644 --- a/MediaBrowser.Server.Mono/MonoAppHost.cs +++ b/MediaBrowser.Server.Mono/MonoAppHost.cs @@ -26,7 +26,7 @@ namespace MediaBrowser.Server.Mono get { // A restart script must be provided - return false; + return StartupOptions.ContainsOption("-restartpath") && StartupOptions.ContainsOption("-ffmpeg"); } } diff --git a/MediaBrowser.Server.Mono/Program.cs b/MediaBrowser.Server.Mono/Program.cs index 566a84da2c..3267a77b95 100644 --- a/MediaBrowser.Server.Mono/Program.cs +++ b/MediaBrowser.Server.Mono/Program.cs @@ -12,8 +12,6 @@ using System.Reflection; using System.Text.RegularExpressions; using System.Threading.Tasks; using Emby.Drawing; -using Emby.Server.Core.Cryptography; -using Emby.Server.Core; using Emby.Server.Implementations; using Emby.Server.Implementations.EnvironmentInfo; using Emby.Server.Implementations.IO; diff --git a/MediaBrowser.ServerApplication/MainStartup.cs b/MediaBrowser.ServerApplication/MainStartup.cs index d17d9ee435..70b03aa44b 100644 --- a/MediaBrowser.ServerApplication/MainStartup.cs +++ b/MediaBrowser.ServerApplication/MainStartup.cs @@ -16,9 +16,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; -using Emby.Server.Core.Cryptography; using Emby.Drawing; -using Emby.Server.Core; using Emby.Server.Implementations; using Emby.Server.Implementations.Browser; using Emby.Server.Implementations.EnvironmentInfo; diff --git a/MediaBrowser.ServerApplication/WindowsAppHost.cs b/MediaBrowser.ServerApplication/WindowsAppHost.cs index 19079fbc92..9896b75e33 100644 --- a/MediaBrowser.ServerApplication/WindowsAppHost.cs +++ b/MediaBrowser.ServerApplication/WindowsAppHost.cs @@ -6,7 +6,6 @@ using System.Reflection; using System.Runtime.InteropServices.ComTypes; using Emby.Server.CinemaMode; using Emby.Server.Connect; -using Emby.Server.Core; using Emby.Server.Implementations; using Emby.Server.Implementations.EntryPoints; using Emby.Server.Implementations.FFMpeg;