浏览代码

embed recording button into video player

Luke Pulverenti 8 年之前
父节点
当前提交
c9ee7633ca

+ 12 - 0
Emby.Common.Implementations/Net/SocketFactory.cs

@@ -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)

+ 5 - 2
MediaBrowser.Api/Playback/Hls/BaseHlsService.cs

@@ -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

+ 3 - 0
MediaBrowser.Api/Playback/StreamRequest.cs

@@ -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

+ 18 - 0
MediaBrowser.Api/Playback/StreamState.cs

@@ -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

+ 9 - 0
MediaBrowser.Model/Dlna/StreamBuilder.cs

@@ -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;

+ 14 - 0
MediaBrowser.Model/Dlna/StreamInfo.cs

@@ -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;

+ 6 - 0
MediaBrowser.Model/Dlna/TranscodingProfile.cs

@@ -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>();