public void Initialise(MediaItem item) { DlnaMediaItem dlnaItem = Client.GetDlnaItem(item); var url = DlnaResourceAccessUtils.GetBaseResourceURL() + DlnaResourceAccessUtils.GetResourceUrl(item.MediaItemId.ToString() + (dlnaItem.IsSegmented ? "/playlist.m3u8" : ""), Client.ClientId); BitRate = null; SampleFrequency = null; NumberOfAudioChannels = null; Size = null; BitsPerSample = null; ColorDepth = null; Duration = null; var dlnaProtocolInfo = DlnaProtocolInfoFactory.GetProfileInfo(dlnaItem, Client.Profile.ProtocolInfo); if (dlnaProtocolInfo != null) { ProtocolInfo = dlnaProtocolInfo.ToString(); } if (dlnaItem.Metadata == null) { throw new DlnaAspectMissingException("No DLNA metadata found for MediaItem " + dlnaItem.MediaItemId); } if (dlnaItem.Metadata.Size > 0) { Size = Convert.ToUInt64(dlnaItem.Metadata.Size); } if (dlnaItem.IsImage == false) { if (dlnaItem.Metadata.Bitrate > 0) { BitRate = Convert.ToUInt32((double)dlnaItem.Metadata.Bitrate / 8.0); } if (dlnaItem.Audio != null && dlnaItem.Audio.Count > 0) { if (dlnaItem.Audio[0].Frequency > 0) { SampleFrequency = Convert.ToUInt32(dlnaItem.Audio[0].Frequency); } if (dlnaItem.Audio[0].Channels > 0) { NumberOfAudioChannels = Convert.ToUInt32(dlnaItem.Audio[0].Channels); } } if (dlnaItem.Metadata.Duration > 0) { Duration = TimeSpan.FromSeconds(dlnaItem.Metadata.Duration.Value).ToString(@"hh\:mm\:ss\.fff"); } } if (dlnaItem.IsVideo == true) { Resolution = dlnaItem.Video.Width + "x" + dlnaItem.Video.Height; } else if (dlnaItem.IsImage == true) { Resolution = dlnaItem.Image.Width + "x" + dlnaItem.Image.Height; } Uri = url; }
/// <summary> /// Returns a DLNA media item based on the given client and request /// </summary> /// <returns>Returns the requested DLNA media item otherwise null</returns> internal static StreamItem GetNewStreamItem(EndPointSettings client, Uri uri) { if (STREAM_ITEMS.TryGetValue(client.ClientId, out var currentStreamItem)) { return(currentStreamItem); } currentStreamItem = new StreamItem(uri.Host); Guid mediaItemGuid = Guid.Empty; DlnaMediaItem dlnaItem = null; int channel = 0; if (DlnaResourceAccessUtils.ParseMediaItem(uri, out mediaItemGuid)) { if (mediaItemGuid == Guid.Empty) { throw new InvalidOperationException(string.Format("Illegal request syntax. Correct syntax is '{0}'", DlnaResourceAccessUtils.SYNTAX)); } if (!client.DlnaMediaItems.TryGetValue(mediaItemGuid, out dlnaItem)) { // Attempt to grab the media item from the database. MediaItem item = MediaLibraryHelper.GetMediaItem(mediaItemGuid); if (item == null) { throw new Exception(string.Format("Media item '{0}' not found.", mediaItemGuid)); } dlnaItem = client.GetDlnaItem(item); } if (dlnaItem == null) { throw new Exception(string.Format("DLNA media item '{0}' not found.", mediaItemGuid)); } } else if (DlnaResourceAccessUtils.ParseTVChannel(uri, out channel)) { dlnaItem = client.GetLiveDlnaItem(channel); if (dlnaItem == null) { throw new Exception(string.Format("DLNA TV channel '{0}' was never tuned.", channel)); } } else if (DlnaResourceAccessUtils.ParseRadioChannel(uri, out channel)) { dlnaItem = client.GetLiveDlnaItem(channel); if (dlnaItem == null) { throw new Exception(string.Format("DLNA radio channel '{0}' was never tuned.", channel)); } } currentStreamItem.RequestedMediaItem = mediaItemGuid; currentStreamItem.TranscoderObject = dlnaItem; currentStreamItem.Title = dlnaItem?.MediaItemTitle; currentStreamItem.LiveChannelId = channel > 0 ? channel : 0; return(currentStreamItem); }