PlaylistItemFactory.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #pragma warning disable CS1591
  2. using System.IO;
  3. using System.Linq;
  4. using MediaBrowser.Controller.Entities;
  5. using MediaBrowser.Model.Dlna;
  6. using MediaBrowser.Model.Session;
  7. namespace Emby.Dlna.PlayTo
  8. {
  9. public class PlaylistItemFactory
  10. {
  11. public PlaylistItem Create(Photo item, DeviceProfile profile)
  12. {
  13. var playlistItem = new PlaylistItem
  14. {
  15. StreamInfo = new StreamInfo
  16. {
  17. ItemId = item.Id,
  18. MediaType = DlnaProfileType.Photo,
  19. DeviceProfile = profile
  20. },
  21. Profile = profile
  22. };
  23. var directPlay = profile.DirectPlayProfiles
  24. .FirstOrDefault(i => i.Type == DlnaProfileType.Photo && IsSupported(i, item));
  25. if (directPlay != null)
  26. {
  27. playlistItem.StreamInfo.PlayMethod = PlayMethod.DirectStream;
  28. playlistItem.StreamInfo.Container = Path.GetExtension(item.Path);
  29. return playlistItem;
  30. }
  31. var transcodingProfile = profile.TranscodingProfiles
  32. .FirstOrDefault(i => i.Type == DlnaProfileType.Photo);
  33. if (transcodingProfile != null)
  34. {
  35. playlistItem.StreamInfo.PlayMethod = PlayMethod.Transcode;
  36. playlistItem.StreamInfo.Container = "." + transcodingProfile.Container.TrimStart('.');
  37. }
  38. return playlistItem;
  39. }
  40. private static bool IsSupported(DirectPlayProfile profile, Photo item)
  41. {
  42. var mediaPath = item.Path;
  43. if (profile.Container.Length > 0)
  44. {
  45. // Check container type
  46. var mediaContainer = (Path.GetExtension(mediaPath) ?? string.Empty).TrimStart('.');
  47. if (!profile.SupportsContainer(mediaContainer))
  48. {
  49. return false;
  50. }
  51. }
  52. return true;
  53. }
  54. }
  55. }