From b314199319c599996090282d79baddcde413a187 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 9 Sep 2014 20:28:59 -0400 Subject: [PATCH] resolve wtv transcoding --- .../Playback/Hls/DynamicHlsService.cs | 12 ++- MediaBrowser.Common/Net/MimeTypes.cs | 75 +++++++++++++++++-- .../Connect/IConnectManager.cs | 1 - .../Resolvers/EntityResolutionHelper.cs | 56 +------------- .../Connect/ConnectManager.cs | 19 ++++- .../Localization/JavaScript/javascript.json | 3 +- .../Localization/Server/server.json | 2 +- 7 files changed, 104 insertions(+), 64 deletions(-) diff --git a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs index 40ec89f553..2bb706769b 100644 --- a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs @@ -1,5 +1,6 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; +using MediaBrowser.Common.Net; using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Dlna; @@ -60,9 +61,12 @@ namespace MediaBrowser.Api.Playback.Hls public class DynamicHlsService : BaseHlsService { - public DynamicHlsService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ILiveTvManager liveTvManager, IDlnaManager dlnaManager, IChannelManager channelManager, ISubtitleEncoder subtitleEncoder) + protected INetworkManager NetworkManager { get; private set; } + + public DynamicHlsService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ILiveTvManager liveTvManager, IDlnaManager dlnaManager, IChannelManager channelManager, ISubtitleEncoder subtitleEncoder, INetworkManager networkManager) : base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, fileSystem, liveTvManager, dlnaManager, channelManager, subtitleEncoder) { + NetworkManager = networkManager; } public object Get(GetMasterHlsVideoStream request) @@ -480,6 +484,12 @@ namespace MediaBrowser.Api.Playback.Hls private bool EnableAdaptiveBitrateStreaming(StreamState state) { + // Within the local network this will likely do more harm than good. + if (Request.IsLocal || NetworkManager.IsInLocalNetwork(Request.RemoteIp)) + { + return false; + } + var request = state.Request as GetMasterHlsVideoStream; if (request != null && !request.EnableAdaptiveBitrateStreaming) diff --git a/MediaBrowser.Common/Net/MimeTypes.cs b/MediaBrowser.Common/Net/MimeTypes.cs index bd9668d800..1503d0b431 100644 --- a/MediaBrowser.Common/Net/MimeTypes.cs +++ b/MediaBrowser.Common/Net/MimeTypes.cs @@ -1,5 +1,7 @@ using System; +using System.Collections.Generic; using System.IO; +using System.Linq; namespace MediaBrowser.Common.Net { @@ -13,6 +15,65 @@ namespace MediaBrowser.Common.Net /// public static string JsonMimeType = "application/json"; + /// + /// Any extension in this list is considered a video file - can be added to at runtime for extensibility + /// + private static readonly List VideoFileExtensions = new List + { + ".mkv", + ".m2t", + ".m2ts", + ".img", + ".iso", + ".mk3d", + ".ts", + ".rmvb", + ".mov", + ".avi", + ".mpg", + ".mpeg", + ".wmv", + ".mp4", + ".divx", + ".dvr-ms", + ".wtv", + ".ogm", + ".ogv", + ".asf", + ".m4v", + ".flv", + ".f4v", + ".3gp", + ".webm", + ".mts", + ".m2v", + ".rec" + }; + + private static readonly Dictionary VideoFileExtensionsDictionary = VideoFileExtensions.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); + + /// + /// Determines whether [is video file] [the specified path]. + /// + /// The path. + /// true if [is video file] [the specified path]; otherwise, false. + public static bool IsVideoFile(string path) + { + if (string.IsNullOrEmpty(path)) + { + throw new ArgumentNullException("path"); + } + + var extension = Path.GetExtension(path); + + if (string.IsNullOrEmpty(extension)) + { + return false; + } + + return VideoFileExtensionsDictionary.ContainsKey(extension); + } + /// /// Gets the type of the MIME. /// @@ -26,7 +87,7 @@ namespace MediaBrowser.Common.Net { throw new ArgumentNullException("path"); } - + var ext = Path.GetExtension(path) ?? string.Empty; // http://en.wikipedia.org/wiki/Internet_media_type @@ -37,10 +98,6 @@ namespace MediaBrowser.Common.Net { return "video/mpeg"; } - if (ext.Equals(".mp4", StringComparison.OrdinalIgnoreCase)) - { - return "video/mp4"; - } if (ext.Equals(".ogv", StringComparison.OrdinalIgnoreCase)) { return "video/ogg"; @@ -90,6 +147,12 @@ namespace MediaBrowser.Common.Net return "video/mp2t"; } + // Catch-all for all video types that don't require specific mime types + if (VideoFileExtensionsDictionary.ContainsKey(ext)) + { + return "video/" + ext.TrimStart('.').ToLower(); + } + // Type text if (ext.Equals(".css", StringComparison.OrdinalIgnoreCase)) { @@ -152,7 +215,7 @@ namespace MediaBrowser.Common.Net return "image/vnd.microsoft.icon"; } - // Type audio + // Type audio if (ext.Equals(".mp3", StringComparison.OrdinalIgnoreCase)) { return "audio/mpeg"; diff --git a/MediaBrowser.Controller/Connect/IConnectManager.cs b/MediaBrowser.Controller/Connect/IConnectManager.cs index 83f565472d..2e52591f5c 100644 --- a/MediaBrowser.Controller/Connect/IConnectManager.cs +++ b/MediaBrowser.Controller/Connect/IConnectManager.cs @@ -3,7 +3,6 @@ namespace MediaBrowser.Controller.Connect { public interface IConnectManager { - string WanIpAddress { get; } string WanApiAddress { get; } } } diff --git a/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs b/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs index 7c68448e54..9f5eade8e5 100644 --- a/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs +++ b/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs @@ -1,9 +1,10 @@ -using System.Globalization; -using MediaBrowser.Common.IO; +using MediaBrowser.Common.IO; +using MediaBrowser.Common.Net; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using System; using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Linq; using System.Text.RegularExpressions; @@ -30,43 +31,6 @@ namespace MediaBrowser.Controller.Resolvers }; - /// - /// Any extension in this list is considered a video file - can be added to at runtime for extensibility - /// - public static List VideoFileExtensions = new List - { - ".mkv", - ".m2t", - ".m2ts", - ".img", - ".iso", - ".mk3d", - ".ts", - ".rmvb", - ".mov", - ".avi", - ".mpg", - ".mpeg", - ".wmv", - ".mp4", - ".divx", - ".dvr-ms", - ".wtv", - ".ogm", - ".ogv", - ".asf", - ".m4v", - ".flv", - ".f4v", - ".3gp", - ".webm", - ".mts", - ".m2v", - ".rec" - }; - - private static readonly Dictionary VideoFileExtensionsDictionary = VideoFileExtensions.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); - private static readonly Regex MultiFileRegex = new Regex( @"(.*?)([ _.-]*(?:cd|dvd|p(?:ar)?t|dis[ck]|d)[ _.-]*[0-9]+)(.*?)(\.[^.]+)$", RegexOptions.Compiled | RegexOptions.IgnoreCase); @@ -156,19 +120,7 @@ namespace MediaBrowser.Controller.Resolvers /// true if [is video file] [the specified path]; otherwise, false. public static bool IsVideoFile(string path) { - if (string.IsNullOrEmpty(path)) - { - throw new ArgumentNullException("path"); - } - - var extension = Path.GetExtension(path); - - if (string.IsNullOrEmpty(extension)) - { - return false; - } - - return VideoFileExtensionsDictionary.ContainsKey(extension); + return MimeTypes.IsVideoFile(path); } /// diff --git a/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs b/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs index 8c0a143662..f1dfae934b 100644 --- a/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs +++ b/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs @@ -31,8 +31,23 @@ namespace MediaBrowser.Server.Implementations.Connect public string ConnectServerId { get; set; } public string ConnectAccessKey { get; set; } - public string WanIpAddress { get; private set; } + public string DiscoveredWanIpAddress { get; private set; } + public string WanIpAddress + { + get + { + var address = _config.Configuration.WanDdns; + + if (string.IsNullOrWhiteSpace(address)) + { + address = DiscoveredWanIpAddress; + } + + return address; + } + } + public string WanApiAddress { get @@ -75,7 +90,7 @@ namespace MediaBrowser.Server.Implementations.Connect internal void OnWanAddressResolved(string address) { - WanIpAddress = address; + DiscoveredWanIpAddress = address; //UpdateConnectInfo(); } diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json index bdc184a374..0448e8f3f2 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json @@ -445,5 +445,6 @@ "MessageTrialExpired": "The trial period for this feature has expired", "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", - "ValuePriceUSD": "Price: {0} (USD)" + "ValuePriceUSD": "Price: {0} (USD)", + "MessageFeatureIncludedWithSupporter": "You are registered for this feature, and will be able to continue using it with an active supporter membership." } diff --git a/MediaBrowser.Server.Implementations/Localization/Server/server.json b/MediaBrowser.Server.Implementations/Localization/Server/server.json index 4c5953b072..59357361fd 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/server.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/server.json @@ -1152,5 +1152,5 @@ "XmlDocumentAttributeListHelp": "These attributes are applied to the root element of every xml response.", "OptionSaveMetadataAsHidden": "Save metadata and images as hidden files", "LabelExtractChaptersDuringLibraryScan": "Extract chapter images during the library scan", - "LabelExtractChaptersDuringLibraryScanHelp": "If enabled, chapter images will be extracted as part of the normal library scan. If disabled they will be extracted during the chapter images scheduled task, allowing the regular library scan to complete faster." + "LabelExtractChaptersDuringLibraryScanHelp": "If enabled, chapter images will be extracted when videos are imported during the library scan. If disabled they will be extracted during the chapter images scheduled task, allowing the regular library scan to complete faster." }