浏览代码

add infinite property

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

+ 13 - 0
MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs

@@ -170,6 +170,19 @@ namespace MediaBrowser.Api.Playback.Progressive
 
                 using (state)
                 {
+                    if (state.MediaSource.IsInfiniteStream)
+                    {
+                        var outputHeaders = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
+
+                        outputHeaders["Content-Type"] = contentType;
+
+                        var streamSource = new ProgressiveFileCopier(FileSystem, state.MediaPath, outputHeaders, null, Logger, CancellationToken.None)
+                        {
+                            AllowEndOfFile = false
+                        };
+                        return ResultFactory.GetAsyncStreamWriter(streamSource);
+                    }
+
                     TimeSpan? cacheDuration = null;
 
                     if (!string.IsNullOrEmpty(request.Tag))

+ 6 - 1
MediaBrowser.Api/Playback/Progressive/ProgressiveStreamWriter.cs

@@ -23,7 +23,7 @@ namespace MediaBrowser.Api.Playback.Progressive
         private const int BufferSize = 81920;
 
         private long _bytesWritten = 0;
-
+        public long StartPosition { get; set; }
         public bool AllowEndOfFile = true;
 
         public ProgressiveFileCopier(IFileSystem fileSystem, string path, Dictionary<string, string> outputHeaders, TranscodingJob job, ILogger logger, CancellationToken cancellationToken)
@@ -52,6 +52,11 @@ namespace MediaBrowser.Api.Playback.Progressive
 
                 using (var fs = _fileSystem.GetFileStream(_path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, true))
                 {
+                    if (StartPosition > 0)
+                    {
+                        fs.Position = StartPosition;
+                    }
+
                     while (eofCount < 15 || !AllowEndOfFile)
                     {
                         var bytesRead = await CopyToAsyncInternal(fs, outputStream, BufferSize, _cancellationToken).ConfigureAwait(false);

+ 1 - 1
MediaBrowser.Model/Dto/MediaSourceInfo.cs

@@ -27,7 +27,7 @@ namespace MediaBrowser.Model.Dto
         public bool SupportsTranscoding { get; set; }
         public bool SupportsDirectStream { get; set; }
         public bool SupportsDirectPlay { get; set; }
-
+        public bool IsInfiniteStream { get; set; }
         public bool RequiresOpening { get; set; }
         public string OpenToken { get; set; }
         public bool RequiresClosing { get; set; }

+ 2 - 1
MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs

@@ -396,7 +396,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun
                 Id = id,
                 SupportsDirectPlay = false,
                 SupportsDirectStream = true,
-                SupportsTranscoding = true
+                SupportsTranscoding = true,
+                IsInfiniteStream = true
             };
 
             return mediaSource;