From c1a3084312fa4fb7796b83640bfe9ad2b5044afa Mon Sep 17 00:00:00 2001 From: Patrick Barron Date: Thu, 28 Dec 2023 15:15:03 -0500 Subject: Move LiveTv to separate project --- .../LiveTv/TunerHosts/SharedHttpStream.cs | 134 --------------------- 1 file changed, 134 deletions(-) delete mode 100644 Emby.Server.Implementations/LiveTv/TunerHosts/SharedHttpStream.cs (limited to 'Emby.Server.Implementations/LiveTv/TunerHosts/SharedHttpStream.cs') diff --git a/Emby.Server.Implementations/LiveTv/TunerHosts/SharedHttpStream.cs b/Emby.Server.Implementations/LiveTv/TunerHosts/SharedHttpStream.cs deleted file mode 100644 index efb84a5152..0000000000 --- a/Emby.Server.Implementations/LiveTv/TunerHosts/SharedHttpStream.cs +++ /dev/null @@ -1,134 +0,0 @@ -#pragma warning disable CS1591 - -using System; -using System.Globalization; -using System.IO; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Net; -using MediaBrowser.Controller; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.IO; -using MediaBrowser.Model.LiveTv; -using MediaBrowser.Model.MediaInfo; -using Microsoft.Extensions.Logging; - -namespace Emby.Server.Implementations.LiveTv.TunerHosts -{ - public class SharedHttpStream : LiveStream, IDirectStreamProvider - { - private readonly IHttpClientFactory _httpClientFactory; - private readonly IServerApplicationHost _appHost; - - public SharedHttpStream( - MediaSourceInfo mediaSource, - TunerHostInfo tunerHostInfo, - string originalStreamId, - IFileSystem fileSystem, - IHttpClientFactory httpClientFactory, - ILogger logger, - IConfigurationManager configurationManager, - IServerApplicationHost appHost, - IStreamHelper streamHelper) - : base(mediaSource, tunerHostInfo, fileSystem, logger, configurationManager, streamHelper) - { - _httpClientFactory = httpClientFactory; - _appHost = appHost; - OriginalStreamId = originalStreamId; - } - - public override async Task Open(CancellationToken openCancellationToken) - { - LiveStreamCancellationTokenSource.Token.ThrowIfCancellationRequested(); - - var mediaSource = OriginalMediaSource; - - var url = mediaSource.Path; - - Directory.CreateDirectory(Path.GetDirectoryName(TempFilePath) ?? throw new InvalidOperationException("Path can't be a root directory.")); - - var typeName = GetType().Name; - Logger.LogInformation("Opening {StreamType} Live stream from {Url}", typeName, url); - - // Response stream is disposed manually. - var response = await _httpClientFactory.CreateClient(NamedClient.Default) - .GetAsync(url, HttpCompletionOption.ResponseHeadersRead, CancellationToken.None) - .ConfigureAwait(false); - - var taskCompletionSource = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - - _ = StartStreaming(response, taskCompletionSource, LiveStreamCancellationTokenSource.Token); - - MediaSource.Path = _appHost.GetApiUrlForLocalAccess() + "/LiveTv/LiveStreamFiles/" + UniqueId + "/stream.ts"; - MediaSource.Protocol = MediaProtocol.Http; - - var res = await taskCompletionSource.Task.ConfigureAwait(false); - if (!res) - { - Logger.LogWarning("Zero bytes copied from stream {StreamType} to {FilePath} but no exception raised", GetType().Name, TempFilePath); - throw new EndOfStreamException(string.Format(CultureInfo.InvariantCulture, "Zero bytes copied from stream {0}", GetType().Name)); - } - } - - private Task StartStreaming(HttpResponseMessage response, TaskCompletionSource openTaskCompletionSource, CancellationToken cancellationToken) - { - return Task.Run( - async () => - { - try - { - Logger.LogInformation("Beginning {StreamType} stream to {FilePath}", GetType().Name, TempFilePath); - using (response) - { - var stream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false); - await using (stream.ConfigureAwait(false)) - { - var fileStream = new FileStream( - TempFilePath, - FileMode.Create, - FileAccess.Write, - FileShare.Read, - IODefaults.FileStreamBufferSize, - FileOptions.Asynchronous); - - await using (fileStream.ConfigureAwait(false)) - { - await StreamHelper.CopyToAsync( - stream, - fileStream, - IODefaults.CopyToBufferSize, - () => Resolve(openTaskCompletionSource), - cancellationToken).ConfigureAwait(false); - } - } - } - } - catch (OperationCanceledException ex) - { - Logger.LogInformation("Copying of {StreamType} to {FilePath} was canceled", GetType().Name, TempFilePath); - openTaskCompletionSource.TrySetException(ex); - } - catch (Exception ex) - { - Logger.LogError(ex, "Error copying live stream {StreamType} to {FilePath}", GetType().Name, TempFilePath); - openTaskCompletionSource.TrySetException(ex); - } - - openTaskCompletionSource.TrySetResult(false); - - EnableStreamSharing = false; - await DeleteTempFiles(TempFilePath).ConfigureAwait(false); - }, - CancellationToken.None); - } - - private void Resolve(TaskCompletionSource openTaskCompletionSource) - { - DateOpened = DateTime.UtcNow; - openTaskCompletionSource.TrySetResult(true); - } - } -} -- cgit v1.2.3