Skip to content

Commit

Permalink
improve codec specific values on playback urls
Browse files Browse the repository at this point in the history
  • Loading branch information
LukePulverenti committed Mar 13, 2018
1 parent ab32b9f commit aff82d4
Show file tree
Hide file tree
Showing 9 changed files with 147 additions and 62 deletions.
12 changes: 3 additions & 9 deletions Emby.Server.Implementations/Data/SqliteItemRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2300,6 +2300,8 @@ private bool HasField(InternalItemsQuery query, ItemFields name)

switch (name)
{
case ItemFields.Tags:
return fields.Contains(name) || HasProgramAttributes(query);
case ItemFields.HomePageUrl:
case ItemFields.CustomRating:
case ItemFields.ProductionLocations:
Expand All @@ -2308,7 +2310,6 @@ private bool HasField(InternalItemsQuery query, ItemFields name)
case ItemFields.Taglines:
case ItemFields.SortName:
case ItemFields.Studios:
case ItemFields.Tags:
case ItemFields.ThemeSongIds:
case ItemFields.ThemeVideoIds:
case ItemFields.DateCreated:
Expand Down Expand Up @@ -2504,14 +2505,7 @@ private string[] GetFinalColumnsToSelect(InternalItemsQuery query, string[] star
}
}

if (HasProgramAttributes(query))
{
if (!list.Contains("Tags", StringComparer.OrdinalIgnoreCase))
{
list.Add("Tags");
}
}
else
if (!HasProgramAttributes(query))
{
list.Remove("IsKids");
list.Remove("IsMovie");
Expand Down
2 changes: 1 addition & 1 deletion Emby.Server.Implementations/Library/MediaSourceManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ public async Task<IEnumerable<MediaSourceInfo>> GetPlayackMediaSources(string id

var mediaSources = GetStaticMediaSources(hasMediaSources, enablePathSubstitution, user);

if (mediaSources.Count == 1 && mediaSources[0].MediaStreams.Count == 0 && mediaSources[0].Type != MediaSourceType.Placeholder)
if (mediaSources.Count == 1 && mediaSources[0].Type != MediaSourceType.Placeholder && !mediaSources[0].MediaStreams.Any(i => i.Type == MediaStreamType.Audio || i.Type == MediaStreamType.Video))
{
await item.RefreshMetadata(new MediaBrowser.Controller.Providers.MetadataRefreshOptions(_fileSystem)
{
Expand Down
12 changes: 8 additions & 4 deletions Emby.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs
Original file line number Diff line number Diff line change
Expand Up @@ -249,8 +249,6 @@ private ProgramInfo GetProgram(string channelId, ScheduleDirect.Program programI
DateTime endAt = startAt.AddSeconds(programInfo.duration);
ProgramAudio audioType = ProgramAudio.Stereo;

bool repeat = programInfo.@new == null;

var programId = programInfo.programID ?? string.Empty;

string newID = programId + "T" + startAt.Ticks + "C" + channelId;
Expand Down Expand Up @@ -296,14 +294,17 @@ private ProgramInfo GetProgram(string channelId, ScheduleDirect.Program programI
CommunityRating = null,
EpisodeTitle = episodeTitle,
Audio = audioType,
IsRepeat = repeat,
//IsNew = programInfo.@new ?? false,
IsRepeat = programInfo.repeat,
IsSeries = string.Equals(details.entityType, "episode", StringComparison.OrdinalIgnoreCase),
ImageUrl = details.primaryImage,
ThumbImageUrl = details.thumbImage,
IsKids = string.Equals(details.audience, "children", StringComparison.OrdinalIgnoreCase),
IsSports = string.Equals(details.entityType, "sports", StringComparison.OrdinalIgnoreCase),
IsMovie = IsMovie(details),
Etag = programInfo.md5
Etag = programInfo.md5,
IsLive = string.Equals(programInfo.liveTapeDelay, "live", StringComparison.OrdinalIgnoreCase),
IsPremiere = programInfo.premiere
};

var showId = programId;
Expand Down Expand Up @@ -1116,6 +1117,9 @@ public class Program
public List<Rating> ratings { get; set; }
public bool? @new { get; set; }
public Multipart multipart { get; set; }
public string liveTapeDelay { get; set; }
public bool premiere { get; set; }
public bool repeat { get; set; }
}


Expand Down
23 changes: 22 additions & 1 deletion MediaBrowser.Api/LiveTv/LiveTvService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
using MediaBrowser.Model.Services;
using MediaBrowser.Model.System;
using MediaBrowser.Model.Extensions;
using MediaBrowser.Model.Cryptography;
using System.Text;

namespace MediaBrowser.Api.LiveTv
{
Expand Down Expand Up @@ -605,6 +607,7 @@ public class AddListingProvider : ListingsProviderInfo, IReturn<ListingsProvider
{
public bool ValidateLogin { get; set; }
public bool ValidateListings { get; set; }
public string Pw { get; set; }
}

[Route("/LiveTv/ListingProviders", "DELETE", Summary = "Deletes a listing provider")]
Expand Down Expand Up @@ -711,8 +714,9 @@ public class LiveTvService : BaseApiService
private readonly IAuthorizationContext _authContext;
private readonly ISessionContext _sessionContext;
private readonly IEnvironmentInfo _environment;
private ICryptoProvider _cryptographyProvider;

public LiveTvService(ILiveTvManager liveTvManager, IUserManager userManager, IServerConfigurationManager config, IHttpClient httpClient, ILibraryManager libraryManager, IDtoService dtoService, IFileSystem fileSystem, IAuthorizationContext authContext, ISessionContext sessionContext, IEnvironmentInfo environment)
public LiveTvService(ICryptoProvider crypto, ILiveTvManager liveTvManager, IUserManager userManager, IServerConfigurationManager config, IHttpClient httpClient, ILibraryManager libraryManager, IDtoService dtoService, IFileSystem fileSystem, IAuthorizationContext authContext, ISessionContext sessionContext, IEnvironmentInfo environment)
{
_liveTvManager = liveTvManager;
_userManager = userManager;
Expand All @@ -724,6 +728,7 @@ public LiveTvService(ILiveTvManager liveTvManager, IUserManager userManager, ISe
_authContext = authContext;
_sessionContext = sessionContext;
_environment = environment;
_cryptographyProvider = crypto;
}

public object Get(GetTunerHostTypes request)
Expand Down Expand Up @@ -869,10 +874,26 @@ private void AssertUserCanManageLiveTv()

public async Task<object> Post(AddListingProvider request)
{
if (request.Pw != null)
{
request.Password = GetHashedString(request.Pw);
}

request.Pw = null;

var result = await _liveTvManager.SaveListingProvider(request, request.ValidateLogin, request.ValidateListings).ConfigureAwait(false);
return ToOptimizedResult(result);
}

/// <summary>
/// Gets the hashed string.
/// </summary>
private string GetHashedString(string str)
{
// legacy
return BitConverter.ToString(_cryptographyProvider.ComputeSHA1(Encoding.UTF8.GetBytes(str))).Replace("-", string.Empty).ToLower();
}

public void Delete(DeleteListingProvider request)
{
_liveTvManager.DeleteListingsProvider(request.Id);
Expand Down
2 changes: 1 addition & 1 deletion MediaBrowser.Controller/Entities/BaseItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2324,7 +2324,7 @@ protected List<FileSystemMetadata> GetLocalMetadataFilesToDelete()
}

var filename = System.IO.Path.GetFileNameWithoutExtension(Path);
var extensions = new List<string> { ".nfo", ".xml", ".srt", ".vtt", ".sub", ".idx", ".txt", ".edl" };
var extensions = new List<string> { ".nfo", ".xml", ".srt", ".vtt", ".sub", ".idx", ".txt", ".edl", ".bif", ".smi", ".ttml" };
extensions.AddRange(SupportedImageExtensions);

return FileSystem.GetFiles(FileSystem.GetDirectoryName(Path), extensions.ToArray(extensions.Count), false, false)
Expand Down
111 changes: 87 additions & 24 deletions MediaBrowser.Model/Dlna/StreamBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -438,7 +438,7 @@ private StreamInfo BuildAudioItem(MediaSourceInfo item, AudioOptions options)
}
}

ApplyTranscodingConditions(playlistItem, audioTranscodingConditions, null, false);
ApplyTranscodingConditions(playlistItem, audioTranscodingConditions, null, true, true);

// Honor requested max channels
playlistItem.GlobalMaxAudioChannels = options.MaxAudioChannels;
Expand Down Expand Up @@ -859,15 +859,15 @@ private StreamInfo BuildVideoItem(MediaSourceInfo item, VideoOptions options)
{
if (i.ContainsAnyCodec(transcodingVideoCodec, transcodingProfile.Container))
{
ApplyTranscodingConditions(playlistItem, i.Conditions, transcodingVideoCodec, !isFirstAppliedCodecProfile);
ApplyTranscodingConditions(playlistItem, i.Conditions, transcodingVideoCodec, true, isFirstAppliedCodecProfile);
isFirstAppliedCodecProfile = false;
}
}
}
}
}

var audioTranscodingConditions = new List<ProfileCondition>();
var audioTranscodingConditions = new List<CodecProfile>();
foreach (CodecProfile i in options.Profile.CodecProfiles)
{
if (i.Type == CodecType.VideoAudio && i.ContainsAnyCodec(playlistItem.TargetAudioCodec, transcodingProfile.Container))
Expand All @@ -892,10 +892,7 @@ private StreamInfo BuildVideoItem(MediaSourceInfo item, VideoOptions options)

if (applyConditions)
{
foreach (ProfileCondition c in i.Conditions)
{
audioTranscodingConditions.Add(c);
}
audioTranscodingConditions.Add(i);
break;
}
}
Expand Down Expand Up @@ -925,7 +922,7 @@ private StreamInfo BuildVideoItem(MediaSourceInfo item, VideoOptions options)
}

// Do this after initial values are set to account for greater than/less than conditions
ApplyTranscodingConditions(playlistItem, audioTranscodingConditions, null, false);
ApplyTranscodingConditions(playlistItem, audioTranscodingConditions);
}

