StreamHelper.cs 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using MediaBrowser.Controller.Dlna;
  2. using MediaBrowser.Model.Entities;
  3. using System.Collections.Generic;
  4. using System.Globalization;
  5. using System.Linq;
  6. namespace MediaBrowser.Dlna.PlayTo
  7. {
  8. class StreamHelper
  9. {
  10. /// <summary>
  11. /// Gets the audio URL.
  12. /// </summary>
  13. /// <param name="deviceProperties">The device properties.</param>
  14. /// <param name="item">The item.</param>
  15. /// <param name="streams">The streams.</param>
  16. /// <param name="serverAddress">The server address.</param>
  17. /// <returns>System.String.</returns>
  18. internal static string GetAudioUrl(DeviceInfo deviceProperties, PlaylistItem item, List<MediaStream> streams, string serverAddress)
  19. {
  20. var dlnaCommand = BuildDlnaUrl(deviceProperties, item);
  21. return string.Format("{0}/audio/{1}/stream{2}?{3}", serverAddress, item.ItemId, "." + item.Container.TrimStart('.'), dlnaCommand);
  22. }
  23. /// <summary>
  24. /// Gets the video URL.
  25. /// </summary>
  26. /// <param name="deviceProperties">The device properties.</param>
  27. /// <param name="item">The item.</param>
  28. /// <param name="streams">The streams.</param>
  29. /// <param name="serverAddress">The server address.</param>
  30. /// <returns>The url to send to the device</returns>
  31. internal static string GetVideoUrl(DeviceInfo deviceProperties, PlaylistItem item, List<MediaStream> streams, string serverAddress)
  32. {
  33. var dlnaCommand = BuildDlnaUrl(deviceProperties, item);
  34. return string.Format("{0}/Videos/{1}/stream{2}?{3}", serverAddress, item.ItemId, item.Container, dlnaCommand);
  35. }
  36. /// <summary>
  37. /// Builds the dlna URL.
  38. /// </summary>
  39. private static string BuildDlnaUrl(DeviceInfo deviceProperties, PlaylistItem item)
  40. {
  41. var profile = item.TranscodingSettings.Where(i => i.Name == TranscodingSettingType.VideoProfile)
  42. .Select(i => i.Value)
  43. .FirstOrDefault();
  44. var usCulture = new CultureInfo("en-US");
  45. var list = new List<string>
  46. {
  47. item.DeviceProfileName ?? string.Empty,
  48. deviceProperties.UUID ?? string.Empty,
  49. item.MediaSourceId ?? string.Empty,
  50. (!item.Transcode).ToString().ToLower(),
  51. item.VideoCodec ?? string.Empty,
  52. item.AudioCodec ?? string.Empty,
  53. item.AudioStreamIndex.HasValue ? item.AudioStreamIndex.Value.ToString(usCulture) : string.Empty,
  54. item.SubtitleStreamIndex.HasValue ? item.SubtitleStreamIndex.Value.ToString(usCulture) : string.Empty,
  55. item.VideoBitrate.HasValue ? item.VideoBitrate.Value.ToString(usCulture) : string.Empty,
  56. item.AudioBitrate.HasValue ? item.AudioBitrate.Value.ToString(usCulture) : string.Empty,
  57. item.MaxAudioChannels.HasValue ? item.MaxAudioChannels.Value.ToString(usCulture) : string.Empty,
  58. item.MaxFramerate.HasValue ? item.MaxFramerate.Value.ToString(usCulture) : string.Empty,
  59. item.MaxWidth.HasValue ? item.MaxWidth.Value.ToString(usCulture) : string.Empty,
  60. item.MaxHeight.HasValue ? item.MaxHeight.Value.ToString(usCulture) : string.Empty,
  61. item.StartPositionTicks.ToString(usCulture),
  62. profile ?? string.Empty,
  63. item.VideoLevel.HasValue ? item.VideoLevel.Value.ToString(usCulture) : string.Empty
  64. };
  65. return string.Format("Params={0}", string.Join(";", list.ToArray()));
  66. }
  67. }
  68. }