mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-04 03:27:21 -05:00 
			
		
		
		
	add configurable encoding params
This commit is contained in:
		
							parent
							
								
									daeedb98ea
								
							
						
					
					
						commit
						9c7eef891b
					
				@ -346,12 +346,28 @@ namespace MediaBrowser.Api.Playback
 | 
				
			|||||||
            var isVc1 = state.VideoStream != null &&
 | 
					            var isVc1 = state.VideoStream != null &&
 | 
				
			||||||
                string.Equals(state.VideoStream.Codec, "vc1", StringComparison.OrdinalIgnoreCase);
 | 
					                string.Equals(state.VideoStream.Codec, "vc1", StringComparison.OrdinalIgnoreCase);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var encodingOptions = ApiEntryPoint.Instance.GetEncodingOptions();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (string.Equals(videoCodec, "libx264", StringComparison.OrdinalIgnoreCase))
 | 
					            if (string.Equals(videoCodec, "libx264", StringComparison.OrdinalIgnoreCase))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (!string.IsNullOrWhiteSpace(encodingOptions.H264Preset))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    param = "-preset " + encodingOptions.H264Preset;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    param = "-preset superfast";
 | 
					                    param = "-preset superfast";
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (encodingOptions.H264Crf >= 0 && encodingOptions.H264Crf <= 51)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    param = " -crf " + encodingOptions.H264Crf.ToString(CultureInfo.InvariantCulture);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
                    param += " -crf 23";
 | 
					                    param += " -crf 23";
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            else if (string.Equals(videoCodec, "libx265", StringComparison.OrdinalIgnoreCase))
 | 
					            else if (string.Equals(videoCodec, "libx265", StringComparison.OrdinalIgnoreCase))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 | 
				
			|||||||
@ -113,7 +113,8 @@ namespace MediaBrowser.Controller.Entities
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            var standaloneTypes = new List<string>
 | 
					            var standaloneTypes = new List<string>
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                CollectionType.Playlists
 | 
					                CollectionType.Playlists,
 | 
				
			||||||
 | 
					                CollectionType.BoxSets
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var collectionFolder = folder as ICollectionFolder;
 | 
					            var collectionFolder = folder as ICollectionFolder;
 | 
				
			||||||
 | 
				
			|||||||
