mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-03 19:17:24 -05:00 
			
		
		
		
	
						commit
						66a886adef
					
				@ -52,6 +52,18 @@ namespace Emby.Common.Implementations.Net
 | 
			
		||||
            {
 | 
			
		||||
                throw new SocketCreateException(ex.SocketErrorCode.ToString(), ex);
 | 
			
		||||
            }
 | 
			
		||||
            catch (ArgumentException ex)
 | 
			
		||||
            {
 | 
			
		||||
                if (dualMode)
 | 
			
		||||
                {
 | 
			
		||||
                    // Mono for BSD incorrectly throws ArgumentException instead of SocketException
 | 
			
		||||
                    throw new SocketCreateException("AddressFamilyNotSupported", ex);
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    throw;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public ISocket CreateTcpSocket(IpAddressInfo remoteAddress, int remotePort)
 | 
			
		||||
 | 
			
		||||
@ -110,8 +110,11 @@ namespace MediaBrowser.Api.Playback.Hls
 | 
			
		||||
                            throw;
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        var waitForSegments = state.SegmentLength >= 10 ? 2 : 3;
 | 
			
		||||
                        await WaitForMinimumSegmentCount(playlist, waitForSegments, cancellationTokenSource.Token).ConfigureAwait(false);
 | 
			
		||||
                        var minSegments = state.MinSegments;
 | 
			
		||||
                        if (minSegments > 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            await WaitForMinimumSegmentCount(playlist, minSegments, cancellationTokenSource.Token).ConfigureAwait(false);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                finally
 | 
			
		||||
 | 
			
		||||
@ -42,6 +42,9 @@ namespace MediaBrowser.Api.Playback
 | 
			
		||||
        public string LiveStreamId { get; set; }
 | 
			
		||||
        public string Tag { get; set; }
 | 
			
		||||
        public string SegmentContainer { get; set; }
 | 
			
		||||
 | 
			
		||||
        public int? SegmentLength { get; set; }
 | 
			
		||||
        public int? MinSegments { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class VideoStreamRequest : StreamRequest
 | 
			
		||||
 | 
			
		||||
@ -60,6 +60,11 @@ namespace MediaBrowser.Api.Playback
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                if (Request.SegmentLength.HasValue)
 | 
			
		||||
                {
 | 
			
		||||
                    return Request.SegmentLength.Value;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (string.Equals(OutputVideoCodec, "copy", StringComparison.OrdinalIgnoreCase))
 | 
			
		||||
                {
 | 
			
		||||
                    var userAgent = UserAgent ?? string.Empty;
 | 
			
		||||
@ -86,6 +91,19 @@ namespace MediaBrowser.Api.Playback
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public int MinSegments
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                if (Request.MinSegments.HasValue)
 | 
			
		||||
                {
 | 
			
		||||
                    return Request.MinSegments.Value;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                return SegmentLength >= 10 ? 2 : 3;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool IsSegmentedLiveStream
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
 | 
			
		||||
@ -484,6 +484,15 @@ namespace MediaBrowser.Model.Dlna
 | 
			
		||||
                playlistItem.CopyTimestamps = transcodingProfile.CopyTimestamps;
 | 
			
		||||
                playlistItem.EnableSubtitlesInManifest = transcodingProfile.EnableSubtitlesInManifest;
 | 
			
		||||
 | 
			
		||||
                if (transcodingProfile.MinSegments > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    playlistItem.MinSegments = transcodingProfile.MinSegments;
 | 
			
		||||
                }
 | 
			
		||||
                if (transcodingProfile.SegmentLength > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    playlistItem.SegmentLength = transcodingProfile.SegmentLength;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (!string.IsNullOrEmpty(transcodingProfile.MaxAudioChannels))
 | 
			
		||||
                {
 | 
			
		||||
                    int transcodingMaxAudioChannels;
 | 
			
		||||
 | 
			
		||||
@ -6,6 +6,7 @@ using MediaBrowser.Model.MediaInfo;
 | 
			
		||||
using MediaBrowser.Model.Session;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Globalization;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
 | 
			
		||||
namespace MediaBrowser.Model.Dlna
 | 
			
		||||
@ -37,6 +38,9 @@ namespace MediaBrowser.Model.Dlna
 | 
			
		||||
 | 
			
		||||
        public string VideoProfile { get; set; }
 | 
			
		||||
 | 
			
		||||
        public int? SegmentLength { get; set; }
 | 
			
		||||
        public int? MinSegments { get; set; }
 | 
			
		||||
 | 
			
		||||
        public bool RequireAvc { get; set; }
 | 
			
		||||
        public bool DeInterlace { get; set; }
 | 
			
		||||
        public bool RequireNonAnamorphic { get; set; }
 | 
			
		||||
@ -291,6 +295,16 @@ namespace MediaBrowser.Model.Dlna
 | 
			
		||||
            if (!isDlna && isHls)
 | 
			
		||||
            {
 | 
			
		||||
                list.Add(new NameValuePair("SegmentContainer", item.Container ?? string.Empty));
 | 
			
		||||
 | 
			
		||||
                if (item.SegmentLength.HasValue)
 | 
			
		||||
                {
 | 
			
		||||
                    list.Add(new NameValuePair("SegmentLength", item.SegmentLength.Value.ToString(CultureInfo.InvariantCulture)));
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (item.MinSegments.HasValue)
 | 
			
		||||
                {
 | 
			
		||||
                    list.Add(new NameValuePair("MinSegments", item.MinSegments.Value.ToString(CultureInfo.InvariantCulture)));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return list;
 | 
			
		||||
 | 
			
		||||
@ -42,6 +42,12 @@ namespace MediaBrowser.Model.Dlna
 | 
			
		||||
        [XmlAttribute("maxAudioChannels")]
 | 
			
		||||
        public string MaxAudioChannels { get; set; }
 | 
			
		||||
 | 
			
		||||
        [XmlAttribute("minSegments")]
 | 
			
		||||
        public int MinSegments { get; set; }
 | 
			
		||||
 | 
			
		||||
        [XmlAttribute("segmentLength")]
 | 
			
		||||
        public int SegmentLength { get; set; }
 | 
			
		||||
 | 
			
		||||
        public List<string> GetAudioCodecs()
 | 
			
		||||
        {
 | 
			
		||||
            List<string> list = new List<string>();
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,3 @@
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
 | 
			
		||||
[assembly: AssemblyVersion("3.2.8.2")]
 | 
			
		||||
[assembly: AssemblyVersion("3.2.8.3")]
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user