added a new encoding settings page under advanced
This commit is contained in:
parent
9862959354
commit
5392ff4da4
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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")]
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -481,6 +481,7 @@ namespace MediaBrowser.WebDashboard.Api
|
|||
"edititemmetadata.js",
|
||||
"edititempeople.js",
|
||||
"edititemimages.js",
|
||||
"encodingsettings.js",
|
||||
"gamesrecommendedpage.js",
|
||||
"gamesystemspage.js",
|
||||
"gamespage.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) {
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
Loading…
Reference in New Issue
Block a user