commit
4e10daf646
|
@ -135,6 +135,18 @@ namespace Emby.Dlna.Profiles
|
|||
{
|
||||
Format = "sub",
|
||||
Method = SubtitleDeliveryMethod.Embed
|
||||
},
|
||||
|
||||
new SubtitleProfile
|
||||
{
|
||||
Format = "subrip",
|
||||
Method = SubtitleDeliveryMethod.Embed
|
||||
},
|
||||
|
||||
new SubtitleProfile
|
||||
{
|
||||
Format = "vtt",
|
||||
Method = SubtitleDeliveryMethod.Embed
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -55,5 +55,7 @@
|
|||
<SubtitleProfile format="pgs" method="Embed" />
|
||||
<SubtitleProfile format="pgssub" method="Embed" />
|
||||
<SubtitleProfile format="sub" method="Embed" />
|
||||
<SubtitleProfile format="subrip" method="Embed" />
|
||||
<SubtitleProfile format="vtt" method="Embed" />
|
||||
</SubtitleProfiles>
|
||||
</Profile>
|
|
@ -55,5 +55,7 @@
|
|||
<SubtitleProfile format="pgs" method="Embed" />
|
||||
<SubtitleProfile format="pgssub" method="Embed" />
|
||||
<SubtitleProfile format="sub" method="Embed" />
|
||||
<SubtitleProfile format="subrip" method="Embed" />
|
||||
<SubtitleProfile format="vtt" method="Embed" />
|
||||
</SubtitleProfiles>
|
||||
</Profile>
|
|
@ -61,5 +61,7 @@
|
|||
<SubtitleProfile format="pgs" method="Embed" />
|
||||
<SubtitleProfile format="pgssub" method="Embed" />
|
||||
<SubtitleProfile format="sub" method="Embed" />
|
||||
<SubtitleProfile format="subrip" method="Embed" />
|
||||
<SubtitleProfile format="vtt" method="Embed" />
|
||||
</SubtitleProfiles>
|
||||
</Profile>
|
|
@ -61,5 +61,7 @@
|
|||
<SubtitleProfile format="pgs" method="Embed" />
|
||||
<SubtitleProfile format="pgssub" method="Embed" />
|
||||
<SubtitleProfile format="sub" method="Embed" />
|
||||
<SubtitleProfile format="subrip" method="Embed" />
|
||||
<SubtitleProfile format="vtt" method="Embed" />
|
||||
</SubtitleProfiles>
|
||||
</Profile>
|
|
@ -58,6 +58,18 @@ namespace Emby.Server.Implementations.HttpServer
|
|||
return GetHttpResult(content, contentType, true, responseHeaders);
|
||||
}
|
||||
|
||||
public object GetRedirectResult(string url)
|
||||
{
|
||||
var responseHeaders = new Dictionary<string, string>();
|
||||
responseHeaders["Location"] = url;
|
||||
|
||||
var result = new HttpResult(new byte[] { }, "text/plain", HttpStatusCode.Redirect);
|
||||
|
||||
AddResponseHeaders(result, responseHeaders);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the HTTP result.
|
||||
/// </summary>
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Api.Playback.Hls;
|
||||
using MediaBrowser.Api.Playback.Progressive;
|
||||
|
@ -42,6 +41,7 @@ namespace MediaBrowser.Api.Playback
|
|||
public string Container { get; set; }
|
||||
|
||||
public int? MaxAudioChannels { get; set; }
|
||||
public int? TranscodingAudioChannels { get; set; }
|
||||
|
||||
public long? MaxStreamingBitrate { get; set; }
|
||||
|
||||
|
@ -51,6 +51,15 @@ namespace MediaBrowser.Api.Playback
|
|||
public string TranscodingContainer { get; set; }
|
||||
public string TranscodingProtocol { get; set; }
|
||||
public int? MaxAudioSampleRate { get; set; }
|
||||
|
||||
public bool EnableRedirection { get; set; }
|
||||
public bool EnableRemoteMedia { get; set; }
|
||||
public bool BreakOnNonKeyFrames { get; set; }
|
||||
|
||||
public BaseUniversalRequest()
|
||||
{
|
||||
EnableRedirection = true;
|
||||
}
|
||||
}
|
||||
|
||||
[Route("/Audio/{Id}/universal.{Container}", "GET", Summary = "Gets an audio stream")]
|
||||
|
@ -133,7 +142,9 @@ namespace MediaBrowser.Api.Playback
|
|||
Context = EncodingContext.Streaming,
|
||||
Container = request.TranscodingContainer,
|
||||
AudioCodec = request.AudioCodec,
|
||||
Protocol = request.TranscodingProtocol
|
||||
Protocol = request.TranscodingProtocol,
|
||||
BreakOnNonKeyFrames = request.BreakOnNonKeyFrames,
|
||||
MaxAudioChannels = request.TranscodingAudioChannels.HasValue ? request.TranscodingAudioChannels.Value.ToString(CultureInfo.InvariantCulture) : null
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -205,6 +216,17 @@ namespace MediaBrowser.Api.Playback
|
|||
|
||||
var mediaSource = playbackInfoResult.MediaSources[0];
|
||||
|
||||
if (mediaSource.SupportsDirectPlay && mediaSource.Protocol == MediaProtocol.Http)
|
||||
{
|
||||
if (request.EnableRedirection)
|
||||
{
|
||||
if (mediaSource.IsRemote && request.EnableRemoteMedia)
|
||||
{
|
||||
return ResultFactory.GetRedirectResult(mediaSource.Path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var isStatic = mediaSource.SupportsDirectStream;
|
||||
|
||||
if (!isStatic && string.Equals(mediaSource.TranscodingSubProtocol, "hls", StringComparison.OrdinalIgnoreCase))
|
||||
|
@ -242,7 +264,8 @@ namespace MediaBrowser.Api.Playback
|
|||
StartTimeTicks = request.StartTimeTicks,
|
||||
Static = isStatic,
|
||||
SegmentContainer = request.TranscodingContainer,
|
||||
AudioSampleRate = request.MaxAudioSampleRate
|
||||
AudioSampleRate = request.MaxAudioSampleRate,
|
||||
BreakOnNonKeyFrames = transcodingProfile.BreakOnNonKeyFrames
|
||||
};
|
||||
|
||||
if (isHeadRequest)
|
||||
|
|
|
@ -100,6 +100,7 @@ namespace MediaBrowser.Api
|
|||
config.EnableSimpleArtistDetection = true;
|
||||
config.EnableNormalizedItemByNameIds = true;
|
||||
config.DisableLiveTvChannelUserDataName = true;
|
||||
config.EnableSimpleSortNameHandling = true;
|
||||
}
|
||||
|
||||
public void Post(UpdateStartupConfiguration request)
|
||||
|
|
|
@ -655,7 +655,17 @@ namespace MediaBrowser.Controller.Entities
|
|||
|
||||
private string CreateSortNameFromCustomValue(string value)
|
||||
{
|
||||
return string.IsNullOrWhiteSpace(value) ? null : ModifySortChunks(value).ToLower();
|
||||
return string.IsNullOrWhiteSpace(value) ? null : NormalizeCustomSortName(value);
|
||||
}
|
||||
|
||||
protected virtual string NormalizeCustomSortName(string value)
|
||||
{
|
||||
if (ConfigurationManager.Configuration.EnableSimpleSortNameHandling)
|
||||
{
|
||||
return value.RemoveDiacritics().ToLower();
|
||||
}
|
||||
|
||||
return ModifySortChunks(value).ToLower();
|
||||
}
|
||||
|
||||
public bool IsSortNameDefault(string value)
|
||||
|
|
|
@ -101,7 +101,7 @@ namespace MediaBrowser.Controller.LiveTv
|
|||
}
|
||||
}
|
||||
|
||||
return Number + "-" + (Name ?? string.Empty);
|
||||
return (Number ?? string.Empty) + "-" + (Name ?? string.Empty);
|
||||
}
|
||||
|
||||
[IgnoreDataMember]
|
||||
|
|
|
@ -22,6 +22,8 @@ namespace MediaBrowser.Controller.Net
|
|||
/// <returns>System.Object.</returns>
|
||||
object GetResult(object content, string contentType, IDictionary<string,string> responseHeaders = null);
|
||||
|
||||
object GetRedirectResult(string url);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the optimized result.
|
||||
/// </summary>
|
||||
|
|
|
@ -17,6 +17,8 @@ namespace MediaBrowser.Model.Configuration
|
|||
/// <value><c>true</c> if [enable u pn p]; otherwise, <c>false</c>.</value>
|
||||
public bool EnableUPnP { get; set; }
|
||||
|
||||
public bool EnableSimpleSortNameHandling { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the public mapped port.
|
||||
/// </summary>
|
||||
|
@ -77,8 +79,6 @@ namespace MediaBrowser.Model.Configuration
|
|||
public string MetadataPath { get; set; }
|
||||
public string MetadataNetworkPath { get; set; }
|
||||
|
||||
public string LastVersion { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the display name of the season zero.
|
||||
/// </summary>
|
||||
|
|
Loading…
Reference in New Issue
Block a user