mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-09 03:04:24 -04:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
40d07e89ad
@ -12,8 +12,7 @@ namespace MediaBrowser.Api
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class UpdateDisplayPreferences
|
/// Class UpdateDisplayPreferences
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Route("/DisplayPreferences/{DisplayPreferencesId}", "POST")]
|
[Route("/DisplayPreferences/{DisplayPreferencesId}", "POST", Summary = "Updates a user's display preferences for an item")]
|
||||||
[Api(("Updates a user's display preferences for an item"))]
|
|
||||||
public class UpdateDisplayPreferences : DisplayPreferences, IReturnVoid
|
public class UpdateDisplayPreferences : DisplayPreferences, IReturnVoid
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -30,8 +29,7 @@ namespace MediaBrowser.Api
|
|||||||
public string Client { get; set; }
|
public string Client { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
[Route("/DisplayPreferences/{Id}", "GET")]
|
[Route("/DisplayPreferences/{Id}", "GET", Summary = "Gets a user's display preferences for an item")]
|
||||||
[Api(("Gets a user's display preferences for an item"))]
|
|
||||||
public class GetDisplayPreferences : IReturn<DisplayPreferences>
|
public class GetDisplayPreferences : IReturn<DisplayPreferences>
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -13,8 +13,7 @@ namespace MediaBrowser.Api
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class GetDirectoryContents
|
/// Class GetDirectoryContents
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Route("/Environment/DirectoryContents", "GET")]
|
[Route("/Environment/DirectoryContents", "GET", Summary = "Gets the contents of a given directory in the file system")]
|
||||||
[Api(Description = "Gets the contents of a given directory in the file system")]
|
|
||||||
public class GetDirectoryContents : IReturn<List<FileSystemEntryInfo>>
|
public class GetDirectoryContents : IReturn<List<FileSystemEntryInfo>>
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -46,8 +45,7 @@ namespace MediaBrowser.Api
|
|||||||
public bool IncludeHidden { get; set; }
|
public bool IncludeHidden { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
[Route("/Environment/NetworkShares", "GET")]
|
[Route("/Environment/NetworkShares", "GET", Summary = "Gets shares from a network device")]
|
||||||
[Api(Description = "Gets shares from a network device")]
|
|
||||||
public class GetNetworkShares : IReturn<List<FileSystemEntryInfo>>
|
public class GetNetworkShares : IReturn<List<FileSystemEntryInfo>>
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -61,8 +59,7 @@ namespace MediaBrowser.Api
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class GetDrives
|
/// Class GetDrives
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Route("/Environment/Drives", "GET")]
|
[Route("/Environment/Drives", "GET", Summary = "Gets available drives from the server's file system")]
|
||||||
[Api(Description = "Gets available drives from the server's file system")]
|
|
||||||
public class GetDrives : IReturn<List<FileSystemEntryInfo>>
|
public class GetDrives : IReturn<List<FileSystemEntryInfo>>
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -70,14 +67,12 @@ namespace MediaBrowser.Api
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class GetNetworkComputers
|
/// Class GetNetworkComputers
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Route("/Environment/NetworkDevices", "GET")]
|
[Route("/Environment/NetworkDevices", "GET", Summary = "Gets a list of devices on the network")]
|
||||||
[Api(Description = "Gets a list of devices on the network")]
|
|
||||||
public class GetNetworkDevices : IReturn<List<FileSystemEntryInfo>>
|
public class GetNetworkDevices : IReturn<List<FileSystemEntryInfo>>
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
[Route("/Environment/ParentPath", "GET")]
|
[Route("/Environment/ParentPath", "GET", Summary = "Gets the parent path of a given path")]
|
||||||
[Api(Description = "Gets the parent path of a given path")]
|
|
||||||
public class GetParentPath : IReturn<string>
|
public class GetParentPath : IReturn<string>
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System.Globalization;
|
using MediaBrowser.Controller.Dto;
|
||||||
using MediaBrowser.Controller.Dto;
|
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Persistence;
|
using MediaBrowser.Controller.Persistence;
|
||||||
@ -7,6 +6,7 @@ using MediaBrowser.Model.Dto;
|
|||||||
using ServiceStack;
|
using ServiceStack;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
@ -15,8 +15,7 @@ namespace MediaBrowser.Api
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class GetSimilarGames
|
/// Class GetSimilarGames
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Route("/Games/{Id}/Similar", "GET")]
|
[Route("/Games/{Id}/Similar", "GET", Summary = "Finds games similar to a given game.")]
|
||||||
[Api(Description = "Finds games similar to a given game.")]
|
|
||||||
public class GetSimilarGames : BaseGetSimilarItemsFromItem
|
public class GetSimilarGames : BaseGetSimilarItemsFromItem
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -24,8 +23,7 @@ namespace MediaBrowser.Api
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class GetGameSystemSummaries
|
/// Class GetGameSystemSummaries
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Route("/Games/SystemSummaries", "GET")]
|
[Route("/Games/SystemSummaries", "GET", Summary = "Finds games similar to a given game.")]
|
||||||
[Api(Description = "Finds games similar to a given game.")]
|
|
||||||
public class GetGameSystemSummaries : IReturn<List<GameSystemSummary>>
|
public class GetGameSystemSummaries : IReturn<List<GameSystemSummary>>
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -39,8 +37,7 @@ namespace MediaBrowser.Api
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class GetGameSystemSummaries
|
/// Class GetGameSystemSummaries
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Route("/Games/PlayerIndex", "GET")]
|
[Route("/Games/PlayerIndex", "GET", Summary = "Gets an index of players (1-x) and the number of games listed under each")]
|
||||||
[Api(Description = "Gets an index of players (1-x) and the number of games listed under each")]
|
|
||||||
public class GetPlayerIndex : IReturn<List<ItemIndex>>
|
public class GetPlayerIndex : IReturn<List<ItemIndex>>
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -17,23 +17,22 @@ namespace MediaBrowser.Api.Playback.Progressive
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class GetAudioStream
|
/// Class GetAudioStream
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Route("/Audio/{Id}/stream.mp3", "GET")]
|
[Route("/Audio/{Id}/stream.mp3", "GET", Summary = "Gets an audio stream")]
|
||||||
[Route("/Audio/{Id}/stream.wma", "GET")]
|
[Route("/Audio/{Id}/stream.wma", "GET", Summary = "Gets an audio stream")]
|
||||||
[Route("/Audio/{Id}/stream.aac", "GET")]
|
[Route("/Audio/{Id}/stream.aac", "GET", Summary = "Gets an audio stream")]
|
||||||
[Route("/Audio/{Id}/stream.flac", "GET")]
|
[Route("/Audio/{Id}/stream.flac", "GET", Summary = "Gets an audio stream")]
|
||||||
[Route("/Audio/{Id}/stream.ogg", "GET")]
|
[Route("/Audio/{Id}/stream.ogg", "GET", Summary = "Gets an audio stream")]
|
||||||
[Route("/Audio/{Id}/stream.oga", "GET")]
|
[Route("/Audio/{Id}/stream.oga", "GET", Summary = "Gets an audio stream")]
|
||||||
[Route("/Audio/{Id}/stream.webm", "GET")]
|
[Route("/Audio/{Id}/stream.webm", "GET", Summary = "Gets an audio stream")]
|
||||||
[Route("/Audio/{Id}/stream", "GET")]
|
[Route("/Audio/{Id}/stream", "GET", Summary = "Gets an audio stream")]
|
||||||
[Route("/Audio/{Id}/stream.mp3", "HEAD")]
|
[Route("/Audio/{Id}/stream.mp3", "HEAD", Summary = "Gets an audio stream")]
|
||||||
[Route("/Audio/{Id}/stream.wma", "HEAD")]
|
[Route("/Audio/{Id}/stream.wma", "HEAD", Summary = "Gets an audio stream")]
|
||||||
[Route("/Audio/{Id}/stream.aac", "HEAD")]
|
[Route("/Audio/{Id}/stream.aac", "HEAD", Summary = "Gets an audio stream")]
|
||||||
[Route("/Audio/{Id}/stream.flac", "HEAD")]
|
[Route("/Audio/{Id}/stream.flac", "HEAD", Summary = "Gets an audio stream")]
|
||||||
[Route("/Audio/{Id}/stream.ogg", "HEAD")]
|
[Route("/Audio/{Id}/stream.ogg", "HEAD", Summary = "Gets an audio stream")]
|
||||||
[Route("/Audio/{Id}/stream.oga", "HEAD")]
|
[Route("/Audio/{Id}/stream.oga", "HEAD", Summary = "Gets an audio stream")]
|
||||||
[Route("/Audio/{Id}/stream.webm", "HEAD")]
|
[Route("/Audio/{Id}/stream.webm", "HEAD", Summary = "Gets an audio stream")]
|
||||||
[Route("/Audio/{Id}/stream", "HEAD")]
|
[Route("/Audio/{Id}/stream", "HEAD", Summary = "Gets an audio stream")]
|
||||||
[Api(Description = "Gets an audio stream")]
|
|
||||||
public class GetAudioStream : StreamRequest
|
public class GetAudioStream : StreamRequest
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -44,7 +43,8 @@ namespace MediaBrowser.Api.Playback.Progressive
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class AudioService : BaseProgressiveStreamingService
|
public class AudioService : BaseProgressiveStreamingService
|
||||||
{
|
{
|
||||||
public AudioService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IDtoService dtoService, IFileSystem fileSystem, IItemRepository itemRepository, ILiveTvManager liveTvManager, IEncodingManager encodingManager, IDlnaManager dlnaManager, IHttpClient httpClient, IImageProcessor imageProcessor) : base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, dtoService, fileSystem, itemRepository, liveTvManager, encodingManager, dlnaManager, httpClient, imageProcessor)
|
public AudioService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IDtoService dtoService, IFileSystem fileSystem, IItemRepository itemRepository, ILiveTvManager liveTvManager, IEncodingManager encodingManager, IDlnaManager dlnaManager, IHttpClient httpClient, IImageProcessor imageProcessor)
|
||||||
|
: base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, dtoService, fileSystem, itemRepository, liveTvManager, encodingManager, dlnaManager, httpClient, imageProcessor)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,9 +20,8 @@ namespace MediaBrowser.Api.UserLibrary
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class GetItems
|
/// Class GetItems
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Route("/Items", "GET")]
|
[Route("/Items", "GET", Summary = "Gets items based on a query.")]
|
||||||
[Route("/Users/{UserId}/Items", "GET")]
|
[Route("/Users/{UserId}/Items", "GET", Summary = "Gets items based on a query.")]
|
||||||
[Api(Description = "Gets items based on a query.")]
|
|
||||||
public class GetItems : BaseItemsRequest, IReturn<ItemsResult>
|
public class GetItems : BaseItemsRequest, IReturn<ItemsResult>
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -102,7 +102,6 @@
|
|||||||
<Compile Include="Security\PluginSecurityManager.cs" />
|
<Compile Include="Security\PluginSecurityManager.cs" />
|
||||||
<Compile Include="Serialization\JsonSerializer.cs" />
|
<Compile Include="Serialization\JsonSerializer.cs" />
|
||||||
<Compile Include="Serialization\XmlSerializer.cs" />
|
<Compile Include="Serialization\XmlSerializer.cs" />
|
||||||
<Compile Include="Updates\ApplicationUpdater.cs" />
|
|
||||||
<Compile Include="Updates\InstallationManager.cs" />
|
<Compile Include="Updates\InstallationManager.cs" />
|
||||||
<Compile Include="Security\UsageReporter.cs" />
|
<Compile Include="Security\UsageReporter.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
@ -35,9 +35,9 @@ namespace MediaBrowser.Controller.Dlna
|
|||||||
|
|
||||||
public enum CodecType
|
public enum CodecType
|
||||||
{
|
{
|
||||||
VideoCodec = 0,
|
Video = 0,
|
||||||
VideoAudioCodec = 1,
|
VideoAudio = 1,
|
||||||
AudioCodec = 2
|
Audio = 2
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ProfileCondition
|
public class ProfileCondition
|
||||||
|
@ -3,7 +3,6 @@ using MediaBrowser.Model.Entities;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Runtime.Serialization;
|
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Dlna
|
namespace MediaBrowser.Controller.Dlna
|
||||||
|
@ -18,6 +18,9 @@ namespace MediaBrowser.Controller.Dlna
|
|||||||
[XmlAttribute("audioCodec")]
|
[XmlAttribute("audioCodec")]
|
||||||
public string AudioCodec { get; set; }
|
public string AudioCodec { get; set; }
|
||||||
|
|
||||||
|
[XmlAttribute("protocol")]
|
||||||
|
public string Protocol { get; set; }
|
||||||
|
|
||||||
[XmlAttribute("estimateContentLength")]
|
[XmlAttribute("estimateContentLength")]
|
||||||
public bool EstimateContentLength { get; set; }
|
public bool EstimateContentLength { get; set; }
|
||||||
|
|
||||||
|
@ -59,6 +59,14 @@ namespace MediaBrowser.Controller.Session
|
|||||||
/// <returns>Task.</returns>
|
/// <returns>Task.</returns>
|
||||||
Task SendPlaystateCommand(PlaystateRequest command, CancellationToken cancellationToken);
|
Task SendPlaystateCommand(PlaystateRequest command, CancellationToken cancellationToken);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sends the generic command.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="command">The command.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns>Task.</returns>
|
||||||
|
Task SendGenericCommand(GenericCommand command, CancellationToken cancellationToken);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sends the library update info.
|
/// Sends the library update info.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -40,7 +40,7 @@ namespace MediaBrowser.Dlna.PlayTo
|
|||||||
/// <param name="streamUrl">The stream URL.</param>
|
/// <param name="streamUrl">The stream URL.</param>
|
||||||
/// <param name="streams">The streams.</param>
|
/// <param name="streams">The streams.</param>
|
||||||
/// <returns>System.String.</returns>
|
/// <returns>System.String.</returns>
|
||||||
public static string Build(BaseItem dto, string userId, string serverAddress, string streamUrl, IEnumerable<MediaStream> streams)
|
public static string Build(BaseItem dto, string userId, string serverAddress, string streamUrl, IEnumerable<MediaStream> streams, bool includeImageRes)
|
||||||
{
|
{
|
||||||
string response = string.Format(DIDL_START, dto.Id, userId);
|
string response = string.Format(DIDL_START, dto.Id, userId);
|
||||||
response += string.Format(DIDL_TITLE, dto.Name.Replace("&", "and"));
|
response += string.Format(DIDL_TITLE, dto.Name.Replace("&", "and"));
|
||||||
@ -51,7 +51,7 @@ namespace MediaBrowser.Dlna.PlayTo
|
|||||||
|
|
||||||
var imageUrl = GetImageUrl(dto, serverAddress);
|
var imageUrl = GetImageUrl(dto, serverAddress);
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(imageUrl))
|
if (!string.IsNullOrWhiteSpace(imageUrl))
|
||||||
{
|
{
|
||||||
response += string.Format(DIDL_IMAGE, imageUrl);
|
response += string.Format(DIDL_IMAGE, imageUrl);
|
||||||
}
|
}
|
||||||
@ -65,7 +65,7 @@ namespace MediaBrowser.Dlna.PlayTo
|
|||||||
response += string.Format(DESCRIPTION, UNKNOWN);
|
response += string.Format(DESCRIPTION, UNKNOWN);
|
||||||
response += GetVideoDIDL(dto, streamUrl, streams);
|
response += GetVideoDIDL(dto, streamUrl, streams);
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(imageUrl))
|
if (includeImageRes && !string.IsNullOrWhiteSpace(imageUrl))
|
||||||
{
|
{
|
||||||
response += string.Format(DIDL_IMAGE_RES, imageUrl);
|
response += string.Format(DIDL_IMAGE_RES, imageUrl);
|
||||||
}
|
}
|
||||||
@ -84,7 +84,7 @@ namespace MediaBrowser.Dlna.PlayTo
|
|||||||
|
|
||||||
response += GetAudioDIDL(dto, streamUrl, streams);
|
response += GetAudioDIDL(dto, streamUrl, streams);
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(imageUrl))
|
if (includeImageRes && !string.IsNullOrWhiteSpace(imageUrl))
|
||||||
{
|
{
|
||||||
response += string.Format(DIDL_ALBUMIMAGE_RES, imageUrl);
|
response += string.Format(DIDL_ALBUMIMAGE_RES, imageUrl);
|
||||||
}
|
}
|
||||||
|
@ -435,7 +435,7 @@ namespace MediaBrowser.Dlna.PlayTo
|
|||||||
playlistItem.StreamUrl = StreamHelper.GetVideoUrl(_device.Properties, playlistItem, streams, serverAddress);
|
playlistItem.StreamUrl = StreamHelper.GetVideoUrl(_device.Properties, playlistItem, streams, serverAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
playlistItem.Didl = DidlBuilder.Build(item, _session.UserId.ToString(), serverAddress, playlistItem.StreamUrl, streams);
|
playlistItem.Didl = DidlBuilder.Build(item, _session.UserId.ToString(), serverAddress, playlistItem.StreamUrl, streams, profile.EnableAlbumArtInDidl);
|
||||||
|
|
||||||
return playlistItem;
|
return playlistItem;
|
||||||
}
|
}
|
||||||
@ -619,5 +619,10 @@ namespace MediaBrowser.Dlna.PlayTo
|
|||||||
_logger.Log(LogSeverity.Debug, "Controller disposed");
|
_logger.Log(LogSeverity.Debug, "Controller disposed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Task SendGenericCommand(GenericCommand command, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ namespace MediaBrowser.Dlna.PlayTo
|
|||||||
var audioCodec = audioStream == null ? null : audioStream.Codec;
|
var audioCodec = audioStream == null ? null : audioStream.Codec;
|
||||||
|
|
||||||
// Make sure audio codec profiles are satisfied
|
// Make sure audio codec profiles are satisfied
|
||||||
if (!string.IsNullOrEmpty(audioCodec) && profile.CodecProfiles.Where(i => i.Type == CodecType.AudioCodec && i.ContainsCodec(audioCodec))
|
if (!string.IsNullOrEmpty(audioCodec) && profile.CodecProfiles.Where(i => i.Type == CodecType.Audio && i.ContainsCodec(audioCodec))
|
||||||
.All(i => AreConditionsSatisfied(i.Conditions, item.Path, null, audioStream)))
|
.All(i => AreConditionsSatisfied(i.Conditions, item.Path, null, audioStream)))
|
||||||
{
|
{
|
||||||
playlistItem.Transcode = false;
|
playlistItem.Transcode = false;
|
||||||
@ -53,7 +53,7 @@ namespace MediaBrowser.Dlna.PlayTo
|
|||||||
playlistItem.AudioCodec = transcodingProfile.AudioCodec;
|
playlistItem.AudioCodec = transcodingProfile.AudioCodec;
|
||||||
|
|
||||||
var audioTranscodingConditions = profile.CodecProfiles
|
var audioTranscodingConditions = profile.CodecProfiles
|
||||||
.Where(i => i.Type == CodecType.AudioCodec && i.ContainsCodec(transcodingProfile.AudioCodec))
|
.Where(i => i.Type == CodecType.Audio && i.ContainsCodec(transcodingProfile.AudioCodec))
|
||||||
.Take(1)
|
.Take(1)
|
||||||
.SelectMany(i => i.Conditions);
|
.SelectMany(i => i.Conditions);
|
||||||
|
|
||||||
@ -114,13 +114,13 @@ namespace MediaBrowser.Dlna.PlayTo
|
|||||||
var videoCodec = videoStream == null ? null : videoStream.Codec;
|
var videoCodec = videoStream == null ? null : videoStream.Codec;
|
||||||
|
|
||||||
// Make sure video codec profiles are satisfied
|
// Make sure video codec profiles are satisfied
|
||||||
if (!string.IsNullOrEmpty(videoCodec) && profile.CodecProfiles.Where(i => i.Type == CodecType.VideoCodec && i.ContainsCodec(videoCodec))
|
if (!string.IsNullOrEmpty(videoCodec) && profile.CodecProfiles.Where(i => i.Type == CodecType.Video && i.ContainsCodec(videoCodec))
|
||||||
.All(i => AreConditionsSatisfied(i.Conditions, item.Path, videoStream, audioStream)))
|
.All(i => AreConditionsSatisfied(i.Conditions, item.Path, videoStream, audioStream)))
|
||||||
{
|
{
|
||||||
var audioCodec = audioStream == null ? null : audioStream.Codec;
|
var audioCodec = audioStream == null ? null : audioStream.Codec;
|
||||||
|
|
||||||
// Make sure audio codec profiles are satisfied
|
// Make sure audio codec profiles are satisfied
|
||||||
if (string.IsNullOrEmpty(audioCodec) || profile.CodecProfiles.Where(i => i.Type == CodecType.VideoAudioCodec && i.ContainsCodec(audioCodec))
|
if (string.IsNullOrEmpty(audioCodec) || profile.CodecProfiles.Where(i => i.Type == CodecType.VideoAudio && i.ContainsCodec(audioCodec))
|
||||||
.All(i => AreConditionsSatisfied(i.Conditions, item.Path, videoStream, audioStream)))
|
.All(i => AreConditionsSatisfied(i.Conditions, item.Path, videoStream, audioStream)))
|
||||||
{
|
{
|
||||||
playlistItem.Transcode = false;
|
playlistItem.Transcode = false;
|
||||||
@ -143,14 +143,14 @@ namespace MediaBrowser.Dlna.PlayTo
|
|||||||
playlistItem.VideoCodec = transcodingProfile.VideoCodec;
|
playlistItem.VideoCodec = transcodingProfile.VideoCodec;
|
||||||
|
|
||||||
var videoTranscodingConditions = profile.CodecProfiles
|
var videoTranscodingConditions = profile.CodecProfiles
|
||||||
.Where(i => i.Type == CodecType.VideoCodec && i.ContainsCodec(transcodingProfile.VideoCodec))
|
.Where(i => i.Type == CodecType.Video && i.ContainsCodec(transcodingProfile.VideoCodec))
|
||||||
.Take(1)
|
.Take(1)
|
||||||
.SelectMany(i => i.Conditions);
|
.SelectMany(i => i.Conditions);
|
||||||
|
|
||||||
ApplyTranscodingConditions(playlistItem, videoTranscodingConditions);
|
ApplyTranscodingConditions(playlistItem, videoTranscodingConditions);
|
||||||
|
|
||||||
var audioTranscodingConditions = profile.CodecProfiles
|
var audioTranscodingConditions = profile.CodecProfiles
|
||||||
.Where(i => i.Type == CodecType.VideoAudioCodec && i.ContainsCodec(transcodingProfile.AudioCodec))
|
.Where(i => i.Type == CodecType.VideoAudio && i.ContainsCodec(transcodingProfile.AudioCodec))
|
||||||
.Take(1)
|
.Take(1)
|
||||||
.SelectMany(i => i.Conditions);
|
.SelectMany(i => i.Conditions);
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
{
|
{
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoCodec,
|
Type = CodecType.Video,
|
||||||
Codec = "mpeg4",
|
Codec = "mpeg4",
|
||||||
|
|
||||||
Conditions = new[]
|
Conditions = new[]
|
||||||
@ -141,7 +141,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoCodec,
|
Type = CodecType.Video,
|
||||||
Codec = "h264",
|
Codec = "h264",
|
||||||
|
|
||||||
Conditions = new[]
|
Conditions = new[]
|
||||||
@ -175,7 +175,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoAudioCodec,
|
Type = CodecType.VideoAudio,
|
||||||
Codec = "ac3,aac,mp3",
|
Codec = "ac3,aac,mp3",
|
||||||
|
|
||||||
Conditions = new[]
|
Conditions = new[]
|
||||||
|
@ -157,7 +157,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
{
|
{
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoCodec,
|
Type = CodecType.Video,
|
||||||
|
|
||||||
Conditions = new[]
|
Conditions = new[]
|
||||||
{
|
{
|
||||||
|
@ -145,7 +145,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
{
|
{
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoCodec,
|
Type = CodecType.Video,
|
||||||
Codec = "mpeg2video",
|
Codec = "mpeg2video",
|
||||||
|
|
||||||
Conditions = new[]
|
Conditions = new[]
|
||||||
@ -179,7 +179,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoCodec,
|
Type = CodecType.Video,
|
||||||
Codec = "mpeg4",
|
Codec = "mpeg4",
|
||||||
|
|
||||||
Conditions = new[]
|
Conditions = new[]
|
||||||
@ -213,7 +213,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoCodec,
|
Type = CodecType.Video,
|
||||||
Codec = "h264",
|
Codec = "h264",
|
||||||
|
|
||||||
Conditions = new[]
|
Conditions = new[]
|
||||||
@ -253,7 +253,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoCodec,
|
Type = CodecType.Video,
|
||||||
Codec = "wmv2,wmv3,vc1",
|
Codec = "wmv2,wmv3,vc1",
|
||||||
|
|
||||||
Conditions = new[]
|
Conditions = new[]
|
||||||
@ -287,7 +287,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoAudioCodec,
|
Type = CodecType.VideoAudio,
|
||||||
Codec = "ac3,wmav2,dca,aac,mp3",
|
Codec = "ac3,wmav2,dca,aac,mp3",
|
||||||
|
|
||||||
Conditions = new[]
|
Conditions = new[]
|
||||||
|
@ -113,7 +113,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
{
|
{
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoCodec,
|
Type = CodecType.Video,
|
||||||
Codec = "h264",
|
Codec = "h264",
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
{
|
{
|
||||||
@ -141,7 +141,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoAudioCodec,
|
Type = CodecType.VideoAudio,
|
||||||
Codec = "ac3",
|
Codec = "ac3",
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
{
|
{
|
||||||
|
@ -109,7 +109,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
{
|
{
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoCodec,
|
Type = CodecType.Video,
|
||||||
Codec = "h264",
|
Codec = "h264",
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
{
|
{
|
||||||
@ -151,7 +151,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoAudioCodec,
|
Type = CodecType.VideoAudio,
|
||||||
Codec = "ac3",
|
Codec = "ac3",
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
{
|
{
|
||||||
@ -167,7 +167,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoAudioCodec,
|
Type = CodecType.VideoAudio,
|
||||||
Codec = "aac",
|
Codec = "aac",
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
{
|
{
|
||||||
|
@ -168,7 +168,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
{
|
{
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoCodec,
|
Type = CodecType.Video,
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
{
|
{
|
||||||
new ProfileCondition
|
new ProfileCondition
|
||||||
@ -188,7 +188,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoCodec,
|
Type = CodecType.Video,
|
||||||
Codec = "h264",
|
Codec = "h264",
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
{
|
{
|
||||||
@ -215,7 +215,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoCodec,
|
Type = CodecType.Video,
|
||||||
Codec = "mpeg2video",
|
Codec = "mpeg2video",
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
{
|
{
|
||||||
@ -236,7 +236,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoAudioCodec,
|
Type = CodecType.VideoAudio,
|
||||||
Codec = "ac3",
|
Codec = "ac3",
|
||||||
|
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
@ -252,7 +252,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoAudioCodec,
|
Type = CodecType.VideoAudio,
|
||||||
Codec = "aac",
|
Codec = "aac",
|
||||||
|
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
|
@ -186,7 +186,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
{
|
{
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoCodec,
|
Type = CodecType.Video,
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
{
|
{
|
||||||
new ProfileCondition
|
new ProfileCondition
|
||||||
@ -206,7 +206,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoCodec,
|
Type = CodecType.Video,
|
||||||
Codec = "h264",
|
Codec = "h264",
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
{
|
{
|
||||||
@ -233,7 +233,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoCodec,
|
Type = CodecType.Video,
|
||||||
Codec = "mpeg2video",
|
Codec = "mpeg2video",
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
{
|
{
|
||||||
@ -254,7 +254,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoAudioCodec,
|
Type = CodecType.VideoAudio,
|
||||||
Codec = "ac3",
|
Codec = "ac3",
|
||||||
|
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
@ -270,7 +270,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoAudioCodec,
|
Type = CodecType.VideoAudio,
|
||||||
Codec = "aac",
|
Codec = "aac",
|
||||||
|
|
||||||
Conditions = new[]
|
Conditions = new[]
|
||||||
|
@ -198,7 +198,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
{
|
{
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoCodec,
|
Type = CodecType.Video,
|
||||||
Conditions = new[]
|
Conditions = new[]
|
||||||
{
|
{
|
||||||
new ProfileCondition
|
new ProfileCondition
|
||||||
@ -218,7 +218,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoAudioCodec,
|
Type = CodecType.VideoAudio,
|
||||||
Codec = "ac3",
|
Codec = "ac3",
|
||||||
|
|
||||||
Conditions = new[]
|
Conditions = new[]
|
||||||
|
@ -231,7 +231,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
{
|
{
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoCodec,
|
Type = CodecType.Video,
|
||||||
|
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
{
|
{
|
||||||
|
@ -85,7 +85,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
{
|
{
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoCodec,
|
Type = CodecType.Video,
|
||||||
Codec = "h264",
|
Codec = "h264",
|
||||||
|
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
@ -128,7 +128,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoAudioCodec,
|
Type = CodecType.VideoAudio,
|
||||||
Codec = "ac3",
|
Codec = "ac3",
|
||||||
|
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
@ -153,7 +153,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoAudioCodec,
|
Type = CodecType.VideoAudio,
|
||||||
Codec = "wmapro",
|
Codec = "wmapro",
|
||||||
|
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
@ -169,7 +169,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoAudioCodec,
|
Type = CodecType.VideoAudio,
|
||||||
Codec = "aac",
|
Codec = "aac",
|
||||||
|
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
@ -186,7 +186,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoAudioCodec,
|
Type = CodecType.VideoAudio,
|
||||||
Codec = "aac",
|
Codec = "aac",
|
||||||
|
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
|
@ -195,7 +195,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
{
|
{
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoCodec,
|
Type = CodecType.Video,
|
||||||
Codec = "h264",
|
Codec = "h264",
|
||||||
|
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
@ -223,7 +223,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoAudioCodec,
|
Type = CodecType.VideoAudio,
|
||||||
Codec = "aac",
|
Codec = "aac",
|
||||||
|
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
|
@ -165,7 +165,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
{
|
{
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoCodec,
|
Type = CodecType.Video,
|
||||||
Codec = "mpeg4",
|
Codec = "mpeg4",
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
{
|
{
|
||||||
@ -200,7 +200,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoCodec,
|
Type = CodecType.Video,
|
||||||
Codec = "h264",
|
Codec = "h264",
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
{
|
{
|
||||||
@ -235,7 +235,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoCodec,
|
Type = CodecType.Video,
|
||||||
Codec = "wmv2,wmv3,vc1",
|
Codec = "wmv2,wmv3,vc1",
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
{
|
{
|
||||||
@ -270,7 +270,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoAudioCodec,
|
Type = CodecType.VideoAudio,
|
||||||
Codec = "ac3,wmav2,wmapro",
|
Codec = "ac3,wmav2,wmapro",
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
{
|
{
|
||||||
@ -286,7 +286,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
|
|
||||||
new CodecProfile
|
new CodecProfile
|
||||||
{
|
{
|
||||||
Type = CodecType.VideoAudioCodec,
|
Type = CodecType.VideoAudio,
|
||||||
Codec = "aac",
|
Codec = "aac",
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
{
|
{
|
||||||
|
@ -30,5 +30,6 @@
|
|||||||
</TranscodingProfile>
|
</TranscodingProfile>
|
||||||
</TranscodingProfiles>
|
</TranscodingProfiles>
|
||||||
<ContainerProfiles />
|
<ContainerProfiles />
|
||||||
|
<CodecProfiles />
|
||||||
<MediaProfiles />
|
<MediaProfiles />
|
||||||
</Profile>
|
</Profile>
|
@ -34,5 +34,6 @@
|
|||||||
</TranscodingProfile>
|
</TranscodingProfile>
|
||||||
</TranscodingProfiles>
|
</TranscodingProfiles>
|
||||||
<ContainerProfiles />
|
<ContainerProfiles />
|
||||||
|
<CodecProfiles />
|
||||||
<MediaProfiles />
|
<MediaProfiles />
|
||||||
</Profile>
|
</Profile>
|
@ -48,14 +48,14 @@
|
|||||||
</ContainerProfile>
|
</ContainerProfile>
|
||||||
</ContainerProfiles>
|
</ContainerProfiles>
|
||||||
<CodecProfiles>
|
<CodecProfiles>
|
||||||
<CodecProfile type="VideoCodec" codec="mpeg4">
|
<CodecProfile type="Video" codec="mpeg4">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoCodec" codec="h264">
|
<CodecProfile type="Video" codec="h264">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
||||||
@ -63,7 +63,7 @@
|
|||||||
<ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoAudioCodec" codec="ac3,aac,mp3">
|
<CodecProfile type="VideoAudio" codec="ac3,aac,mp3">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
|
@ -34,5 +34,6 @@
|
|||||||
</TranscodingProfile>
|
</TranscodingProfile>
|
||||||
</TranscodingProfiles>
|
</TranscodingProfiles>
|
||||||
<ContainerProfiles />
|
<ContainerProfiles />
|
||||||
|
<CodecProfiles />
|
||||||
<MediaProfiles />
|
<MediaProfiles />
|
||||||
</Profile>
|
</Profile>
|
@ -54,7 +54,7 @@
|
|||||||
</ContainerProfile>
|
</ContainerProfile>
|
||||||
</ContainerProfiles>
|
</ContainerProfiles>
|
||||||
<CodecProfiles>
|
<CodecProfiles>
|
||||||
<CodecProfile type="VideoCodec">
|
<CodecProfile type="Video">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
</ContainerProfile>
|
</ContainerProfile>
|
||||||
</ContainerProfiles>
|
</ContainerProfiles>
|
||||||
<CodecProfiles>
|
<CodecProfiles>
|
||||||
<CodecProfile type="VideoCodec" codec="mpeg2video">
|
<CodecProfile type="Video" codec="mpeg2video">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
||||||
@ -60,7 +60,7 @@
|
|||||||
<ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="30720000" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="30720000" isRequired="true" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoCodec" codec="mpeg4">
|
<CodecProfile type="Video" codec="mpeg4">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
||||||
@ -68,7 +68,7 @@
|
|||||||
<ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="8192000" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="8192000" isRequired="true" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoCodec" codec="h264">
|
<CodecProfile type="Video" codec="h264">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
||||||
@ -77,7 +77,7 @@
|
|||||||
<ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoCodec" codec="wmv2,wmv3,vc1">
|
<CodecProfile type="Video" codec="wmv2,wmv3,vc1">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
||||||
@ -85,7 +85,7 @@
|
|||||||
<ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="25600000" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="25600000" isRequired="true" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoAudioCodec" codec="ac3,wmav2,dca,aac,mp3">
|
<CodecProfile type="VideoAudio" codec="ac3,wmav2,dca,aac,mp3">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
|
@ -52,14 +52,14 @@
|
|||||||
</ContainerProfile>
|
</ContainerProfile>
|
||||||
</ContainerProfiles>
|
</ContainerProfiles>
|
||||||
<CodecProfiles>
|
<CodecProfiles>
|
||||||
<CodecProfile type="VideoCodec" codec="h264">
|
<CodecProfile type="Video" codec="h264">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="false" />
|
<ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="false" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoAudioCodec" codec="ac3">
|
<CodecProfile type="VideoAudio" codec="ac3">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="false" />
|
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="false" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
|
@ -51,7 +51,7 @@
|
|||||||
</ContainerProfile>
|
</ContainerProfile>
|
||||||
</ContainerProfiles>
|
</ContainerProfiles>
|
||||||
<CodecProfiles>
|
<CodecProfiles>
|
||||||
<CodecProfile type="VideoCodec" codec="h264">
|
<CodecProfile type="Video" codec="h264">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
||||||
@ -60,12 +60,12 @@
|
|||||||
<ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="15360000" isRequired="false" />
|
<ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="15360000" isRequired="false" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoAudioCodec" codec="ac3">
|
<CodecProfile type="VideoAudio" codec="ac3">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="false" />
|
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="false" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoAudioCodec" codec="aac">
|
<CodecProfile type="VideoAudio" codec="aac">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="false" />
|
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="false" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
|
@ -49,31 +49,31 @@
|
|||||||
</ContainerProfile>
|
</ContainerProfile>
|
||||||
</ContainerProfiles>
|
</ContainerProfiles>
|
||||||
<CodecProfiles>
|
<CodecProfiles>
|
||||||
<CodecProfile type="VideoCodec">
|
<CodecProfile type="Video">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoCodec" codec="h264">
|
<CodecProfile type="Video" codec="h264">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="20000000" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="20000000" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoCodec" codec="mpeg2video">
|
<CodecProfile type="Video" codec="mpeg2video">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="20000000" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="20000000" isRequired="true" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoAudioCodec" codec="ac3">
|
<CodecProfile type="VideoAudio" codec="ac3">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoAudioCodec" codec="aac">
|
<CodecProfile type="VideoAudio" codec="aac">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" />
|
||||||
<ProfileCondition condition="NotEquals" property="AudioProfile" value="he-aac" isRequired="true" />
|
<ProfileCondition condition="NotEquals" property="AudioProfile" value="he-aac" isRequired="true" />
|
||||||
|
@ -52,31 +52,31 @@
|
|||||||
</ContainerProfile>
|
</ContainerProfile>
|
||||||
</ContainerProfiles>
|
</ContainerProfiles>
|
||||||
<CodecProfiles>
|
<CodecProfiles>
|
||||||
<CodecProfile type="VideoCodec">
|
<CodecProfile type="Video">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoCodec" codec="h264">
|
<CodecProfile type="Video" codec="h264">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="20000000" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="20000000" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoCodec" codec="mpeg2video">
|
<CodecProfile type="Video" codec="mpeg2video">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="20000000" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="20000000" isRequired="true" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoAudioCodec" codec="ac3">
|
<CodecProfile type="VideoAudio" codec="ac3">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoAudioCodec" codec="aac">
|
<CodecProfile type="VideoAudio" codec="aac">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" />
|
||||||
<ProfileCondition condition="NotEquals" property="AudioProfile" value="he-aac" isRequired="true" />
|
<ProfileCondition condition="NotEquals" property="AudioProfile" value="he-aac" isRequired="true" />
|
||||||
|
@ -54,13 +54,13 @@
|
|||||||
</ContainerProfile>
|
</ContainerProfile>
|
||||||
</ContainerProfiles>
|
</ContainerProfiles>
|
||||||
<CodecProfiles>
|
<CodecProfiles>
|
||||||
<CodecProfile type="VideoCodec">
|
<CodecProfile type="Video">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoAudioCodec" codec="ac3">
|
<CodecProfile type="VideoAudio" codec="ac3">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
|
@ -59,7 +59,7 @@
|
|||||||
</ContainerProfile>
|
</ContainerProfile>
|
||||||
</ContainerProfiles>
|
</ContainerProfiles>
|
||||||
<CodecProfiles>
|
<CodecProfiles>
|
||||||
<CodecProfile type="VideoCodec">
|
<CodecProfile type="Video">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
||||||
|
@ -48,7 +48,7 @@
|
|||||||
</ContainerProfile>
|
</ContainerProfile>
|
||||||
</ContainerProfiles>
|
</ContainerProfiles>
|
||||||
<CodecProfiles>
|
<CodecProfiles>
|
||||||
<CodecProfile type="VideoCodec" codec="h264">
|
<CodecProfile type="Video" codec="h264">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
||||||
@ -57,23 +57,23 @@
|
|||||||
<ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="false" />
|
<ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="false" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoAudioCodec" codec="ac3">
|
<CodecProfile type="VideoAudio" codec="ac3">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="false" />
|
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="false" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="AudioBitrate" value="640000" isRequired="false" />
|
<ProfileCondition condition="LessThanEqual" property="AudioBitrate" value="640000" isRequired="false" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoAudioCodec" codec="wmapro">
|
<CodecProfile type="VideoAudio" codec="wmapro">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoAudioCodec" codec="aac">
|
<CodecProfile type="VideoAudio" codec="aac">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="NotEquals" property="AudioProfile" value="he-aac" isRequired="false" />
|
<ProfileCondition condition="NotEquals" property="AudioProfile" value="he-aac" isRequired="false" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoAudioCodec" codec="aac">
|
<CodecProfile type="VideoAudio" codec="aac">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" />
|
||||||
<ProfileCondition condition="NotEquals" property="AudioProfile" value="he-aac" isRequired="true" />
|
<ProfileCondition condition="NotEquals" property="AudioProfile" value="he-aac" isRequired="true" />
|
||||||
|
@ -59,14 +59,14 @@
|
|||||||
</ContainerProfile>
|
</ContainerProfile>
|
||||||
</ContainerProfiles>
|
</ContainerProfiles>
|
||||||
<CodecProfiles>
|
<CodecProfiles>
|
||||||
<CodecProfile type="VideoCodec" codec="h264">
|
<CodecProfile type="Video" codec="h264">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoAudioCodec" codec="aac">
|
<CodecProfile type="VideoAudio" codec="aac">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
|
@ -59,7 +59,7 @@
|
|||||||
</ContainerProfile>
|
</ContainerProfile>
|
||||||
</ContainerProfiles>
|
</ContainerProfiles>
|
||||||
<CodecProfiles>
|
<CodecProfiles>
|
||||||
<CodecProfile type="VideoCodec" codec="mpeg4">
|
<CodecProfile type="Video" codec="mpeg4">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="Width" value="1280" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Width" value="1280" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="Height" value="720" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Height" value="720" isRequired="true" />
|
||||||
@ -67,7 +67,7 @@
|
|||||||
<ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="5120000" isRequired="false" />
|
<ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="5120000" isRequired="false" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoCodec" codec="h264">
|
<CodecProfile type="Video" codec="h264">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
||||||
@ -75,7 +75,7 @@
|
|||||||
<ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="10240000" isRequired="false" />
|
<ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="10240000" isRequired="false" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoCodec" codec="wmv2,wmv3,vc1">
|
<CodecProfile type="Video" codec="wmv2,wmv3,vc1">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
|
||||||
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
<ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
|
||||||
@ -83,12 +83,12 @@
|
|||||||
<ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="15360000" isRequired="false" />
|
<ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="15360000" isRequired="false" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoAudioCodec" codec="ac3,wmav2,wmapro">
|
<CodecProfile type="VideoAudio" codec="ac3,wmav2,wmapro">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="false" />
|
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="false" />
|
||||||
</Conditions>
|
</Conditions>
|
||||||
</CodecProfile>
|
</CodecProfile>
|
||||||
<CodecProfile type="VideoAudioCodec" codec="aac">
|
<CodecProfile type="VideoAudio" codec="aac">
|
||||||
<Conditions>
|
<Conditions>
|
||||||
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="false" />
|
<ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="false" />
|
||||||
<ProfileCondition condition="Equals" property="AudioProfile" value="lc" isRequired="false" />
|
<ProfileCondition condition="Equals" property="AudioProfile" value="lc" isRequired="false" />
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
</TranscodingProfile>
|
</TranscodingProfile>
|
||||||
</TranscodingProfiles>
|
</TranscodingProfiles>
|
||||||
<ContainerProfiles />
|
<ContainerProfiles />
|
||||||
|
<CodecProfiles />
|
||||||
<MediaProfiles>
|
<MediaProfiles>
|
||||||
<MediaProfile container="avi" type="Video" mimeType="video/x-msvideo">
|
<MediaProfile container="avi" type="Video" mimeType="video/x-msvideo">
|
||||||
<Conditions />
|
<Conditions />
|
||||||
|
@ -36,5 +36,6 @@
|
|||||||
</TranscodingProfile>
|
</TranscodingProfile>
|
||||||
</TranscodingProfiles>
|
</TranscodingProfiles>
|
||||||
<ContainerProfiles />
|
<ContainerProfiles />
|
||||||
|
<CodecProfiles />
|
||||||
<MediaProfiles />
|
<MediaProfiles />
|
||||||
</Profile>
|
</Profile>
|
@ -428,6 +428,9 @@
|
|||||||
<Compile Include="..\MediaBrowser.Model\Session\BrowseRequest.cs">
|
<Compile Include="..\MediaBrowser.Model\Session\BrowseRequest.cs">
|
||||||
<Link>Session\BrowseRequest.cs</Link>
|
<Link>Session\BrowseRequest.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="..\MediaBrowser.Model\Session\GenericCommand.cs">
|
||||||
|
<Link>Session\GenericCommand.cs</Link>
|
||||||
|
</Compile>
|
||||||
<Compile Include="..\MediaBrowser.Model\Session\MessageCommand.cs">
|
<Compile Include="..\MediaBrowser.Model\Session\MessageCommand.cs">
|
||||||
<Link>Session\MessageCommand.cs</Link>
|
<Link>Session\MessageCommand.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
@ -415,6 +415,9 @@
|
|||||||
<Compile Include="..\MediaBrowser.Model\Session\BrowseRequest.cs">
|
<Compile Include="..\MediaBrowser.Model\Session\BrowseRequest.cs">
|
||||||
<Link>Session\BrowseRequest.cs</Link>
|
<Link>Session\BrowseRequest.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="..\MediaBrowser.Model\Session\GenericCommand.cs">
|
||||||
|
<Link>Session\GenericCommand.cs</Link>
|
||||||
|
</Compile>
|
||||||
<Compile Include="..\MediaBrowser.Model\Session\MessageCommand.cs">
|
<Compile Include="..\MediaBrowser.Model\Session\MessageCommand.cs">
|
||||||
<Link>Session\MessageCommand.cs</Link>
|
<Link>Session\MessageCommand.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
@ -589,6 +589,14 @@ namespace MediaBrowser.Model.ApiClient
|
|||||||
/// request</exception>
|
/// request</exception>
|
||||||
Task SendPlayCommandAsync(string sessionId, PlayRequest request);
|
Task SendPlayCommandAsync(string sessionId, PlayRequest request);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sends the command asynchronous.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sessionId">The session identifier.</param>
|
||||||
|
/// <param name="request">The request.</param>
|
||||||
|
/// <returns>Task.</returns>
|
||||||
|
Task SendCommandAsync(string sessionId, GenericCommand request);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sends a system command to the client
|
/// Sends a system command to the client
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -132,6 +132,7 @@
|
|||||||
<Compile Include="Querying\UserQuery.cs" />
|
<Compile Include="Querying\UserQuery.cs" />
|
||||||
<Compile Include="Search\SearchQuery.cs" />
|
<Compile Include="Search\SearchQuery.cs" />
|
||||||
<Compile Include="Session\BrowseRequest.cs" />
|
<Compile Include="Session\BrowseRequest.cs" />
|
||||||
|
<Compile Include="Session\GenericCommand.cs" />
|
||||||
<Compile Include="Session\MessageCommand.cs" />
|
<Compile Include="Session\MessageCommand.cs" />
|
||||||
<Compile Include="Session\PlaybackReports.cs" />
|
<Compile Include="Session\PlaybackReports.cs" />
|
||||||
<Compile Include="Session\PlayRequest.cs" />
|
<Compile Include="Session\PlayRequest.cs" />
|
||||||
|
48
MediaBrowser.Model/Session/GenericCommand.cs
Normal file
48
MediaBrowser.Model/Session/GenericCommand.cs
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Model.Session
|
||||||
|
{
|
||||||
|
public class GenericCommand
|
||||||
|
{
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
public string ControllingUserId { get; set; }
|
||||||
|
|
||||||
|
public Dictionary<string, string> Arguments { get; set; }
|
||||||
|
|
||||||
|
public GenericCommand()
|
||||||
|
{
|
||||||
|
Arguments = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This exists simply to identify a set of known commands.
|
||||||
|
/// </summary>
|
||||||
|
public enum CoreGenericCommand
|
||||||
|
{
|
||||||
|
MoveUp = 0,
|
||||||
|
MoveDown = 1,
|
||||||
|
MoveLeft = 2,
|
||||||
|
MoveRight = 3,
|
||||||
|
PageUp = 4,
|
||||||
|
PageDown = 5,
|
||||||
|
PreviousLetter = 6,
|
||||||
|
NextLetter = 7,
|
||||||
|
ToggleOsd = 8,
|
||||||
|
ToggleContextMenu = 9,
|
||||||
|
Select = 10,
|
||||||
|
Back = 11,
|
||||||
|
TakeScreenshot = 12,
|
||||||
|
SendKey = 13,
|
||||||
|
SendString = 14,
|
||||||
|
GoHome = 15,
|
||||||
|
GoToSettings = 16,
|
||||||
|
VolumeUp = 17,
|
||||||
|
VolumeDown = 18,
|
||||||
|
Mute = 19,
|
||||||
|
Unmute = 20,
|
||||||
|
ToggleMute = 21
|
||||||
|
}
|
||||||
|
}
|
@ -33,7 +33,15 @@ namespace MediaBrowser.Model.Session
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// The fullscreen
|
/// The fullscreen
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Fullscreen
|
Fullscreen,
|
||||||
|
/// <summary>
|
||||||
|
/// The rewind
|
||||||
|
/// </summary>
|
||||||
|
Rewind,
|
||||||
|
/// <summary>
|
||||||
|
/// The fast forward
|
||||||
|
/// </summary>
|
||||||
|
FastForward
|
||||||
}
|
}
|
||||||
|
|
||||||
public class PlaystateRequest
|
public class PlaystateRequest
|
||||||
|
@ -146,5 +146,16 @@ namespace MediaBrowser.Server.Implementations.Roku
|
|||||||
RequestContentType = "application/json"
|
RequestContentType = "application/json"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Task SendGenericCommand(GenericCommand command, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
return SendCommand(new WebSocketMessage<GenericCommand>
|
||||||
|
{
|
||||||
|
MessageType = "Command",
|
||||||
|
Data = command
|
||||||
|
|
||||||
|
}, cancellationToken);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -198,5 +198,17 @@ namespace MediaBrowser.Server.Implementations.Session
|
|||||||
|
|
||||||
}, cancellationToken);
|
}, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Task SendGenericCommand(GenericCommand command, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
var socket = GetActiveSocket();
|
||||||
|
|
||||||
|
return socket.SendAsync(new WebSocketMessage<GenericCommand>
|
||||||
|
{
|
||||||
|
MessageType = "Command",
|
||||||
|
Data = command
|
||||||
|
|
||||||
|
}, cancellationToken);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
using MediaBrowser.Common.Constants;
|
using MediaBrowser.Common.Constants;
|
||||||
using MediaBrowser.Common.Implementations.Logging;
|
using MediaBrowser.Common.Implementations.Logging;
|
||||||
using MediaBrowser.Common.Implementations.Updates;
|
|
||||||
using MediaBrowser.Controller;
|
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
using MediaBrowser.Server.Implementations;
|
using MediaBrowser.Server.Implementations;
|
||||||
using MediaBrowser.ServerApplication.Native;
|
using MediaBrowser.ServerApplication.Native;
|
||||||
using MediaBrowser.ServerApplication.Splash;
|
using MediaBrowser.ServerApplication.Splash;
|
||||||
|
using MediaBrowser.ServerApplication.Updates;
|
||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
using System;
|
using System;
|
||||||
using System.Configuration.Install;
|
using System.Configuration.Install;
|
||||||
@ -490,7 +489,7 @@ namespace MediaBrowser.ServerApplication
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var serviceName = _isRunningAsService ? BackgroundService.Name : string.Empty;
|
var serviceName = _isRunningAsService ? BackgroundService.Name : string.Empty;
|
||||||
new ApplicationUpdater().UpdateApplication(MBApplication.MBServer, appPaths, updateArchive, logger, serviceName);
|
new ApplicationUpdater().UpdateApplication(appPaths, updateArchive, logger, serviceName);
|
||||||
|
|
||||||
// And just let the app exit so it can update
|
// And just let the app exit so it can update
|
||||||
return true;
|
return true;
|
||||||
|
@ -145,6 +145,7 @@
|
|||||||
<Compile Include="Splash\SplashForm.Designer.cs">
|
<Compile Include="Splash\SplashForm.Designer.cs">
|
||||||
<DependentUpon>SplashForm.cs</DependentUpon>
|
<DependentUpon>SplashForm.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="Updates\ApplicationUpdater.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="App.config" />
|
<None Include="App.config" />
|
||||||
|
@ -3,14 +3,8 @@ using MediaBrowser.Model.Logging;
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
||||||
namespace MediaBrowser.Common.Implementations.Updates
|
namespace MediaBrowser.ServerApplication.Updates
|
||||||
{
|
{
|
||||||
public enum MBApplication
|
|
||||||
{
|
|
||||||
MBServer,
|
|
||||||
MBTheater
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Update the specified application using the specified archive
|
/// Update the specified application using the specified archive
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -18,7 +12,7 @@ namespace MediaBrowser.Common.Implementations.Updates
|
|||||||
{
|
{
|
||||||
private const string UpdaterExe = "Mediabrowser.Updater.exe";
|
private const string UpdaterExe = "Mediabrowser.Updater.exe";
|
||||||
private const string UpdaterDll = "Mediabrowser.InstallUtil.dll";
|
private const string UpdaterDll = "Mediabrowser.InstallUtil.dll";
|
||||||
public void UpdateApplication(MBApplication app, IApplicationPaths appPaths, string archive, ILogger logger, string restartServiceName)
|
public void UpdateApplication(IApplicationPaths appPaths, string archive, ILogger logger, string restartServiceName)
|
||||||
{
|
{
|
||||||
// First see if there is a version file and read that in
|
// First see if there is a version file and read that in
|
||||||
var version = "Unknown";
|
var version = "Unknown";
|
||||||
@ -39,7 +33,7 @@ namespace MediaBrowser.Common.Implementations.Updates
|
|||||||
|
|
||||||
logger.Info("Copying updater dependencies to temporary location");
|
logger.Info("Copying updater dependencies to temporary location");
|
||||||
File.Copy(source, tempUpdaterDll, true);
|
File.Copy(source, tempUpdaterDll, true);
|
||||||
var product = app == MBApplication.MBTheater ? "mbt" : "server";
|
const string product = "server";
|
||||||
// Our updater needs SS and ionic
|
// Our updater needs SS and ionic
|
||||||
source = Path.Combine(appPaths.ProgramSystemPath, "ServiceStack.Text.dll");
|
source = Path.Combine(appPaths.ProgramSystemPath, "ServiceStack.Text.dll");
|
||||||
File.Copy(source, Path.Combine(Path.GetTempPath(), "ServiceStack.Text.dll"), true);
|
File.Copy(source, Path.Combine(Path.GetTempPath(), "ServiceStack.Text.dll"), true);
|
@ -2,7 +2,7 @@
|
|||||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Common.Internal</id>
|
<id>MediaBrowser.Common.Internal</id>
|
||||||
<version>3.0.345</version>
|
<version>3.0.346</version>
|
||||||
<title>MediaBrowser.Common.Internal</title>
|
<title>MediaBrowser.Common.Internal</title>
|
||||||
<authors>Luke</authors>
|
<authors>Luke</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
@ -12,7 +12,7 @@
|
|||||||
<description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description>
|
<description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description>
|
||||||
<copyright>Copyright © Media Browser 2013</copyright>
|
<copyright>Copyright © Media Browser 2013</copyright>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency id="MediaBrowser.Common" version="3.0.345" />
|
<dependency id="MediaBrowser.Common" version="3.0.346" />
|
||||||
<dependency id="NLog" version="2.1.0" />
|
<dependency id="NLog" version="2.1.0" />
|
||||||
<dependency id="SimpleInjector" version="2.4.1" />
|
<dependency id="SimpleInjector" version="2.4.1" />
|
||||||
<dependency id="sharpcompress" version="0.10.2" />
|
<dependency id="sharpcompress" version="0.10.2" />
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Common</id>
|
<id>MediaBrowser.Common</id>
|
||||||
<version>3.0.345</version>
|
<version>3.0.346</version>
|
||||||
<title>MediaBrowser.Common</title>
|
<title>MediaBrowser.Common</title>
|
||||||
<authors>Media Browser Team</authors>
|
<authors>Media Browser Team</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Server.Core</id>
|
<id>MediaBrowser.Server.Core</id>
|
||||||
<version>3.0.345</version>
|
<version>3.0.346</version>
|
||||||
<title>Media Browser.Server.Core</title>
|
<title>Media Browser.Server.Core</title>
|
||||||
<authors>Media Browser Team</authors>
|
<authors>Media Browser Team</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
@ -12,7 +12,7 @@
|
|||||||
<description>Contains core components required to build plugins for Media Browser Server.</description>
|
<description>Contains core components required to build plugins for Media Browser Server.</description>
|
||||||
<copyright>Copyright © Media Browser 2013</copyright>
|
<copyright>Copyright © Media Browser 2013</copyright>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency id="MediaBrowser.Common" version="3.0.345" />
|
<dependency id="MediaBrowser.Common" version="3.0.346" />
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</metadata>
|
</metadata>
|
||||||
<files>
|
<files>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user