using MediaBrowser.Controller.Dlna; using MediaBrowser.Model.Entities; using System.Collections.Generic; using System.Globalization; using System.Linq; namespace MediaBrowser.Dlna.PlayTo { class StreamHelper { /// /// Gets the audio URL. /// /// The device properties. /// The item. /// The streams. /// The server address. /// System.String. internal static string GetAudioUrl(DeviceInfo deviceProperties, PlaylistItem item, List streams, string serverAddress) { var dlnaCommand = BuildDlnaUrl(deviceProperties, item); return string.Format("{0}/audio/{1}/stream{2}?{3}", serverAddress, item.ItemId, "." + item.Container.TrimStart('.'), dlnaCommand); } /// /// Gets the video URL. /// /// The device properties. /// The item. /// The streams. /// The server address. /// The url to send to the device internal static string GetVideoUrl(DeviceInfo deviceProperties, PlaylistItem item, List streams, string serverAddress) { var dlnaCommand = BuildDlnaUrl(deviceProperties, item); return string.Format("{0}/Videos/{1}/stream{2}?{3}", serverAddress, item.ItemId, item.Container, dlnaCommand); } /// /// Builds the dlna URL. /// private static string BuildDlnaUrl(DeviceInfo deviceProperties, PlaylistItem item) { var profile = item.TranscodingSettings.Where(i => i.Name == TranscodingSettingType.VideoProfile) .Select(i => i.Value) .FirstOrDefault(); var usCulture = new CultureInfo("en-US"); var list = new List { item.DeviceProfileName ?? string.Empty, deviceProperties.UUID ?? string.Empty, item.MediaSourceId ?? string.Empty, (!item.Transcode).ToString().ToLower(), item.VideoCodec ?? string.Empty, item.AudioCodec ?? string.Empty, item.AudioStreamIndex.HasValue ? item.AudioStreamIndex.Value.ToString(usCulture) : string.Empty, item.SubtitleStreamIndex.HasValue ? item.SubtitleStreamIndex.Value.ToString(usCulture) : string.Empty, item.VideoBitrate.HasValue ? item.VideoBitrate.Value.ToString(usCulture) : string.Empty, item.AudioBitrate.HasValue ? item.AudioBitrate.Value.ToString(usCulture) : string.Empty, item.MaxAudioChannels.HasValue ? item.MaxAudioChannels.Value.ToString(usCulture) : string.Empty, item.MaxFramerate.HasValue ? item.MaxFramerate.Value.ToString(usCulture) : string.Empty, item.MaxWidth.HasValue ? item.MaxWidth.Value.ToString(usCulture) : string.Empty, item.MaxHeight.HasValue ? item.MaxHeight.Value.ToString(usCulture) : string.Empty, item.StartPositionTicks.ToString(usCulture), profile ?? string.Empty, item.VideoLevel.HasValue ? item.VideoLevel.Value.ToString(usCulture) : string.Empty }; return string.Format("Params={0}", string.Join(";", list.ToArray())); } } }