mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-09-07 03:48:06 +02:00
commit
66a886adef
8 changed files with 68 additions and 3 deletions
|
@ -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…
Reference in a new issue