mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-03 19:17:24 -05:00 
			
		
		
		
	add property to indicate support for on the fly subtitle extraction
This commit is contained in:
		
							parent
							
								
									d39a704b42
								
							
						
					
					
						commit
						82ab91f209
					
				@ -236,7 +236,7 @@ namespace Emby.Dlna.Didl
 | 
			
		||||
                AddVideoResource(writer, video, deviceId, filter, contentFeature, streamInfo);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var subtitleProfiles = streamInfo.GetSubtitleProfiles(false, _serverAddress, _accessToken)
 | 
			
		||||
            var subtitleProfiles = streamInfo.GetSubtitleProfiles(_mediaEncoder, false, _serverAddress, _accessToken)
 | 
			
		||||
                .Where(subtitle => subtitle.DeliveryMethod == SubtitleDeliveryMethod.External)
 | 
			
		||||
                .ToList();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -14,6 +14,7 @@ namespace MediaBrowser.Model.Configuration
 | 
			
		||||
        public int H264Crf { get; set; }
 | 
			
		||||
        public string H264Preset { get; set; }
 | 
			
		||||
        public bool EnableHardwareEncoding { get; set; }
 | 
			
		||||
        public bool EnableSubtitleExtraction { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string[] HardwareDecodingCodecs { get; set; }
 | 
			
		||||
 | 
			
		||||
@ -26,7 +27,7 @@ namespace MediaBrowser.Model.Configuration
 | 
			
		||||
            VaapiDevice = "/dev/dri/card0";
 | 
			
		||||
            H264Crf = 23;
 | 
			
		||||
            EnableHardwareEncoding = true;
 | 
			
		||||
 | 
			
		||||
            EnableSubtitleExtraction = true;
 | 
			
		||||
            HardwareDecodingCodecs = new string[] { "h264", "vc1" };
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -4,6 +4,7 @@
 | 
			
		||||
    {
 | 
			
		||||
        bool CanEncodeToAudioCodec(string codec);
 | 
			
		||||
        bool CanEncodeToSubtitleCodec(string codec);
 | 
			
		||||
        bool CanExtractSubtitles(string codec);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class FullTranscoderSupport : ITranscoderSupport
 | 
			
		||||
@ -16,5 +17,9 @@
 | 
			
		||||
        {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        public bool CanExtractSubtitles(string codec)
 | 
			
		||||
        {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -686,7 +686,7 @@ namespace MediaBrowser.Model.Dlna
 | 
			
		||||
 | 
			
		||||
                    if (subtitleStream != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        SubtitleProfile subtitleProfile = GetSubtitleProfile(subtitleStream, options.Profile.SubtitleProfiles, directPlay.Value, null, null);
 | 
			
		||||
                        SubtitleProfile subtitleProfile = GetSubtitleProfile(subtitleStream, options.Profile.SubtitleProfiles, directPlay.Value, _transcoderSupport, null, null);
 | 
			
		||||
 | 
			
		||||
                        playlistItem.SubtitleDeliveryMethod = subtitleProfile.Method;
 | 
			
		||||
                        playlistItem.SubtitleFormat = subtitleProfile.Format;
 | 
			
		||||
@ -728,7 +728,7 @@ namespace MediaBrowser.Model.Dlna
 | 
			
		||||
 | 
			
		||||
                if (subtitleStream != null)
 | 
			
		||||
                {
 | 
			
		||||
                    SubtitleProfile subtitleProfile = GetSubtitleProfile(subtitleStream, options.Profile.SubtitleProfiles, PlayMethod.Transcode, transcodingProfile.Protocol, transcodingProfile.Container);
 | 
			
		||||
                    SubtitleProfile subtitleProfile = GetSubtitleProfile(subtitleStream, options.Profile.SubtitleProfiles, PlayMethod.Transcode, _transcoderSupport, transcodingProfile.Protocol, transcodingProfile.Container);
 | 
			
		||||
 | 
			
		||||
                    playlistItem.SubtitleDeliveryMethod = subtitleProfile.Method;
 | 
			
		||||
                    playlistItem.SubtitleFormat = subtitleProfile.Format;
 | 
			
		||||
@ -1183,7 +1183,7 @@ namespace MediaBrowser.Model.Dlna
 | 
			
		||||
        {
 | 
			
		||||
            if (subtitleStream != null)
 | 
			
		||||
            {
 | 
			
		||||
                SubtitleProfile subtitleProfile = GetSubtitleProfile(subtitleStream, options.Profile.SubtitleProfiles, playMethod, null, null);
 | 
			
		||||
                SubtitleProfile subtitleProfile = GetSubtitleProfile(subtitleStream, options.Profile.SubtitleProfiles, playMethod, _transcoderSupport, null, null);
 | 
			
		||||
 | 
			
		||||
                if (subtitleProfile.Method != SubtitleDeliveryMethod.External && subtitleProfile.Method != SubtitleDeliveryMethod.Embed)
 | 
			
		||||
                {
 | 
			
		||||
@ -1202,7 +1202,7 @@ namespace MediaBrowser.Model.Dlna
 | 
			
		||||
            return new Tuple<bool, TranscodeReason?>(result, TranscodeReason.ContainerBitrateExceedsLimit);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static SubtitleProfile GetSubtitleProfile(MediaStream subtitleStream, SubtitleProfile[] subtitleProfiles, PlayMethod playMethod, string transcodingSubProtocol, string transcodingContainer)
 | 
			
		||||
        public static SubtitleProfile GetSubtitleProfile(MediaStream subtitleStream, SubtitleProfile[] subtitleProfiles, PlayMethod playMethod, ITranscoderSupport transcoderSupport, string transcodingSubProtocol, string transcodingContainer)
 | 
			
		||||
        {
 | 
			
		||||
            if (!subtitleStream.IsExternal && (playMethod != PlayMethod.Transcode || !string.Equals(transcodingSubProtocol, "hls", StringComparison.OrdinalIgnoreCase)))
 | 
			
		||||
            {
 | 
			
		||||
@ -1256,7 +1256,9 @@ namespace MediaBrowser.Model.Dlna
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Look for an external or hls profile that matches the stream type (text/graphical) and doesn't require conversion
 | 
			
		||||
            return GetExternalSubtitleProfile(subtitleStream, subtitleProfiles, playMethod, false) ?? GetExternalSubtitleProfile(subtitleStream, subtitleProfiles, playMethod, true) ?? new SubtitleProfile
 | 
			
		||||
            return GetExternalSubtitleProfile(subtitleStream, subtitleProfiles, playMethod, transcoderSupport, false) ?? 
 | 
			
		||||
                GetExternalSubtitleProfile(subtitleStream, subtitleProfiles, playMethod, transcoderSupport, true) ?? 
 | 
			
		||||
                new SubtitleProfile
 | 
			
		||||
            {
 | 
			
		||||
                Method = SubtitleDeliveryMethod.Encode,
 | 
			
		||||
                Format = subtitleStream.Codec
 | 
			
		||||
@ -1291,7 +1293,7 @@ namespace MediaBrowser.Model.Dlna
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private static SubtitleProfile GetExternalSubtitleProfile(MediaStream subtitleStream, SubtitleProfile[] subtitleProfiles, PlayMethod playMethod, bool allowConversion)
 | 
			
		||||
        private static SubtitleProfile GetExternalSubtitleProfile(MediaStream subtitleStream, SubtitleProfile[] subtitleProfiles, PlayMethod playMethod, ITranscoderSupport transcoderSupport, bool allowConversion)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (SubtitleProfile profile in subtitleProfiles)
 | 
			
		||||
            {
 | 
			
		||||
@ -1310,6 +1312,11 @@ namespace MediaBrowser.Model.Dlna
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (!subtitleStream.IsExternal && !transcoderSupport.CanExtractSubtitles(subtitleStream.Codec))
 | 
			
		||||
                {
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if ((profile.Method == SubtitleDeliveryMethod.External && subtitleStream.IsTextSubtitleStream == MediaStream.IsTextFormat(profile.Format)) ||
 | 
			
		||||
                    (profile.Method == SubtitleDeliveryMethod.Hls && subtitleStream.IsTextSubtitleStream))
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
@ -309,14 +309,14 @@ namespace MediaBrowser.Model.Dlna
 | 
			
		||||
            return list;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public List<SubtitleStreamInfo> GetExternalSubtitles(bool includeSelectedTrackOnly, string baseUrl, string accessToken)
 | 
			
		||||
        public List<SubtitleStreamInfo> GetExternalSubtitles(ITranscoderSupport transcoderSupport, bool includeSelectedTrackOnly, string baseUrl, string accessToken)
 | 
			
		||||
        {
 | 
			
		||||
            return GetExternalSubtitles(includeSelectedTrackOnly, false, baseUrl, accessToken);
 | 
			
		||||
            return GetExternalSubtitles(transcoderSupport, includeSelectedTrackOnly, false, baseUrl, accessToken);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public List<SubtitleStreamInfo> GetExternalSubtitles(bool includeSelectedTrackOnly, bool enableAllProfiles, string baseUrl, string accessToken)
 | 
			
		||||
        public List<SubtitleStreamInfo> GetExternalSubtitles(ITranscoderSupport transcoderSupport, bool includeSelectedTrackOnly, bool enableAllProfiles, string baseUrl, string accessToken)
 | 
			
		||||
        {
 | 
			
		||||
            List<SubtitleStreamInfo> list = GetSubtitleProfiles(includeSelectedTrackOnly, enableAllProfiles, baseUrl, accessToken);
 | 
			
		||||
            List<SubtitleStreamInfo> list = GetSubtitleProfiles(transcoderSupport, includeSelectedTrackOnly, enableAllProfiles, baseUrl, accessToken);
 | 
			
		||||
            List<SubtitleStreamInfo> newList = new List<SubtitleStreamInfo>();
 | 
			
		||||
 | 
			
		||||
            // First add the selected track
 | 
			
		||||
@ -331,12 +331,12 @@ namespace MediaBrowser.Model.Dlna
 | 
			
		||||
            return newList;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public List<SubtitleStreamInfo> GetSubtitleProfiles(bool includeSelectedTrackOnly, string baseUrl, string accessToken)
 | 
			
		||||
        public List<SubtitleStreamInfo> GetSubtitleProfiles(ITranscoderSupport transcoderSupport, bool includeSelectedTrackOnly, string baseUrl, string accessToken)
 | 
			
		||||
        {
 | 
			
		||||
            return GetSubtitleProfiles(includeSelectedTrackOnly, false, baseUrl, accessToken);
 | 
			
		||||
            return GetSubtitleProfiles(transcoderSupport, includeSelectedTrackOnly, false, baseUrl, accessToken);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public List<SubtitleStreamInfo> GetSubtitleProfiles(bool includeSelectedTrackOnly, bool enableAllProfiles, string baseUrl, string accessToken)
 | 
			
		||||
        public List<SubtitleStreamInfo> GetSubtitleProfiles(ITranscoderSupport transcoderSupport, bool includeSelectedTrackOnly, bool enableAllProfiles, string baseUrl, string accessToken)
 | 
			
		||||
        {
 | 
			
		||||
            List<SubtitleStreamInfo> list = new List<SubtitleStreamInfo>();
 | 
			
		||||
 | 
			
		||||
@ -352,7 +352,7 @@ namespace MediaBrowser.Model.Dlna
 | 
			
		||||
                {
 | 
			
		||||
                    if (stream.Type == MediaStreamType.Subtitle && stream.Index == SubtitleStreamIndex.Value)
 | 
			
		||||
                    {
 | 
			
		||||
                        AddSubtitleProfiles(list, stream, enableAllProfiles, baseUrl, accessToken, startPositionTicks);
 | 
			
		||||
                        AddSubtitleProfiles(list, stream, transcoderSupport, enableAllProfiles, baseUrl, accessToken, startPositionTicks);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
@ -363,7 +363,7 @@ namespace MediaBrowser.Model.Dlna
 | 
			
		||||
                {
 | 
			
		||||
                    if (stream.Type == MediaStreamType.Subtitle && (!SubtitleStreamIndex.HasValue || stream.Index != SubtitleStreamIndex.Value))
 | 
			
		||||
                    {
 | 
			
		||||
                        AddSubtitleProfiles(list, stream, enableAllProfiles, baseUrl, accessToken, startPositionTicks);
 | 
			
		||||
                        AddSubtitleProfiles(list, stream, transcoderSupport, enableAllProfiles, baseUrl, accessToken, startPositionTicks);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
@ -371,28 +371,28 @@ namespace MediaBrowser.Model.Dlna
 | 
			
		||||
            return list;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void AddSubtitleProfiles(List<SubtitleStreamInfo> list, MediaStream stream, bool enableAllProfiles, string baseUrl, string accessToken, long startPositionTicks)
 | 
			
		||||
        private void AddSubtitleProfiles(List<SubtitleStreamInfo> list, MediaStream stream, ITranscoderSupport transcoderSupport, bool enableAllProfiles, string baseUrl, string accessToken, long startPositionTicks)
 | 
			
		||||
        {
 | 
			
		||||
            if (enableAllProfiles)
 | 
			
		||||
            {
 | 
			
		||||
                foreach (SubtitleProfile profile in DeviceProfile.SubtitleProfiles)
 | 
			
		||||
                {
 | 
			
		||||
                    SubtitleStreamInfo info = GetSubtitleStreamInfo(stream, baseUrl, accessToken, startPositionTicks, new[] { profile });
 | 
			
		||||
                    SubtitleStreamInfo info = GetSubtitleStreamInfo(stream, baseUrl, accessToken, startPositionTicks, new[] { profile }, transcoderSupport);
 | 
			
		||||
 | 
			
		||||
                    list.Add(info);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                SubtitleStreamInfo info = GetSubtitleStreamInfo(stream, baseUrl, accessToken, startPositionTicks, DeviceProfile.SubtitleProfiles);
 | 
			
		||||
                SubtitleStreamInfo info = GetSubtitleStreamInfo(stream, baseUrl, accessToken, startPositionTicks, DeviceProfile.SubtitleProfiles, transcoderSupport);
 | 
			
		||||
 | 
			
		||||
                list.Add(info);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private SubtitleStreamInfo GetSubtitleStreamInfo(MediaStream stream, string baseUrl, string accessToken, long startPositionTicks, SubtitleProfile[] subtitleProfiles)
 | 
			
		||||
        private SubtitleStreamInfo GetSubtitleStreamInfo(MediaStream stream, string baseUrl, string accessToken, long startPositionTicks, SubtitleProfile[] subtitleProfiles, ITranscoderSupport transcoderSupport)
 | 
			
		||||
        {
 | 
			
		||||
            SubtitleProfile subtitleProfile = StreamBuilder.GetSubtitleProfile(stream, subtitleProfiles, PlayMethod, SubProtocol, Container);
 | 
			
		||||
            SubtitleProfile subtitleProfile = StreamBuilder.GetSubtitleProfile(stream, subtitleProfiles, PlayMethod, transcoderSupport, SubProtocol, Container);
 | 
			
		||||
            SubtitleStreamInfo info = new SubtitleStreamInfo
 | 
			
		||||
            {
 | 
			
		||||
                IsForced = stream.IsForced,
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,7 @@
 | 
			
		||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
 | 
			
		||||
    <metadata>
 | 
			
		||||
        <id>MediaBrowser.Common</id>
 | 
			
		||||
        <version>3.0.737</version>
 | 
			
		||||
        <version>3.0.740</version>
 | 
			
		||||
        <title>Emby.Common</title>
 | 
			
		||||
        <authors>Emby Team</authors>
 | 
			
		||||
        <owners>ebr,Luke,scottisafool</owners>
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,7 @@
 | 
			
		||||
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
 | 
			
		||||
    <metadata>
 | 
			
		||||
        <id>MediaBrowser.Server.Core</id>
 | 
			
		||||
        <version>3.0.737</version>
 | 
			
		||||
        <version>3.0.740</version>
 | 
			
		||||
        <title>Emby.Server.Core</title>
 | 
			
		||||
        <authors>Emby Team</authors>
 | 
			
		||||
        <owners>ebr,Luke,scottisafool</owners>
 | 
			
		||||
@ -12,7 +12,7 @@
 | 
			
		||||
        <description>Contains core components required to build plugins for Emby Server.</description>
 | 
			
		||||
        <copyright>Copyright © Emby 2013</copyright>
 | 
			
		||||
        <dependencies>
 | 
			
		||||
            <dependency id="MediaBrowser.Common" version="3.0.737" />
 | 
			
		||||
            <dependency id="MediaBrowser.Common" version="3.0.740" />
 | 
			
		||||
        </dependencies>
 | 
			
		||||
    </metadata>
 | 
			
		||||
    <files>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user