Sfoglia il codice sorgente

Merge pull request #2610 from MediaBrowser/dev

Dev
Luke 8 anni fa
parent
commit
0a9a5480c8

+ 3 - 3
Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs

@@ -1231,7 +1231,8 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                     RequiresOpening = false,
                     RequiresClosing = false,
                     Protocol = MediaBrowser.Model.MediaInfo.MediaProtocol.Http,
-                    BufferMs = 0
+                    BufferMs = 0,
+                    IgnoreDts = true
                 };
 
                 var isAudio = false;
@@ -1516,8 +1517,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                     EnforceKeepUpTo(timer, seriesPath);
                 };
 
-                await recorder.Record(mediaStreamInfo, recordPath, duration, onStarted, cancellationToken)
-                        .ConfigureAwait(false);
+                await recorder.Record(mediaStreamInfo, recordPath, duration, onStarted, cancellationToken).ConfigureAwait(false);
 
                 recordingStatus = RecordingStatus.Completed;
                 _logger.Info("Recording completed: {0}", recordPath);

+ 34 - 22
Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs

@@ -80,13 +80,20 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
 
         public string GetOutputPath(MediaSourceInfo mediaSource, string targetFile)
         {
-            return Path.ChangeExtension(targetFile, "." + OutputFormat);
+            var extension = OutputFormat;
+
+            if (string.Equals(extension, "mpegts", StringComparison.OrdinalIgnoreCase))
+            {
+                extension = "ts";
+            }
+
+            return Path.ChangeExtension(targetFile, "." + extension);
         }
 
         public async Task Record(MediaSourceInfo mediaSource, string targetFile, TimeSpan duration, Action onStarted, CancellationToken cancellationToken)
         {
-            var durationToken = new CancellationTokenSource(duration);
-            cancellationToken = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, durationToken.Token).Token;
+            //var durationToken = new CancellationTokenSource(duration);
+            //cancellationToken = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, durationToken.Token).Token;
 
             await RecordFromFile(mediaSource, mediaSource.Path, targetFile, duration, onStarted, cancellationToken).ConfigureAwait(false);
 
@@ -171,34 +178,32 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
             }
 
             var durationParam = " -t " + _mediaEncoder.GetTimeParameter(duration.Ticks);
-            var inputModifiers = "-fflags +genpts -async 1 -vsync -1";
 
-            if (!string.IsNullOrWhiteSpace(GetEncodingOptions().HardwareAccelerationType))
+            var flags = new List<string>();
+            if (mediaSource.IgnoreDts)
             {
-                inputModifiers += " -hwaccel auto";
+                flags.Add("+igndts");
+            }
+            if (mediaSource.IgnoreIndex)
+            {
+                flags.Add("+ignidx");
             }
 
-            var commandLineArgs = "-i \"{0}\"{5} {2} -map_metadata -1 -threads 0 {3}{4}{6} -y \"{1}\"";
+            var inputModifiers = "-async 1 -vsync -1";
 
-            long startTimeTicks = 0;
-            //if (mediaSource.DateLiveStreamOpened.HasValue)
-            //{
-            //    var elapsed = DateTime.UtcNow - mediaSource.DateLiveStreamOpened.Value;
-            //    elapsed -= TimeSpan.FromSeconds(10);
-            //    if (elapsed.TotalSeconds >= 0)
-            //    {
-            //        startTimeTicks = elapsed.Ticks + startTimeTicks;
-            //    }
-            //}
+            if (flags.Count > 0)
+            {
+                inputModifiers += " -fflags " + string.Join("", flags.ToArray());
+            }
 
-            if (mediaSource.ReadAtNativeFramerate)
+            if (!string.IsNullOrWhiteSpace(GetEncodingOptions().HardwareAccelerationType))
             {
-                inputModifiers += " -re";
+                inputModifiers += " -hwaccel auto";
             }
 
-            if (startTimeTicks > 0)
+            if (mediaSource.ReadAtNativeFramerate)
             {
-                inputModifiers = "-ss " + _mediaEncoder.GetTimeParameter(startTimeTicks) + " " + inputModifiers;
+                inputModifiers += " -re";
             }
 
             var analyzeDurationSeconds = 5;
@@ -212,7 +217,14 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                 " -f mp4 -movflags frag_keyframe+empty_moov" :
                 string.Empty;
 
-            commandLineArgs = string.Format(commandLineArgs, inputTempFile, targetFile, videoArgs, GetAudioArgs(mediaSource), subtitleArgs, durationParam, outputParam);
+            var commandLineArgs = string.Format("-i \"{0}\"{5} {2} -map_metadata -1 -threads 0 {3}{4}{6} -y \"{1}\"", 
+                inputTempFile, 
+                targetFile, 
+                videoArgs, 
+                GetAudioArgs(mediaSource), 
+                subtitleArgs, 
+                durationParam, 
+                outputParam);
 
             return inputModifiers + " " + commandLineArgs;
         }

+ 5 - 0
Emby.Server.Implementations/LiveTv/TunerHosts/MulticastStream.cs

@@ -29,6 +29,11 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
 
             byte[] buffer = new byte[BufferSize];
 
+            if (source == null)
+            {
+                throw new ArgumentNullException("source");
+            }
+
             while (!cancellationToken.IsCancellationRequested)
             {
                 var bytesRead = await source.ReadAsync(buffer, 0, buffer.Length, cancellationToken).ConfigureAwait(false);

+ 32 - 0
MediaBrowser.Providers/Manager/ProviderUtils.cs

@@ -4,6 +4,8 @@ using MediaBrowser.Controller.Providers;
 using MediaBrowser.Model.Entities;
 using System;
 using System.Collections.Generic;
+using System.Linq;
+using MediaBrowser.Controller.Extensions;
 
 namespace MediaBrowser.Providers.Manager
 {
@@ -122,6 +124,11 @@ namespace MediaBrowser.Providers.Manager
                 if (replaceData || targetResult.People == null || targetResult.People.Count == 0)
                 {
                     targetResult.People = sourceResult.People;
+
+                }
+                else if (targetResult.People != null && sourceResult.People != null)
+                {
+                    MergePeople(sourceResult.People, targetResult.People);
                 }
             }
 
@@ -205,6 +212,31 @@ namespace MediaBrowser.Providers.Manager
             }
         }
 
+        private static void MergePeople(List<PersonInfo> source, List<PersonInfo> target)
+        {
+            foreach (var person in target)
+            {
+                var normalizedName = person.Name.RemoveDiacritics();
+                var personInSource = source.FirstOrDefault(i => string.Equals(i.Name.RemoveDiacritics(), normalizedName, StringComparison.OrdinalIgnoreCase));
+
+                if (personInSource != null)
+                {
+                    foreach (var providerId in personInSource.ProviderIds)
+                    {
+                        if (!person.ProviderIds.ContainsKey(providerId.Key))
+                        {
+                            person.ProviderIds[providerId.Key] = providerId.Value;
+                        }
+                    }
+
+                    if (string.IsNullOrWhiteSpace(person.ImageUrl))
+                    {
+                        person.ImageUrl = personInSource.ImageUrl;
+                    }
+                }
+            }
+        }
+
         public static void MergeMetadataSettings(BaseItem source,
            BaseItem target)
         {

+ 1 - 1
SharedVersion.cs

@@ -1,3 +1,3 @@
 using System.Reflection;
 
-[assembly: AssemblyVersion("3.2.13.10")]
+[assembly: AssemblyVersion("3.2.13.11")]