Merge pull request #2522 from MediaBrowser/dev

Dev
This commit is contained in:
Luke 2017-03-10 13:34:33 -05:00 committed by GitHub
commit 3962361ad9
13 changed files with 120 additions and 93 deletions

View File

@ -107,7 +107,7 @@ using Emby.Server.Implementations.Playlists;
using Emby.Server.Implementations; using Emby.Server.Implementations;
using Emby.Server.Implementations.ServerManager; using Emby.Server.Implementations.ServerManager;
using Emby.Server.Implementations.Session; using Emby.Server.Implementations.Session;
using Emby.Server.Implementations.Social; using Emby.Server.Implementations.Windows;
using Emby.Server.Implementations.TV; using Emby.Server.Implementations.TV;
using Emby.Server.Implementations.Updates; using Emby.Server.Implementations.Updates;
using MediaBrowser.Model.Activity; using MediaBrowser.Model.Activity;
@ -796,17 +796,25 @@ namespace Emby.Server.Core
info.FFMpegFilename = "ffmpeg"; info.FFMpegFilename = "ffmpeg";
info.FFProbeFilename = "ffprobe"; info.FFProbeFilename = "ffprobe";
info.ArchiveType = "7z"; info.ArchiveType = "7z";
info.Version = "20160215"; info.Version = "20170308";
info.DownloadUrls = GetLinuxDownloadUrls(); info.DownloadUrls = GetLinuxDownloadUrls();
} }
else if (EnvironmentInfo.OperatingSystem == MediaBrowser.Model.System.OperatingSystem.Windows) else if (EnvironmentInfo.OperatingSystem == MediaBrowser.Model.System.OperatingSystem.Windows)
{ {
info.FFMpegFilename = "ffmpeg.exe"; info.FFMpegFilename = "ffmpeg.exe";
info.FFProbeFilename = "ffprobe.exe"; info.FFProbeFilename = "ffprobe.exe";
info.Version = "20160410"; info.Version = "20170308";
info.ArchiveType = "7z"; info.ArchiveType = "7z";
info.DownloadUrls = GetWindowsDownloadUrls(); info.DownloadUrls = GetWindowsDownloadUrls();
} }
else if (EnvironmentInfo.OperatingSystem == MediaBrowser.Model.System.OperatingSystem.OSX)
{
info.FFMpegFilename = "ffmpeg";
info.FFProbeFilename = "ffprobe";
info.ArchiveType = "7z";
info.Version = "20170308";
info.DownloadUrls = GetMacDownloadUrls();
}
else else
{ {
// No version available - user requirement // No version available - user requirement
@ -816,6 +824,20 @@ namespace Emby.Server.Core
return info; return info;
} }
private string[] GetMacDownloadUrls()
{
switch (EnvironmentInfo.SystemArchitecture)
{
case Architecture.X64:
return new[]
{
"https://embydata.com/downloads/ffmpeg/osx/ffmpeg-x64-20170308.7z"
};
}
return new string[] { };
}
private string[] GetWindowsDownloadUrls() private string[] GetWindowsDownloadUrls()
{ {
switch (EnvironmentInfo.SystemArchitecture) switch (EnvironmentInfo.SystemArchitecture)
@ -823,12 +845,12 @@ namespace Emby.Server.Core
case Architecture.X64: case Architecture.X64:
return new[] return new[]
{ {
"https://github.com/MediaBrowser/Emby.Resources/raw/master/ffmpeg/windows/ffmpeg-20160410-win64.7z" "https://embydata.com/downloads/ffmpeg/windows/ffmpeg-20170308-win64.7z"
}; };
case Architecture.X86: case Architecture.X86:
return new[] return new[]
{ {
"https://github.com/MediaBrowser/Emby.Resources/raw/master/ffmpeg/windows/ffmpeg-20160410-win32.7z" "https://embydata.com/downloads/ffmpeg/windows/ffmpeg-20170308-win32.7z"
}; };
} }
@ -842,12 +864,12 @@ namespace Emby.Server.Core
case Architecture.X64: case Architecture.X64:
return new[] return new[]
{ {
"https://github.com/MediaBrowser/Emby.Resources/raw/master/ffmpeg/linux/ffmpeg-git-20160215-64bit-static.7z" "https://embydata.com/downloads/ffmpeg/linux/ffmpeg-git-20170301-64bit-static.7z"
}; };
case Architecture.X86: case Architecture.X86:
return new[] return new[]
{ {
"https://github.com/MediaBrowser/Emby.Resources/raw/master/ffmpeg/linux/ffmpeg-git-20160215-32bit-static.7z" "https://embydata.com/downloads/ffmpeg/linux/ffmpeg-git-20170301-32bit-static.7z"
}; };
} }
@ -1716,12 +1738,10 @@ namespace Emby.Server.Core
public void EnableLoopback(string appName) public void EnableLoopback(string appName)
{ {
EnableLoopbackInternal(appName); if (EnvironmentInfo.OperatingSystem == MediaBrowser.Model.System.OperatingSystem.Windows)
} {
LoopUtil.Run(appName);
protected virtual void EnableLoopbackInternal(string appName) }
{
} }
private void RegisterModules() private void RegisterModules()

