diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-01-07 13:39:35 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-01-07 13:39:35 -0500 |
| commit | 5392ff4da4794a0c4268baa61572a8cd881db379 (patch) | |
| tree | d6a95ff3393fdfb44764bea77c820b6fa39bbcc1 | |
| parent | 9862959354560e00331433ec6cd4276210e1a1c4 (diff) | |
added a new encoding settings page under advanced
16 files changed, 116 insertions, 26 deletions
diff --git a/MediaBrowser.Api/LiveTv/LiveTvService.cs b/MediaBrowser.Api/LiveTv/LiveTvService.cs index e985fb615..df6d9389b 100644 --- a/MediaBrowser.Api/LiveTv/LiveTvService.cs +++ b/MediaBrowser.Api/LiveTv/LiveTvService.cs @@ -120,16 +120,16 @@ namespace MediaBrowser.Api.LiveTv [ApiMember(Name = "UserId", Description = "Optional filter by user id.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] public string UserId { get; set; } - [ApiMember(Name = "MinStartDate", Description = "Optional. The minimum premiere date. Format = yyyyMMddHHmmss", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")] + [ApiMember(Name = "MinStartDate", Description = "Optional. The minimum premiere date. Format = ISO", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")] public string MinStartDate { get; set; } - [ApiMember(Name = "MaxStartDate", Description = "Optional. The maximum premiere date. Format = yyyyMMddHHmmss", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")] + [ApiMember(Name = "MaxStartDate", Description = "Optional. The maximum premiere date. Format = ISO", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")] public string MaxStartDate { get; set; } - [ApiMember(Name = "MinEndDate", Description = "Optional. The minimum premiere date. Format = yyyyMMddHHmmss", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")] + [ApiMember(Name = "MinEndDate", Description = "Optional. The minimum premiere date. Format = ISO", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")] public string MinEndDate { get; set; } - [ApiMember(Name = "MaxEndDate", Description = "Optional. The maximum premiere date. Format = yyyyMMddHHmmss", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")] + [ApiMember(Name = "MaxEndDate", Description = "Optional. The maximum premiere date. Format = ISO", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")] public string MaxEndDate { get; set; } } @@ -215,6 +215,12 @@ namespace MediaBrowser.Api.LiveTv public string Id { get; set; } } + [Route("/LiveTv/GuideInfo", "GET")] + [Api(Description = "Gets guide info")] + public class GetGuideInfo : IReturn<GuideInfo> + { + } + public class LiveTvService : BaseApiService { private readonly ILiveTvManager _liveTvManager; @@ -274,22 +280,22 @@ namespace MediaBrowser.Api.LiveTv if (!string.IsNullOrEmpty(request.MinStartDate)) { - query.MinStartDate = DateTime.ParseExact(request.MinStartDate, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); + query.MinStartDate = DateTime.Parse(request.MinStartDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime(); } if (!string.IsNullOrEmpty(request.MinEndDate)) { - query.MinEndDate = DateTime.ParseExact(request.MinEndDate, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); + query.MinEndDate = DateTime.Parse(request.MinEndDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime(); } if (!string.IsNullOrEmpty(request.MaxStartDate)) { - query.MaxStartDate = DateTime.ParseExact(request.MaxStartDate, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); + query.MaxStartDate = DateTime.Parse(request.MaxStartDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime(); } if (!string.IsNullOrEmpty(request.MaxEndDate)) { - query.MaxEndDate = DateTime.ParseExact(request.MaxEndDate, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); + query.MaxEndDate = DateTime.Parse(request.MaxEndDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime(); } var result = _liveTvManager.GetPrograms(query, CancellationToken.None).Result; @@ -453,5 +459,10 @@ namespace MediaBrowser.Api.LiveTv return ToOptimizedResult(group); } + + public object Get(GetGuideInfo request) + { + return ToOptimizedResult(_liveTvManager.GetGuideInfo()); + } } }
\ No newline at end of file diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index ac4b53adf..dc34fca77 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -257,10 +257,10 @@ namespace MediaBrowser.Api.Playback /// Gets the number of threads. /// </summary> /// <returns>System.Int32.</returns> - /// <exception cref="System.Exception">Unrecognized EncodingQuality value.</exception> + /// <exception cref="System.Exception">Unrecognized MediaEncodingQuality value.</exception> protected int GetNumberOfThreads() { - var quality = ServerConfigurationManager.Configuration.EncodingQuality; + var quality = ServerConfigurationManager.Configuration.MediaEncodingQuality; switch (quality) { @@ -273,7 +273,7 @@ namespace MediaBrowser.Api.Playback case EncodingQuality.MaxQuality: return 0; default: - throw new Exception("Unrecognized EncodingQuality value."); + throw new Exception("Unrecognized MediaEncodingQuality value."); } } @@ -706,6 +706,13 @@ namespace MediaBrowser.Api.Playback state.IsoMount = await IsoManager.Mount(state.MediaPath, CancellationToken.None).ConfigureAwait(false); } + var commandLineArgs = GetCommandLineArguments(outputPath, state, true); + + if (ServerConfigurationManager.Configuration.EnableDebugEncodingLogging) + { + commandLineArgs = "-loglevel debug " + commandLineArgs; + } + var process = new Process { StartInfo = new ProcessStartInfo @@ -719,7 +726,7 @@ namespace MediaBrowser.Api.Playback FileName = MediaEncoder.EncoderPath, WorkingDirectory = Path.GetDirectoryName(MediaEncoder.EncoderPath), - Arguments = GetCommandLineArguments(outputPath, state, true), + Arguments = commandLineArgs, WindowStyle = ProcessWindowStyle.Hidden, ErrorDialog = false, diff --git a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs index 68342e91d..9abedde4b 100644 --- a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs @@ -7,6 +7,7 @@ using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.LiveTv; using MediaBrowser.Controller.Persistence; +using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Dto; using MediaBrowser.Model.IO; using System; @@ -111,7 +112,15 @@ namespace MediaBrowser.Api.Playback.Hls if (isPlaylistNewlyCreated) { - await WaitForMinimumSegmentCount(playlist, 3).ConfigureAwait(false); + var minimumSegmentCount = 3; + var quality = ServerConfigurationManager.Configuration.MediaEncodingQuality; + + if (quality == EncodingQuality.HighSpeed || quality == EncodingQuality.HighQuality) + { + minimumSegmentCount = 2; + } + + await WaitForMinimumSegmentCount(playlist, minimumSegmentCount).ConfigureAwait(false); } int audioBitrate; diff --git a/MediaBrowser.Api/Playback/Progressive/VideoService.cs b/MediaBrowser.Api/Playback/Progressive/VideoService.cs index f4e4019f6..cdc8e2ffb 100644 --- a/MediaBrowser.Api/Playback/Progressive/VideoService.cs +++ b/MediaBrowser.Api/Playback/Progressive/VideoService.cs @@ -29,6 +29,7 @@ namespace MediaBrowser.Api.Playback.Progressive [Route("/Videos/{Id}/stream.m2ts", "GET")] [Route("/Videos/{Id}/stream.3gp", "GET")] [Route("/Videos/{Id}/stream.wmv", "GET")] + [Route("/Videos/{Id}/stream.wtv", "GET")] [Route("/Videos/{Id}/stream", "GET")] [Route("/Videos/{Id}/stream.ts", "HEAD")] [Route("/Videos/{Id}/stream.webm", "HEAD")] @@ -42,6 +43,7 @@ namespace MediaBrowser.Api.Playback.Progressive [Route("/Videos/{Id}/stream.avi", "HEAD")] [Route("/Videos/{Id}/stream.3gp", "HEAD")] [Route("/Videos/{Id}/stream.wmv", "HEAD")] + [Route("/Videos/{Id}/stream.wtv", "HEAD")] [Route("/Videos/{Id}/stream.m2ts", "HEAD")] [Route("/Videos/{Id}/stream", "HEAD")] [Api(Description = "Gets a video stream")] diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index 464f4ba1a..202ac293f 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -196,10 +196,10 @@ namespace MediaBrowser.Api.UserLibrary [ApiMember(Name = "AiredDuringSeason", Description = "Gets all episodes that aired during a season, including specials.", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")] public int? AiredDuringSeason { get; set; } - [ApiMember(Name = "MinPremiereDate", Description = "Optional. The minimum premiere date. Format = yyyyMMddHHmmss", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")] + [ApiMember(Name = "MinPremiereDate", Description = "Optional. The minimum premiere date. Format = ISO", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")] public string MinPremiereDate { get; set; } - [ApiMember(Name = "MaxPremiereDate", Description = "Optional. The maximum premiere date. Format = yyyyMMddHHmmss", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")] + [ApiMember(Name = "MaxPremiereDate", Description = "Optional. The maximum premiere date. Format = ISO", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")] public string MaxPremiereDate { get; set; } [ApiMember(Name = "HasOverview", Description = "Optional filter by items that have an overview or not.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")] @@ -1031,14 +1031,14 @@ namespace MediaBrowser.Api.UserLibrary if (!string.IsNullOrEmpty(request.MinPremiereDate)) { - var date = DateTime.ParseExact(request.MinPremiereDate, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); + var date = DateTime.Parse(request.MinPremiereDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime(); items = items.Where(i => i.PremiereDate.HasValue && i.PremiereDate.Value >= date); } if (!string.IsNullOrEmpty(request.MaxPremiereDate)) { - var date = DateTime.ParseExact(request.MaxPremiereDate, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); + var date = DateTime.Parse(request.MaxPremiereDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime(); items = items.Where(i => i.PremiereDate.HasValue && i.PremiereDate.Value <= date); } diff --git a/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs b/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs index 07fa0e610..d057598e3 100644 --- a/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs +++ b/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs @@ -109,7 +109,12 @@ namespace MediaBrowser.Api.WebSocket { while (!reader.EndOfStream) { - lines.Add(await reader.ReadLineAsync().ConfigureAwait(false)); + var line = await reader.ReadLineAsync().ConfigureAwait(false); + + if (line.IndexOf(", Debug,", StringComparison.OrdinalIgnoreCase) == -1) + { + lines.Add(line); + } } } } diff --git a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs index ceca14f5b..d23c8c555 100644 --- a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs +++ b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs @@ -235,5 +235,11 @@ namespace MediaBrowser.Controller.LiveTv /// <param name="cancellationToken">The cancellation token.</param> /// <returns>Task.</returns> Task CloseLiveStream(string id, CancellationToken cancellationToken); + + /// <summary> + /// Gets the guide information. + /// </summary> + /// <returns>GuideInfo.</returns> + GuideInfo GetGuideInfo(); } } diff --git a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs index 67475b329..3b499b487 100644 --- a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs +++ b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs @@ -45,7 +45,7 @@ namespace MediaBrowser.Controller.Providers protected static readonly Task<bool> FalseTaskResult = Task.FromResult(false); - protected static readonly SemaphoreSlim XmlParsingResourcePool = new SemaphoreSlim(5, 5); + protected static readonly SemaphoreSlim XmlParsingResourcePool = new SemaphoreSlim(4, 4); /// <summary> /// Supportses the specified item. diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs index c8c205404..02dd909f2 100644 --- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs +++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs @@ -207,7 +207,7 @@ namespace MediaBrowser.Model.Configuration /// Gets or sets the encoding quality. /// </summary> /// <value>The encoding quality.</value> - public EncodingQuality EncodingQuality { get; set; } + public EncodingQuality MediaEncodingQuality { get; set; } public bool EnableMovieChapterImageExtraction { get; set; } public bool EnableEpisodeChapterImageExtraction { get; set; } @@ -219,12 +219,15 @@ namespace MediaBrowser.Model.Configuration public MetadataOptions GameOptions { get; set; } public MetadataOptions BookOptions { get; set; } + public bool EnableDebugEncodingLogging { get; set; } + /// <summary> /// Initializes a new instance of the <see cref="ServerConfiguration" /> class. /// </summary> public ServerConfiguration() : base() { + MediaEncodingQuality = EncodingQuality.HighSpeed; ImageSavingConvention = ImageSavingConvention.Legacy; HttpServerPortNumber = 8096; LegacyWebSocketPortNumber = 8945; diff --git a/MediaBrowser.Model/LiveTv/LiveTvServiceInfo.cs b/MediaBrowser.Model/LiveTv/LiveTvServiceInfo.cs index 87647738f..a25207509 100644 --- a/MediaBrowser.Model/LiveTv/LiveTvServiceInfo.cs +++ b/MediaBrowser.Model/LiveTv/LiveTvServiceInfo.cs @@ -1,4 +1,5 @@ - +using System; + namespace MediaBrowser.Model.LiveTv { /// <summary> @@ -12,4 +13,19 @@ namespace MediaBrowser.Model.LiveTv /// <value>The name.</value> public string Name { get; set; } } + + public class GuideInfo + { + /// <summary> + /// Gets or sets the start date. + /// </summary> + /// <value>The start date.</value> + public DateTime StartDate { get; set; } + + /// <summary> + /// Gets or sets the end date. + /// </summary> + /// <value>The end date.</value> + public DateTime EndDate { get; set; } + } } diff --git a/MediaBrowser.Providers/Movies/PersonProviderFromXml.cs b/MediaBrowser.Providers/Movies/PersonProviderFromXml.cs index 60722f980..014580025 100644 --- a/MediaBrowser.Providers/Movies/PersonProviderFromXml.cs +++ b/MediaBrowser.Providers/Movies/PersonProviderFromXml.cs @@ -57,6 +57,7 @@ namespace MediaBrowser.Providers.Movies /// </summary> /// <param name="item">The item.</param> /// <param name="force">if set to <c>true</c> [force].</param> + /// <param name="providerInfo">The provider information.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>Task{System.Boolean}.</returns> public override async Task<bool> FetchAsync(BaseItem item, bool force, BaseProviderInfo providerInfo, CancellationToken cancellationToken) @@ -79,12 +80,10 @@ namespace MediaBrowser.Providers.Movies { XmlParsingResourcePool.Release(); } - - SetLastRefreshed(item, DateTime.UtcNow, providerInfo); - return true; } - return false; + SetLastRefreshed(item, DateTime.UtcNow, providerInfo); + return true; } } } diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs index 332cbf016..d49410b4e 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs @@ -980,5 +980,19 @@ namespace MediaBrowser.Server.Implementations.LiveTv { return ActiveService.CloseLiveStream(id, cancellationToken); } + + public GuideInfo GetGuideInfo() + { + var programs = _programs.ToList(); + + var startDate = programs.Select(i => i.Value.ProgramInfo.StartDate).Min(); + var endDate = programs.Select(i => i.Value.ProgramInfo.StartDate).Max(); + + return new GuideInfo + { + StartDate = startDate, + EndDate = endDate + }; + } } } diff --git a/MediaBrowser.WebDashboard/Api/DashboardService.cs b/MediaBrowser.WebDashboard/Api/DashboardService.cs index 5605ce6e7..c67a90e3e 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardService.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardService.cs @@ -481,6 +481,7 @@ namespace MediaBrowser.WebDashboard.Api "edititemmetadata.js", "edititempeople.js", "edititemimages.js", + "encodingsettings.js", "gamesrecommendedpage.js", "gamesystemspage.js", "gamespage.js", diff --git a/MediaBrowser.WebDashboard/ApiClient.js b/MediaBrowser.WebDashboard/ApiClient.js index be2a342c9..f2b2d6b7b 100644 --- a/MediaBrowser.WebDashboard/ApiClient.js +++ b/MediaBrowser.WebDashboard/ApiClient.js @@ -389,6 +389,17 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi }); }; + self.getLiveTvGuideInfo = function (options) { + + var url = self.getUrl("LiveTv/GuideInfo", options || {}); + + return self.ajax({ + type: "GET", + url: url, + dataType: "json" + }); + }; + self.getLiveTvChannel = function (id, userId) { if (!id) { diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj index cbd53bde9..7724c02f5 100644 --- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj +++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj @@ -160,6 +160,9 @@ <Content Include="dashboard-ui\css\mediaplayer.css">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
+ <Content Include="dashboard-ui\encodingsettings.html">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
<Content Include="dashboard-ui\livetvchannel.html">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
@@ -397,6 +400,9 @@ <Content Include="dashboard-ui\scripts\appsplayback.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
+ <Content Include="dashboard-ui\scripts\encodingsettings.js">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
<Content Include="dashboard-ui\scripts\librarymenu.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
diff --git a/MediaBrowser.WebDashboard/packages.config b/MediaBrowser.WebDashboard/packages.config index 4932cd5c1..3bb7e7105 100644 --- a/MediaBrowser.WebDashboard/packages.config +++ b/MediaBrowser.WebDashboard/packages.config @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="utf-8"?> <packages> - <package id="MediaBrowser.ApiClient.Javascript" version="3.0.218" targetFramework="net45" /> + <package id="MediaBrowser.ApiClient.Javascript" version="3.0.219" targetFramework="net45" /> </packages>
\ No newline at end of file |
