From 3ba709fcc32d7255a2cb2466dde8c2479130a2bc Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 1 Jun 2019 15:03:48 -0700 Subject: Fix #1432. Add support for encoding with libx265 and hevc_nvenc. --- MediaBrowser.Model/Configuration/EncodingOptions.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'MediaBrowser.Model/Configuration') diff --git a/MediaBrowser.Model/Configuration/EncodingOptions.cs b/MediaBrowser.Model/Configuration/EncodingOptions.cs index 285ff4ba58..9ae10d9809 100644 --- a/MediaBrowser.Model/Configuration/EncodingOptions.cs +++ b/MediaBrowser.Model/Configuration/EncodingOptions.cs @@ -18,7 +18,8 @@ namespace MediaBrowser.Model.Configuration public string EncoderAppPathDisplay { get; set; } public string VaapiDevice { get; set; } public int H264Crf { get; set; } - public string H264Preset { get; set; } + public int H265Crf { get; set; } + public string EncoderPreset { get; set; } public string DeinterlaceMethod { get; set; } public bool EnableHardwareEncoding { get; set; } public bool EnableSubtitleExtraction { get; set; } @@ -34,6 +35,7 @@ namespace MediaBrowser.Model.Configuration // This is a DRM device that is almost guaranteed to be there on every intel platform, plus it's the default one in ffmpeg if you don't specify anything VaapiDevice = "/dev/dri/renderD128"; H264Crf = 23; + H265Crf = 28; EnableHardwareEncoding = true; EnableSubtitleExtraction = true; HardwareDecodingCodecs = new string[] { "h264", "vc1" }; -- cgit v1.2.3 From d521e5c36a0396a6e0ee562d8bda6fb5ffc6b0a7 Mon Sep 17 00:00:00 2001 From: dkanada Date: Mon, 5 Aug 2019 16:25:18 -0700 Subject: add base url to server configuration --- .../HttpServer/HttpListenerHost.cs | 58 +++------------------- .../Configuration/ServerConfiguration.cs | 2 + 2 files changed, 10 insertions(+), 50 deletions(-) (limited to 'MediaBrowser.Model/Configuration') diff --git a/Emby.Server.Implementations/HttpServer/HttpListenerHost.cs b/Emby.Server.Implementations/HttpServer/HttpListenerHost.cs index 2d2be7135a..48b229e88a 100644 --- a/Emby.Server.Implementations/HttpServer/HttpListenerHost.cs +++ b/Emby.Server.Implementations/HttpServer/HttpListenerHost.cs @@ -7,6 +7,7 @@ using System.Net.Sockets; using System.Reflection; using System.Threading; using System.Threading.Tasks; +using Emby.Server.Implementations.Configuration; using Emby.Server.Implementations.Net; using Emby.Server.Implementations.Services; using MediaBrowser.Common.Extensions; @@ -470,17 +471,10 @@ namespace Emby.Server.Implementations.HttpServer urlToLog = GetUrlToLog(urlString); - if (string.Equals(localPath, "/emby/", StringComparison.OrdinalIgnoreCase) || - string.Equals(localPath, "/mediabrowser/", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(localPath, "/" + _config.Configuration.BaseUrl + "/", StringComparison.OrdinalIgnoreCase) + || string.Equals(localPath, "/" + _config.Configuration.BaseUrl, StringComparison.OrdinalIgnoreCase)) { - httpRes.Redirect(_defaultRedirectPath); - return; - } - - if (string.Equals(localPath, "/emby", StringComparison.OrdinalIgnoreCase) || - string.Equals(localPath, "/mediabrowser", StringComparison.OrdinalIgnoreCase)) - { - httpRes.Redirect("emby/" + _defaultRedirectPath); + httpRes.Redirect("/" + _config.Configuration.BaseUrl + "/" + _defaultRedirectPath); return; } @@ -602,22 +596,7 @@ namespace Emby.Server.Implementations.HttpServer foreach (var route in clone) { - routes.Add(new RouteAttribute(NormalizeEmbyRoutePath(route.Path), route.Verbs) - { - Notes = route.Notes, - Priority = route.Priority, - Summary = route.Summary - }); - - routes.Add(new RouteAttribute(NormalizeMediaBrowserRoutePath(route.Path), route.Verbs) - { - Notes = route.Notes, - Priority = route.Priority, - Summary = route.Summary - }); - - // needed because apps add /emby, and some users also add /emby, thereby double prefixing - routes.Add(new RouteAttribute(DoubleNormalizeEmbyRoutePath(route.Path), route.Verbs) + routes.Add(new RouteAttribute(NormalizeCustomRoutePath(_config.Configuration.BaseUrl, route.Path), route.Verbs) { Notes = route.Notes, Priority = route.Priority, @@ -658,35 +637,14 @@ namespace Emby.Server.Implementations.HttpServer return _socketListener.ProcessWebSocketRequest(context); } - //TODO Add Jellyfin Route Path Normalizer - private static string NormalizeEmbyRoutePath(string path) - { - if (path.StartsWith("/", StringComparison.OrdinalIgnoreCase)) - { - return "/emby" + path; - } - - return "emby/" + path; - } - - private static string NormalizeMediaBrowserRoutePath(string path) - { - if (path.StartsWith("/", StringComparison.OrdinalIgnoreCase)) - { - return "/mediabrowser" + path; - } - - return "mediabrowser/" + path; - } - - private static string DoubleNormalizeEmbyRoutePath(string path) + private static string NormalizeCustomRoutePath(string baseUrl, string path) { if (path.StartsWith("/", StringComparison.OrdinalIgnoreCase)) { - return "/emby/emby" + path; + return "/" + baseUrl + path; } - return "emby/emby/" + path; + return baseUrl + "/" + path; } /// diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs index 2673597caa..d64ea35eb9 100644 --- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs +++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs @@ -163,6 +163,7 @@ namespace MediaBrowser.Model.Configuration public string ServerName { get; set; } public string WanDdns { get; set; } + public string BaseUrl { get; set; } public string UICulture { get; set; } @@ -243,6 +244,7 @@ namespace MediaBrowser.Model.Configuration SortRemoveCharacters = new[] { ",", "&", "-", "{", "}", "'" }; SortRemoveWords = new[] { "the", "a", "an" }; + BaseUrl = "jellyfin"; UICulture = "en-US"; MetadataOptions = new[] -- cgit v1.2.3 From 14f563d7c2f7cf87f181bed1d06497adc436f88e Mon Sep 17 00:00:00 2001 From: sparky8251 Date: Thu, 19 Sep 2019 15:56:54 -0400 Subject: Removed WAN DDNS It's odd that JF still had code lying around for generating a self signed cert. Currently, it does not do this so this code has been removed. JF also appears to have functions in place to modify provided certs? Warrants deeper investigation. JF should not be attempting modifications of any certs under any circumstance. --- Emby.Server.Implementations/ApplicationHost.cs | 20 +++----------------- .../Configuration/ServerConfiguration.cs | 1 - 2 files changed, 3 insertions(+), 18 deletions(-) (limited to 'MediaBrowser.Model/Configuration') diff --git a/Emby.Server.Implementations/ApplicationHost.cs b/Emby.Server.Implementations/ApplicationHost.cs index c9dccb16aa..1d0293a5f3 100644 --- a/Emby.Server.Implementations/ApplicationHost.cs +++ b/Emby.Server.Implementations/ApplicationHost.cs @@ -1198,25 +1198,11 @@ namespace Emby.Server.Implementations private CertificateInfo GetCertificateInfo(bool generateCertificate) { - if (!string.IsNullOrWhiteSpace(ServerConfigurationManager.Configuration.CertificatePath)) - { - // Custom cert - return new CertificateInfo - { - Path = ServerConfigurationManager.Configuration.CertificatePath, - Password = ServerConfigurationManager.Configuration.CertificatePassword - }; - } - - // Generate self-signed cert - var certHost = GetHostnameFromExternalDns(ServerConfigurationManager.Configuration.WanDdns); - var certPath = Path.Combine(ServerConfigurationManager.ApplicationPaths.ProgramDataPath, "ssl", "cert_" + (certHost + "2").GetMD5().ToString("N", CultureInfo.InvariantCulture) + ".pfx"); - const string Password = "embycert"; - + // Custom cert return new CertificateInfo { - Path = certPath, - Password = Password + Path = ServerConfigurationManager.Configuration.CertificatePath, + Password = ServerConfigurationManager.Configuration.CertificatePassword }; } diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs index d64ea35eb9..24e7714037 100644 --- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs +++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs @@ -162,7 +162,6 @@ namespace MediaBrowser.Model.Configuration public bool SkipDeserializationForBasicTypes { get; set; } public string ServerName { get; set; } - public string WanDdns { get; set; } public string BaseUrl { get; set; } public string UICulture { get; set; } -- cgit v1.2.3 From 2a79ae0a6e4deb4f5d1eb83a377d26ff542c88ca Mon Sep 17 00:00:00 2001 From: Joshua Boniface Date: Tue, 8 Oct 2019 15:18:34 -0400 Subject: Normalize baseUrl behaviour Fully normalizes the baseUrl behaviour to better match how this sort of feature works in other programs. 1. The baseUrl is always appended to paths, even the built-in `/emby` and `/mediabrowser` paths. 2. The baseUrl is set statically at class instance creation, to ensure it persists through changes until the next restart. 3. Configuration is normalized using a function when set, to ensure it's in a standard `/mypath` format with leading `/`. 4. Cleans up the conditionals around default redirects. For sanity after changing the URL, it will match *any* path that doesn't match the current baseUrl and redirect it back to the main page (with baseUrl). 5. Adds a second method, NormalizeUrlPath, to avoid lots of `+ "/" +` string manipulations which are unclean - we should always have a leading slash. 6. Sets the default baseUrl to an empty string to avoid unexpected behaviour, though this would be worked-around automatically. 7. Adds some debug logs whenever a URL is normalized, to help track down issues with this code (if any arise). --- .../HttpServer/HttpListenerHost.cs | 73 ++++++++++------------ .../Configuration/ServerConfiguration.cs | 34 +++++++++- 2 files changed, 66 insertions(+), 41 deletions(-) (limited to 'MediaBrowser.Model/Configuration') diff --git a/Emby.Server.Implementations/HttpServer/HttpListenerHost.cs b/Emby.Server.Implementations/HttpServer/HttpListenerHost.cs index d60f5c0556..36753a9a12 100644 --- a/Emby.Server.Implementations/HttpServer/HttpListenerHost.cs +++ b/Emby.Server.Implementations/HttpServer/HttpListenerHost.cs @@ -39,6 +39,7 @@ namespace Emby.Server.Implementations.HttpServer private readonly IHttpListener _socketListener; private readonly Func> _funcParseFn; private readonly string _defaultRedirectPath; + private readonly string _baseUrlPrefix; private readonly Dictionary ServiceOperationsMap = new Dictionary(); private IWebSocketListener[] _webSocketListeners = Array.Empty(); private readonly List _webSocketConnections = new List(); @@ -58,6 +59,7 @@ namespace Emby.Server.Implementations.HttpServer _logger = logger; _config = config; _defaultRedirectPath = configuration["HttpListenerHost:DefaultRedirectPath"]; + _baseUrlPrefix = _config.Configuration.BaseUrl; _networkManager = networkManager; _jsonSerializer = jsonSerializer; _xmlSerializer = xmlSerializer; @@ -87,6 +89,20 @@ namespace Emby.Server.Implementations.HttpServer return _appHost.CreateInstance(type); } + private string NormalizeUrlPath(string path) + { + if (path.StartsWith("/")) + { + // If the path begins with a leading slash, just return it as-is + return path; + } + else + { + // If the path does not begin with a leading slash, append one for consistency + return "/" + path; + } + } + /// /// Applies the request filters. Returns whether or not the request has been handled /// and no more processing should be done. @@ -471,22 +487,15 @@ namespace Emby.Server.Implementations.HttpServer urlToLog = GetUrlToLog(urlString); - if (string.Equals(localPath, "/" + _config.Configuration.BaseUrl + "/", StringComparison.OrdinalIgnoreCase) - || string.Equals(localPath, "/" + _config.Configuration.BaseUrl, StringComparison.OrdinalIgnoreCase)) - { - httpRes.Redirect("/" + _config.Configuration.BaseUrl + "/" + _defaultRedirectPath); - return; - } - - if (string.Equals(localPath, "/", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(localPath, _baseUrlPrefix + "/", StringComparison.OrdinalIgnoreCase) + || string.Equals(localPath, _baseUrlPrefix, StringComparison.OrdinalIgnoreCase) + || string.Equals(localPath, "/", StringComparison.OrdinalIgnoreCase) + || string.IsNullOrEmpty(localPath) + || !localPath.StartsWith(_baseUrlPrefix)) { - httpRes.Redirect(_defaultRedirectPath); - return; - } - - if (string.IsNullOrEmpty(localPath)) - { - httpRes.Redirect("/" + _defaultRedirectPath); + // Always redirect back to the default path if the base prefix is invalid or missing + _logger.LogDebug("Normalizing a URL at {0}", localPath); + httpRes.Redirect(_baseUrlPrefix + "/" + _defaultRedirectPath); return; } @@ -596,7 +605,7 @@ namespace Emby.Server.Implementations.HttpServer foreach (var route in clone) { - routes.Add(new RouteAttribute(NormalizeCustomRoutePath(_config.Configuration.BaseUrl, route.Path), route.Verbs) + routes.Add(new RouteAttribute(NormalizeCustomRoutePath(route.Path), route.Verbs) { Notes = route.Notes, Priority = route.Priority, @@ -651,36 +660,22 @@ namespace Emby.Server.Implementations.HttpServer return _socketListener.ProcessWebSocketRequest(context); } - // this method was left for compatibility with third party clients - private static string NormalizeEmbyRoutePath(string path) + private string NormalizeEmbyRoutePath(string path) { - if (path.StartsWith("/", StringComparison.OrdinalIgnoreCase)) - { - return "/emby" + path; - } - - return "emby/" + path; + _logger.LogDebug("Normalizing /emby route"); + return _baseUrlPrefix + "/emby" + NormalizeUrlPath(path); } - // this method was left for compatibility with third party clients - private static string NormalizeMediaBrowserRoutePath(string path) + private string NormalizeMediaBrowserRoutePath(string path) { - if (path.StartsWith("/", StringComparison.OrdinalIgnoreCase)) - { - return "/mediabrowser" + path; - } - - return "mediabrowser/" + path; + _logger.LogDebug("Normalizing /mediabrowser route"); + return _baseUrlPrefix + "/mediabrowser" + NormalizeUrlPath(path); } - private static string NormalizeCustomRoutePath(string baseUrl, string path) + private string NormalizeCustomRoutePath(string path) { - if (path.StartsWith("/", StringComparison.OrdinalIgnoreCase)) - { - return "/" + baseUrl + path; - } - - return baseUrl + "/" + path; + _logger.LogDebug("Normalizing custom route {0}", path); + return _baseUrlPrefix + NormalizeUrlPath(path); } /// diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs index 24e7714037..93993bec1a 100644 --- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs +++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs @@ -10,6 +10,7 @@ namespace MediaBrowser.Model.Configuration { public const int DefaultHttpPort = 8096; public const int DefaultHttpsPort = 8920; + private string _baseUrl; /// /// Gets or sets a value indicating whether [enable u pn p]. @@ -162,7 +163,36 @@ namespace MediaBrowser.Model.Configuration public bool SkipDeserializationForBasicTypes { get; set; } public string ServerName { get; set; } - public string BaseUrl { get; set; } + public string BaseUrl + { + get => _baseUrl; + set + { + _baseUrl = value; + // Normalize the start of the string + if (string.IsNullOrWhiteSpace(_baseUrl)) + { + // If baseUrl is empty, set an empty prefix string + _baseUrl = string.Empty; + } + else if (!_baseUrl.StartsWith("/")) + { + // If baseUrl was not configured with a leading slash, append one for consistency + _baseUrl = "/" + _baseUrl; + } + else + { + // If baseUrl was configured with a leading slash, just return it as-is + _baseUrl = _baseUrl; + } + // Normalize the end of the string + if (_baseUrl.EndsWith("/")) + { + // If baseUrl was configured with a trailing slash, remove it for consistency + _baseUrl = _baseUrl.Remove(_baseUrl.Length - 1); + } + } + } public string UICulture { get; set; } @@ -243,7 +273,7 @@ namespace MediaBrowser.Model.Configuration SortRemoveCharacters = new[] { ",", "&", "-", "{", "}", "'" }; SortRemoveWords = new[] { "the", "a", "an" }; - BaseUrl = "jellyfin"; + BaseUrl = string.Empty; UICulture = "en-US"; MetadataOptions = new[] -- cgit v1.2.3 From b10e06ff459476042cff0eec5ebea3c304e6d1f5 Mon Sep 17 00:00:00 2001 From: Joshua Boniface Date: Wed, 9 Oct 2019 10:36:40 -0400 Subject: Fix spacing issues --- MediaBrowser.Model/Configuration/ServerConfiguration.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'MediaBrowser.Model/Configuration') diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs index 93993bec1a..b0a96aa037 100644 --- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs +++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs @@ -169,7 +169,8 @@ namespace MediaBrowser.Model.Configuration set { _baseUrl = value; - // Normalize the start of the string + + // Normalize the start of the string if (string.IsNullOrWhiteSpace(_baseUrl)) { // If baseUrl is empty, set an empty prefix string @@ -185,6 +186,7 @@ namespace MediaBrowser.Model.Configuration // If baseUrl was configured with a leading slash, just return it as-is _baseUrl = _baseUrl; } + // Normalize the end of the string if (_baseUrl.EndsWith("/")) { -- cgit v1.2.3 From 345a14ff5543256a4fa5c6a55f76d77334972c67 Mon Sep 17 00:00:00 2001 From: Joshua Boniface Date: Wed, 9 Oct 2019 10:52:51 -0400 Subject: Use value instead of assigning baseUrl first --- .../Configuration/ServerConfiguration.cs | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) (limited to 'MediaBrowser.Model/Configuration') diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs index b0a96aa037..b8abe49e3e 100644 --- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs +++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs @@ -168,31 +168,26 @@ namespace MediaBrowser.Model.Configuration get => _baseUrl; set { - _baseUrl = value; - // Normalize the start of the string - if (string.IsNullOrWhiteSpace(_baseUrl)) + if (string.IsNullOrWhiteSpace(value)) { // If baseUrl is empty, set an empty prefix string - _baseUrl = string.Empty; + value = string.Empty; } - else if (!_baseUrl.StartsWith("/")) + else if (!value.StartsWith("/")) { // If baseUrl was not configured with a leading slash, append one for consistency - _baseUrl = "/" + _baseUrl; - } - else - { - // If baseUrl was configured with a leading slash, just return it as-is - _baseUrl = _baseUrl; + value = "/" + value; } // Normalize the end of the string - if (_baseUrl.EndsWith("/")) + if (value.EndsWith("/")) { // If baseUrl was configured with a trailing slash, remove it for consistency - _baseUrl = _baseUrl.Remove(_baseUrl.Length - 1); + value = value.Remove(value.Length - 1); } + + _baseUrl = value; } } -- cgit v1.2.3