View File

@ -269,6 +269,7 @@
<Compile Include="Updates\InstallationManager.cs" /> <Compile Include="Updates\InstallationManager.cs" />
<Compile Include="UserViews\CollectionFolderImageProvider.cs" /> <Compile Include="UserViews\CollectionFolderImageProvider.cs" />
<Compile Include="UserViews\DynamicImageProvider.cs" /> <Compile Include="UserViews\DynamicImageProvider.cs" />
<Compile Include="Windows\LoopUtil.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="Localization\iso6392.txt" /> <EmbeddedResource Include="Localization\iso6392.txt" />

View File

@ -258,7 +258,7 @@ namespace Emby.Server.Implementations.Images
{ {
return await CreateSquareCollage(item, itemsWithImages, outputPath).ConfigureAwait(false); return await CreateSquareCollage(item, itemsWithImages, outputPath).ConfigureAwait(false);
} }
if (item is Playlist || item is MusicGenre) if (item is Playlist || item is MusicGenre || item is Genre || item is GameGenre)
{ {
return await CreateSquareCollage(item, itemsWithImages, outputPath).ConfigureAwait(false); return await CreateSquareCollage(item, itemsWithImages, outputPath).ConfigureAwait(false);
} }

View File

@ -11,6 +11,7 @@ using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Emby.Server.Implementations.Images; using Emby.Server.Implementations.Images;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.IO; using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO; using MediaBrowser.Model.IO;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
@ -101,4 +102,35 @@ namespace Emby.Server.Implementations.Playlists
//} //}
} }
public class GenreImageProvider : BaseDynamicImageProvider<Genre>
{
private readonly ILibraryManager _libraryManager;
public GenreImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor, ILibraryManager libraryManager) : base(fileSystem, providerManager, applicationPaths, imageProcessor)
{
_libraryManager = libraryManager;
}
protected override Task<List<BaseItem>> GetItemsWithImages(IHasImages item)
{
var items = _libraryManager.GetItemList(new InternalItemsQuery
{
Genres = new[] { item.Name },
IncludeItemTypes = new[] { typeof(Series).Name, typeof(Movie).Name },
SortBy = new[] { ItemSortBy.Random },
Limit = 4,
Recursive = true,
ImageTypes = new[] { ImageType.Primary }
}).ToList();
return Task.FromResult(GetFinalItems(items));
}
//protected override Task<string> CreateImage(IHasImages item, List<BaseItem> itemsWithImages, string outputPathWithoutExtension, ImageType imageType, int imageIndex)
//{
// return CreateSingleImage(itemsWithImages, outputPathWithoutExtension, ImageType.Primary);
//}
}
} }

View File