playlistItem.TranscodeReasons = transcodeReasons;
Expand Down Expand Up @@ -1441,7 +1438,33 @@ private void ValidateAudioInput(AudioOptions options)
}
}

private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCondition> conditions, string qualifier, bool qualifiedOnly)
private void ApplyTranscodingConditions(StreamInfo item, List<CodecProfile> codecProfiles)
{
foreach (var profile in codecProfiles)
{
ApplyTranscodingConditions(item, profile);
}
}

private void ApplyTranscodingConditions(StreamInfo item, CodecProfile codecProfile)
{
var codecs = ContainerProfile.SplitValue(codecProfile.Codec);
if (codecs.Length == 0)
{
ApplyTranscodingConditions(item, codecProfile.Conditions, null, true, true);
return;
}

var enableNonQualified = true;

foreach (var codec in codecs)
{
ApplyTranscodingConditions(item, codecProfile.Conditions, codec, true, enableNonQualified);
enableNonQualified = false;
}
}

private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCondition> conditions, string qualifier, bool enableQualifiedConditions, bool enableNonQualifiedConditions)
{
foreach (ProfileCondition condition in conditions)
{
Expand All @@ -1462,7 +1485,7 @@ private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCond
{
case ProfileConditionValue.AudioBitrate:
{
if (qualifiedOnly)
if (!enableNonQualifiedConditions)
{
continue;
}
Expand All @@ -1487,9 +1510,19 @@ private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCond
}
case ProfileConditionValue.AudioChannels:
{
if (qualifiedOnly && string.IsNullOrEmpty(qualifier))
if (string.IsNullOrEmpty(qualifier))
{
continue;
if (!enableNonQualifiedConditions)
{
continue;
}
}
else
{
if (!enableQualifiedConditions)
{
continue;
}
}

int num;
Expand All @@ -1512,7 +1545,7 @@ private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCond
}
case ProfileConditionValue.IsAvc:
{
if (qualifiedOnly)
if (!enableNonQualifiedConditions)
{
continue;
}
Expand All @@ -1533,7 +1566,7 @@ private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCond
}
case ProfileConditionValue.IsAnamorphic:
{
if (qualifiedOnly)
if (!enableNonQualifiedConditions)
{
continue;
}
Expand All @@ -1554,9 +1587,19 @@ private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCond
}
case ProfileConditionValue.IsInterlaced:
{
if (qualifiedOnly && string.IsNullOrEmpty(qualifier))
if (string.IsNullOrEmpty(qualifier))
{
continue;
if (!enableNonQualifiedConditions)
{
continue;
}
}
else
{
if (!enableQualifiedConditions)
{
continue;
}
}

bool isInterlaced;
Expand Down Expand Up @@ -1586,9 +1629,19 @@ private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCond
}
case ProfileConditionValue.RefFrames:
{
if (qualifiedOnly && string.IsNullOrEmpty(qualifier))
if (string.IsNullOrEmpty(qualifier))
{
continue;
if (!enableNonQualifiedConditions)
{
continue;
}
}
else
{
if (!enableQualifiedConditions)
{
continue;
}
}

int num;
Expand All @@ -1611,9 +1664,19 @@ private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCond
}
case ProfileConditionValue.VideoBitDepth:
{
if (qualifiedOnly && string.IsNullOrEmpty(qualifier))
if (string.IsNullOrEmpty(qualifier))
{
continue;
if (!enableNonQualifiedConditions)
{
continue;
}
}
else
{
if (!enableQualifiedConditions)
{
continue;
}
}

int num;
Expand Down Expand Up @@ -1658,7 +1721,7 @@ private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCond
}
case ProfileConditionValue.Height:
{
if (qualifiedOnly)
if (!enableNonQualifiedConditions)
{
continue;
}
Expand All @@ -1683,7 +1746,7 @@ private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCond
}
case ProfileConditionValue.VideoBitrate:
{
if (qualifiedOnly)
if (!enableNonQualifiedConditions)
{
continue;
}
Expand All @@ -1708,7 +1771,7 @@ private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCond
}
case ProfileConditionValue.VideoFramerate:
{
if (qualifiedOnly)
if (!enableNonQualifiedConditions)
{
continue;
}
Expand Down Expand Up @@ -1758,7 +1821,7 @@ private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCond
}
case ProfileConditionValue.Width:
{
if (qualifiedOnly)
if (!enableNonQualifiedConditions)
{
continue;
}
Expand Down
Loading

0 comments on commit aff82d4

Please sign in to comment.