improve merge/split video feature
This commit is contained in:
parent
b5ab7776f1
commit
ceee0cdcca
|
@ -114,12 +114,14 @@ namespace MediaBrowser.Api
|
|||
|
||||
foreach (var link in video.GetLinkedAlternateVersions())
|
||||
{
|
||||
link.PrimaryVersionId = null;
|
||||
link.SetPrimaryVersionId(null);
|
||||
link.LinkedAlternateVersions = Video.EmptyLinkedChildArray;
|
||||
|
||||
link.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None);
|
||||
}
|
||||
|
||||
video.LinkedAlternateVersions = Video.EmptyLinkedChildArray;
|
||||
video.SetPrimaryVersionId(null);
|
||||
video.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None);
|
||||
}
|
||||
|
||||
|
@ -174,7 +176,7 @@ namespace MediaBrowser.Api
|
|||
|
||||
foreach (var item in items.Where(i => i.Id != primaryVersion.Id))
|
||||
{
|
||||
item.PrimaryVersionId = primaryVersion.Id.ToString("N");
|
||||
item.SetPrimaryVersionId(primaryVersion.Id.ToString("N"));
|
||||
|
||||
item.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None);
|
||||
|
||||
|
|
|
@ -84,6 +84,20 @@ namespace MediaBrowser.Controller.Entities
|
|||
}
|
||||
}
|
||||
|
||||
public void SetPrimaryVersionId(string id)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(id))
|
||||
{
|
||||
PrimaryVersionId = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
PrimaryVersionId = id;
|
||||
}
|
||||
|
||||
PresentationUniqueKey = CreatePresentationUniqueKey();
|
||||
}
|
||||
|
||||
public override string CreatePresentationUniqueKey()
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(PrimaryVersionId))
|
||||
|
@ -667,8 +681,6 @@ namespace MediaBrowser.Controller.Entities
|
|||
throw new ArgumentNullException("media");
|
||||
}
|
||||
|
||||
var mediaStreams = MediaSourceManager.GetMediaStreams(media.Id);
|
||||
|
||||
var locationType = media.LocationType;
|
||||
|
||||
var info = new MediaSourceInfo
|
||||
|
@ -676,8 +688,8 @@ namespace MediaBrowser.Controller.Entities
|
|||
Id = media.Id.ToString("N"),
|
||||
IsoType = media.IsoType,
|
||||
Protocol = locationType == LocationType.Remote ? MediaProtocol.Http : MediaProtocol.File,
|
||||
MediaStreams = mediaStreams,
|
||||
Name = GetMediaSourceName(media, mediaStreams),
|
||||
MediaStreams = MediaSourceManager.GetMediaStreams(media.Id),
|
||||
Name = GetMediaSourceName(media),
|
||||
Path = enablePathSubstitution ? GetMappedPath(media, media.Path, locationType) : media.Path,
|
||||
RunTimeTicks = media.RunTimeTicks,
|
||||
Video3DFormat = media.Video3DFormat,
|
||||
|
@ -740,12 +752,20 @@ namespace MediaBrowser.Controller.Entities
|
|||
return info;
|
||||
}
|
||||
|
||||
private static string GetMediaSourceName(Video video, List<MediaStream> mediaStreams)
|
||||
private static string GetMediaSourceName(Video video)
|
||||
{
|
||||
var terms = new List<string>();
|
||||
|
||||
var videoStream = mediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Video);
|
||||
var audioStream = mediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Audio);
|
||||
var locationType = video.LocationType;
|
||||
var path = video.Path;
|
||||
if ((locationType == LocationType.FileSystem || locationType == LocationType.Offline) && !string.IsNullOrWhiteSpace(path))
|
||||
{
|
||||
terms.Add(System.IO.Path.GetFileName(path));
|
||||
}
|
||||
else
|
||||
{
|
||||
terms.Add(video.Name);
|
||||
}
|
||||
|
||||
if (video.Video3DFormat.HasValue)
|
||||
{
|
||||
|
@ -779,50 +799,6 @@ namespace MediaBrowser.Controller.Entities
|
|||
}
|
||||
}
|
||||
|
||||
if (videoStream != null)
|
||||
{
|
||||
if (videoStream.Width.HasValue)
|
||||
{
|
||||
if (videoStream.Width.Value >= 3800)
|
||||
{
|
||||
terms.Add("4K");
|
||||
}
|
||||
else if (videoStream.Width.Value >= 1900)
|
||||
{
|
||||
terms.Add("1080P");
|
||||
}
|
||||
else if (videoStream.Width.Value >= 1270)
|
||||
{
|
||||
terms.Add("720P");
|
||||
}
|
||||
else if (videoStream.Width.Value >= 700)
|
||||
{
|
||||
terms.Add("480P");
|
||||
}
|
||||
else
|
||||
{
|
||||
terms.Add("SD");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (videoStream != null && !string.IsNullOrWhiteSpace(videoStream.Codec))
|
||||
{
|
||||
terms.Add(videoStream.Codec.ToUpper());
|
||||
}
|
||||
|
||||
if (audioStream != null)
|
||||
{
|
||||
var audioCodec = string.Equals(audioStream.Codec, "dca", StringComparison.OrdinalIgnoreCase)
|
||||
? audioStream.Profile
|
||||
: audioStream.Codec;
|
||||
|
||||
if (!string.IsNullOrEmpty(audioCodec))
|
||||
{
|
||||
terms.Add(audioCodec.ToUpper());
|
||||
}
|
||||
}
|
||||
|
||||
return string.Join("/", terms.ToArray(terms.Count));
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user