@ -5,7 +5,7 @@ using System.Runtime.InteropServices;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace MediaBrowser.ServerApplication.Native namespace Emby.Server.Implementations.Windows
{ {
/// <summary> /// <summary>
/// http://blogs.msdn.com/b/fiddler/archive/2011/12/10/fiddler-windows-8-apps-enable-LoopUtil-network-isolation-exemption.aspx /// http://blogs.msdn.com/b/fiddler/archive/2011/12/10/fiddler-windows-8-apps-enable-LoopUtil-network-isolation-exemption.aspx
@ -71,12 +71,12 @@ namespace MediaBrowser.ServerApplication.Native
[DllImport("advapi32.dll", SetLastError = true)] [DllImport("advapi32.dll", SetLastError = true)]
internal static extern bool ConvertStringSidToSid(string strSid, out IntPtr pSid); internal static extern bool ConvertStringSidToSid(string strSid, out IntPtr pSid);
[DllImport("advapi32", CharSet = CharSet.Auto, SetLastError = true)] [DllImport("advapi32", /*CharSet = CharSet.Auto,*/ SetLastError = true)]
static extern bool ConvertSidToStringSid( static extern bool ConvertSidToStringSid(
[MarshalAs(UnmanagedType.LPArray)] byte[] pSID, [MarshalAs(UnmanagedType.LPArray)] byte[] pSID,
out IntPtr ptrSid); out IntPtr ptrSid);
[DllImport("advapi32", CharSet = CharSet.Auto, SetLastError = true)] [DllImport("advapi32", /*CharSet = CharSet.Auto,*/ SetLastError = true)]
static extern bool ConvertSidToStringSid(IntPtr pSid, out string strSid); static extern bool ConvertSidToStringSid(IntPtr pSid, out string strSid);
// Use this API to convert a string reference (e.g. "@{blah.pri?ms-resource://whatever}") into a plain string // Use this API to convert a string reference (e.g. "@{blah.pri?ms-resource://whatever}") into a plain string

View File

@ -127,7 +127,7 @@ namespace MediaBrowser.Api.Playback
SetDeviceSpecificData(item, result.MediaSource, profile, authInfo, request.MaxStreamingBitrate, SetDeviceSpecificData(item, result.MediaSource, profile, authInfo, request.MaxStreamingBitrate,
request.StartTimeTicks ?? 0, result.MediaSource.Id, request.AudioStreamIndex, request.StartTimeTicks ?? 0, result.MediaSource.Id, request.AudioStreamIndex,
request.SubtitleStreamIndex, request.MaxAudioChannels, request.PlaySessionId, request.UserId, true, true, true); request.SubtitleStreamIndex, request.MaxAudioChannels, request.PlaySessionId, request.UserId, true, true, true, true);
} }
else else
{ {
@ -169,7 +169,7 @@ namespace MediaBrowser.Api.Playback
{ {
var mediaSourceId = request.MediaSourceId; var mediaSourceId = request.MediaSourceId;
SetDeviceSpecificData(request.Id, info, profile, authInfo, request.MaxStreamingBitrate ?? profile.MaxStreamingBitrate, request.StartTimeTicks ?? 0, mediaSourceId, request.AudioStreamIndex, request.SubtitleStreamIndex, request.MaxAudioChannels, request.UserId, request.EnableDirectPlay, request.EnableDirectStream, request.EnableTranscoding); SetDeviceSpecificData(request.Id, info, profile, authInfo, request.MaxStreamingBitrate ?? profile.MaxStreamingBitrate, request.StartTimeTicks ?? 0, mediaSourceId, request.AudioStreamIndex, request.SubtitleStreamIndex, request.MaxAudioChannels, request.UserId, request.EnableDirectPlay, request.ForceDirectPlayRemoteMediaSource, request.EnableDirectStream, request.EnableTranscoding);
} }
return info; return info;
@ -253,6 +253,7 @@ namespace MediaBrowser.Api.Playback
int? maxAudioChannels, int? maxAudioChannels,
string userId, string userId,
bool enableDirectPlay, bool enableDirectPlay,
bool forceDirectPlayRemoteMediaSource,
bool enableDirectStream, bool enableDirectStream,
bool enableTranscoding) bool enableTranscoding)
{ {
@ -260,7 +261,7 @@ namespace MediaBrowser.Api.Playback
foreach (var mediaSource in result.MediaSources) foreach (var mediaSource in result.MediaSources)
{ {
SetDeviceSpecificData(item, mediaSource, profile, auth, maxBitrate, startTimeTicks, mediaSourceId, audioStreamIndex, subtitleStreamIndex, maxAudioChannels, result.PlaySessionId, userId, enableDirectPlay, enableDirectStream, enableTranscoding); SetDeviceSpecificData(item, mediaSource, profile, auth, maxBitrate, startTimeTicks, mediaSourceId, audioStreamIndex, subtitleStreamIndex, maxAudioChannels, result.PlaySessionId, userId, enableDirectPlay, forceDirectPlayRemoteMediaSource, enableDirectStream, enableTranscoding);
} }
SortMediaSources(result, maxBitrate); SortMediaSources(result, maxBitrate);
@ -279,6 +280,7 @@ namespace MediaBrowser.Api.Playback
string playSessionId, string playSessionId,
string userId, string userId,
bool enableDirectPlay, bool enableDirectPlay,
bool forceDirectPlayRemoteMediaSource,
bool enableDirectStream, bool enableDirectStream,
bool enableTranscoding) bool enableTranscoding)
{ {
@ -318,43 +320,49 @@ namespace MediaBrowser.Api.Playback
if (mediaSource.SupportsDirectPlay) if (mediaSource.SupportsDirectPlay)
{ {
var supportsDirectStream = mediaSource.SupportsDirectStream; if (mediaSource.IsRemote && forceDirectPlayRemoteMediaSource)
// Dummy this up to fool StreamBuilder
mediaSource.SupportsDirectStream = true;
options.MaxBitrate = maxBitrate;
if (item is Audio)
{ {
if (!user.Policy.EnableAudioPlaybackTranscoding) }
else
{
var supportsDirectStream = mediaSource.SupportsDirectStream;
// Dummy this up to fool StreamBuilder
mediaSource.SupportsDirectStream = true;
options.MaxBitrate = maxBitrate;
if (item is Audio)
{ {
options.ForceDirectPlay = true; if (!user.Policy.EnableAudioPlaybackTranscoding)
{
options.ForceDirectPlay = true;
}
} }
} else if (item is Video)
else if (item is Video)
{
if (!user.Policy.EnableAudioPlaybackTranscoding && !user.Policy.EnableVideoPlaybackTranscoding && !user.Policy.EnablePlaybackRemuxing)
{ {
options.ForceDirectPlay = true; if (!user.Policy.EnableAudioPlaybackTranscoding && !user.Policy.EnableVideoPlaybackTranscoding && !user.Policy.EnablePlaybackRemuxing)
{
options.ForceDirectPlay = true;
}
} }
}
// The MediaSource supports direct stream, now test to see if the client supports it // The MediaSource supports direct stream, now test to see if the client supports it
var streamInfo = string.Equals(item.MediaType, MediaType.Audio, StringComparison.OrdinalIgnoreCase) ? var streamInfo = string.Equals(item.MediaType, MediaType.Audio, StringComparison.OrdinalIgnoreCase) ?
streamBuilder.BuildAudioItem(options) : streamBuilder.BuildAudioItem(options) :
streamBuilder.BuildVideoItem(options); streamBuilder.BuildVideoItem(options);
if (streamInfo == null || !streamInfo.IsDirectStream) if (streamInfo == null || !streamInfo.IsDirectStream)
{ {
mediaSource.SupportsDirectPlay = false; mediaSource.SupportsDirectPlay = false;
} }
// Set this back to what it was // Set this back to what it was
mediaSource.SupportsDirectStream = supportsDirectStream; mediaSource.SupportsDirectStream = supportsDirectStream;
if (streamInfo != null) if (streamInfo != null)
{ {
SetDeviceSpecificSubtitleInfo(streamInfo, mediaSource, auth.Token); SetDeviceSpecificSubtitleInfo(streamInfo, mediaSource, auth.Token);
}
} }
} }

View File

@ -1670,6 +1670,11 @@ namespace MediaBrowser.Controller.MediaEncoding
case "h264": case "h264":
if (_mediaEncoder.SupportsDecoder("h264_qsv")) if (_mediaEncoder.SupportsDecoder("h264_qsv"))
{ {
// qsv decoder does not support 10-bit input
if ((state.VideoStream.BitDepth ?? 8) > 8)
{
return null;
}
return "-c:v h264_qsv "; return "-c:v h264_qsv ";
} }
break; break;

View File

@ -27,9 +27,11 @@ namespace MediaBrowser.Model.MediaInfo
public bool EnableDirectPlay { get; set; } public bool EnableDirectPlay { get; set; }
public bool EnableDirectStream { get; set; } public bool EnableDirectStream { get; set; }
public bool EnableTranscoding { get; set; } public bool EnableTranscoding { get; set; }
public bool ForceDirectPlayRemoteMediaSource { get; set; }
public PlaybackInfoRequest() public PlaybackInfoRequest()
{ {
ForceDirectPlayRemoteMediaSource = true;
EnableDirectPlay = true; EnableDirectPlay = true;
EnableDirectStream = true; EnableDirectStream = true;
EnableTranscoding = true; EnableTranscoding = true;

View File

@ -56,42 +56,6 @@ namespace MediaBrowser.Server.Mac
return new SyncManager(); return new SyncManager();
} }
protected override FFMpegInstallInfo GetFfmpegInstallInfo()
{
var info = new FFMpegInstallInfo();
info.ArchiveType = "7z";
switch (EnvironmentInfo.SystemArchitecture)
{
case Architecture.X64:
info.Version = "20160124";
break;
case Architecture.X86:
info.Version = "20150110";
break;
}
info.DownloadUrls = GetDownloadUrls();
return info;
}
private string[] GetDownloadUrls()
{
switch (EnvironmentInfo.SystemArchitecture)
{
case Architecture.X64:
return new[]
{
"https://github.com/MediaBrowser/Emby.Resources/raw/master/ffmpeg/osx/ffmpeg-x64-2.8.5.7z"
};
}
// No version available
return new string[] { };
}
protected override void RestartInternal() protected override void RestartInternal()
{ {
MainClass.Restart(); MainClass.Restart();

View File

@ -143,7 +143,6 @@
</Compile> </Compile>
<Compile Include="MainStartup.cs" /> <Compile Include="MainStartup.cs" />
<Compile Include="Native\LnkShortcutHandler.cs" /> <Compile Include="Native\LnkShortcutHandler.cs" />
<Compile Include="Native\LoopbackUtil.cs" />
<Compile Include="Native\PowerManagement.cs" /> <Compile Include="Native\PowerManagement.cs" />
<Compile Include="Native\Standby.cs" /> <Compile Include="Native\Standby.cs" />
<Compile Include="Native\ServerAuthorization.cs" /> <Compile Include="Native\ServerAuthorization.cs" />

View File

@ -10,6 +10,7 @@ using Emby.Server.Core;
using Emby.Server.Implementations; using Emby.Server.Implementations;
using Emby.Server.Implementations.EntryPoints; using Emby.Server.Implementations.EntryPoints;
using Emby.Server.Implementations.FFMpeg; using Emby.Server.Implementations.FFMpeg;
using Emby.Server.Implementations.Windows;
using Emby.Server.Sync; using Emby.Server.Sync;
using MediaBrowser.Controller.Connect; using MediaBrowser.Controller.Connect;
using MediaBrowser.Controller.Sync; using MediaBrowser.Controller.Sync;
@ -107,11 +108,6 @@ namespace MediaBrowser.ServerApplication
} }
} }
protected override void EnableLoopbackInternal(string appName)
{
LoopUtil.Run(appName);
}
public override bool SupportsRunningAsService public override bool SupportsRunningAsService
{ {
get get

View File

@ -1,3 +1,3 @@
using System.Reflection; using System.Reflection;
[assembly: AssemblyVersion("3.2.7.1")] [assembly: AssemblyVersion("3.2.7.2")]

View File

@ -456,7 +456,7 @@ namespace SocketHttpListener.Net
public long ContentLength64 public long ContentLength64
{ {
get { return content_length; } get { return is_chunked ? -1 : content_length; }
} }
public string ContentType public string ContentType