@ -928,7 +928,12 @@ namespace MediaBrowser.MediaEncoding.Encoder
 | 
				
			|||||||
                {
 | 
					                {
 | 
				
			||||||
                    StartProcess(processWrapper);
 | 
					                    StartProcess(processWrapper);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    ranToCompletion = process.WaitForExit(10000);
 | 
					                    var timeoutMs = ConfigurationManager.Configuration.ImageExtractionTimeoutMs;
 | 
				
			||||||
 | 
					                    if (timeoutMs <= 0)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        timeoutMs = 10000;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    ranToCompletion = process.WaitForExit(timeoutMs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if (!ranToCompletion)
 | 
					                    if (!ranToCompletion)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
 | 
				
			|||||||
@ -11,6 +11,8 @@ namespace MediaBrowser.Model.Configuration
 | 
				
			|||||||
        public string HardwareAccelerationType { get; set; }
 | 
					        public string HardwareAccelerationType { get; set; }
 | 
				
			||||||
        public string EncoderAppPath { get; set; }
 | 
					        public string EncoderAppPath { get; set; }
 | 
				
			||||||
        public string VaapiDevice { get; set; }
 | 
					        public string VaapiDevice { get; set; }
 | 
				
			||||||
 | 
					        public int H264Crf { get; set; }
 | 
				
			||||||
 | 
					        public string H264Preset { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public EncodingOptions()
 | 
					        public EncodingOptions()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@ -19,6 +21,8 @@ namespace MediaBrowser.Model.Configuration
 | 
				
			|||||||
            ThrottleDelaySeconds = 180;
 | 
					            ThrottleDelaySeconds = 180;
 | 
				
			||||||
            EncodingThreadCount = -1;
 | 
					            EncodingThreadCount = -1;
 | 
				
			||||||
            VaapiDevice = "/dev/dri/card0";
 | 
					            VaapiDevice = "/dev/dri/card0";
 | 
				
			||||||
 | 
					            H264Crf = 23;
 | 
				
			||||||
 | 
					            H264Preset = "superfast";
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -207,6 +207,7 @@ namespace MediaBrowser.Model.Configuration
 | 
				
			|||||||
        public bool EnableChannelView { get; set; }
 | 
					        public bool EnableChannelView { get; set; }
 | 
				
			||||||
        public bool EnableExternalContentInSuggestions { get; set; }
 | 
					        public bool EnableExternalContentInSuggestions { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public int ImageExtractionTimeoutMs { get; set; }
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Initializes a new instance of the <see cref="ServerConfiguration" /> class.
 | 
					        /// Initializes a new instance of the <see cref="ServerConfiguration" /> class.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
@ -216,6 +217,7 @@ namespace MediaBrowser.Model.Configuration
 | 
				
			|||||||
            Migrations = new string[] { };
 | 
					            Migrations = new string[] { };
 | 
				
			||||||
            CodecsUsed = new string[] { };
 | 
					            CodecsUsed = new string[] { };
 | 
				
			||||||
            SqliteCacheSize = 0;
 | 
					            SqliteCacheSize = 0;
 | 
				
			||||||
 | 
					            ImageExtractionTimeoutMs = 10000;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            EnableLocalizedGuids = true;
 | 
					            EnableLocalizedGuids = true;
 | 
				
			||||||
            DisplaySpecialsWithinSeasons = true;
 | 
					            DisplaySpecialsWithinSeasons = true;
 | 
				
			||||||
 | 
				
			|||||||
@ -14,17 +14,20 @@ using System.IO;
 | 
				
			|||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
using CommonIO;
 | 
					using CommonIO;
 | 
				
			||||||
 | 
					using MediaBrowser.Controller.LiveTv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Server.Implementations.UserViews
 | 
					namespace MediaBrowser.Server.Implementations.UserViews
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    public class DynamicImageProvider : BaseDynamicImageProvider<UserView>
 | 
					    public class DynamicImageProvider : BaseDynamicImageProvider<UserView>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        private readonly IUserManager _userManager;
 | 
					        private readonly IUserManager _userManager;
 | 
				
			||||||
 | 
					        private readonly ILibraryManager _libraryManager;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public DynamicImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor, IUserManager userManager)
 | 
					        public DynamicImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor, IUserManager userManager, ILibraryManager libraryManager)
 | 
				
			||||||
            : base(fileSystem, providerManager, applicationPaths, imageProcessor)
 | 
					            : base(fileSystem, providerManager, applicationPaths, imageProcessor)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _userManager = userManager;
 | 
					            _userManager = userManager;
 | 
				
			||||||
 | 
					            _libraryManager = libraryManager;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override IEnumerable<ImageType> GetSupportedImages(IHasImages item)
 | 
					        public override IEnumerable<ImageType> GetSupportedImages(IHasImages item)
 | 
				
			||||||
@ -50,7 +53,15 @@ namespace MediaBrowser.Server.Implementations.UserViews
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            if (string.Equals(view.ViewType, CollectionType.LiveTv, StringComparison.OrdinalIgnoreCase))
 | 
					            if (string.Equals(view.ViewType, CollectionType.LiveTv, StringComparison.OrdinalIgnoreCase))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                return new List<BaseItem>();
 | 
					                var programs = _libraryManager.GetItemList(new InternalItemsQuery
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    IncludeItemTypes = new[] { typeof(LiveTvProgram).Name },
 | 
				
			||||||
 | 
					                    ImageTypes = new[] { ImageType.Primary },
 | 
				
			||||||
 | 
					                    Limit = 30,
 | 
				
			||||||
 | 
					                    IsMovie = true
 | 
				
			||||||
 | 
					                }).ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                return GetFinalItems(programs).ToList();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (string.Equals(view.ViewType, SpecialFolder.MovieGenre, StringComparison.OrdinalIgnoreCase) ||
 | 
					            if (string.Equals(view.ViewType, SpecialFolder.MovieGenre, StringComparison.OrdinalIgnoreCase) ||
 | 
				
			||||||
@ -147,6 +158,7 @@ namespace MediaBrowser.Server.Implementations.UserViews
 | 
				
			|||||||
                CollectionType.MusicVideos,
 | 
					                CollectionType.MusicVideos,
 | 
				
			||||||
                CollectionType.HomeVideos,
 | 
					                CollectionType.HomeVideos,
 | 
				
			||||||
                CollectionType.BoxSets,
 | 
					                CollectionType.BoxSets,
 | 
				
			||||||
 | 
					                CollectionType.LiveTv,
 | 
				
			||||||
                CollectionType.Playlists,
 | 
					                CollectionType.Playlists,
 | 
				
			||||||
                CollectionType.Photos,
 | 
					                CollectionType.Photos,
 | 
				
			||||||
                string.Empty
 | 
					                string.Empty
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user