public static void FillVideoInfoFromMedia(SVR_VideoLocal info, Media m) { info.VideoResolution = (!string.IsNullOrEmpty(m.Width) && !string.IsNullOrEmpty(m.Height)) ? m.Width + "x" + m.Height : string.Empty; info.VideoCodec = (!string.IsNullOrEmpty(m.VideoCodec)) ? m.VideoCodec : string.Empty; info.AudioCodec = (!string.IsNullOrEmpty(m.AudioCodec)) ? m.AudioCodec : string.Empty; if (!string.IsNullOrEmpty(m.Duration)) { double duration; bool isValidDuration = double.TryParse(m.Duration, out duration); if (isValidDuration) { info.Duration = (long)double.Parse(m.Duration, NumberStyles.Any, CultureInfo.InvariantCulture); } else { info.Duration = 0; } } else { info.Duration = 0; } info.VideoBitrate = info.VideoBitDepth = info.VideoFrameRate = info.AudioBitrate = string.Empty; List <Shoko.Models.PlexAndKodi.Stream> vparts = m.Parts[0].Streams.Where(a => a.StreamType == "1").ToList(); if (vparts.Count > 0) { if (!string.IsNullOrEmpty(vparts[0].Bitrate)) { info.VideoBitrate = vparts[0].Bitrate; } if (!string.IsNullOrEmpty(vparts[0].BitDepth)) { info.VideoBitDepth = vparts[0].BitDepth; } if (!string.IsNullOrEmpty(vparts[0].FrameRate)) { info.VideoFrameRate = vparts[0].FrameRate; } } List <Shoko.Models.PlexAndKodi.Stream> aparts = m.Parts[0].Streams.Where(a => a.StreamType == "2").ToList(); if (aparts.Count > 0) { if (!string.IsNullOrEmpty(aparts[0].Bitrate)) { info.AudioBitrate = aparts[0].Bitrate; } } }
public bool RefreshMediaInfo() { try { logger.Trace($"Getting media info for: {FullServerPath}"); Media m = null; List <Shoko.Models.Azure.Azure_Media> webmedias = AzureWebAPI.Get_Media(VideoLocal.ED2KHash); if (webmedias != null && webmedias.Count > 0) { m = webmedias[0].ToMedia(); } if (m == null) { string name = (ImportFolder.CloudID == null) ? FullServerPath.Replace("/", "\\") : ((IProvider)null).ReplaceSchemeHost(((IProvider)null).ConstructVideoLocalStream(0, VideoLocalID.ToString(), "file", false)); m = MediaConvert.Convert(name, GetFile()); //Mediainfo should have libcurl.dll for http if (string.IsNullOrEmpty(m.Duration)) { m = null; } if (m != null) { AzureWebAPI.Send_Media(VideoLocal.ED2KHash, m); } } if (m != null) { SVR_VideoLocal info = VideoLocal; FillVideoInfoFromMedia(info, m); m.Id = VideoLocalID.ToString(); List <Shoko.Models.PlexAndKodi.Stream> subs = SubtitleHelper.GetSubtitleStreams(this); if (subs.Count > 0) { m.Parts[0].Streams.AddRange(subs); } foreach (Part p in m.Parts) { p.Id = null; p.Accessible = "1"; p.Exists = "1"; bool vid = false; bool aud = false; bool txt = false; foreach (Shoko.Models.PlexAndKodi.Stream ss in p.Streams.ToArray()) { if ((ss.StreamType == "1") && !vid) { vid = true; } if ((ss.StreamType == "2") && !aud) { aud = true; ss.Selected = "1"; } if ((ss.StreamType == "3") && !txt) { txt = true; ss.Selected = "1"; } } } info.Media = m; return(true); } logger.Error($"File {FullServerPath} does not exist, unable to read media information from it"); } catch (Exception e) { logger.Error($"Unable to read the media information of file {FullServerPath} ERROR: {e}"); } return(false); }