using MediaBrowser.Controller.Dlna; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Entities; using System; using System.IO; using System.Linq; namespace MediaBrowser.Dlna.PlayTo { public class PlaylistItem { public string ItemId { get; set; } public bool Transcode { get; set; } public bool IsVideo { get; set; } public bool IsAudio { get; set; } public string FileFormat { get; set; } public string MimeType { get; set; } public int PlayState { get; set; } public string StreamUrl { get; set; } public string DlnaHeaders { get; set; } public string Didl { get; set; } public long StartPositionTicks { get; set; } public static PlaylistItem Create(BaseItem item, DlnaProfile profile) { var playlistItem = new PlaylistItem { ItemId = item.Id.ToString() }; DlnaProfileType profileType; if (string.Equals(item.MediaType, MediaType.Video, StringComparison.OrdinalIgnoreCase)) { playlistItem.IsVideo = true; profileType = DlnaProfileType.Video; } else { playlistItem.IsAudio = true; profileType = DlnaProfileType.Audio; } var path = item.Path; var directPlay = profile.DirectPlayProfiles.FirstOrDefault(i => i.Type == profileType && IsSupported(i, path)); if (directPlay != null) { playlistItem.Transcode = false; playlistItem.FileFormat = Path.GetExtension(path).TrimStart('.'); playlistItem.MimeType = directPlay.MimeType; return playlistItem; } var transcodingProfile = profile.TranscodingProfiles.FirstOrDefault(i => i.Type == profileType && IsSupported(profile, i, path)); if (transcodingProfile != null) { playlistItem.Transcode = true; playlistItem.FileFormat = transcodingProfile.Container; playlistItem.MimeType = transcodingProfile.MimeType; } return playlistItem; } private static bool IsSupported(DirectPlayProfile profile, string path) { // TODO: Support codec list as additional restriction var mediaContainer = Path.GetExtension(path).TrimStart('.'); if (!profile.Containers.Any(i => string.Equals(i.TrimStart('.'), mediaContainer, StringComparison.OrdinalIgnoreCase))) { return false; } // Placeholder for future conditions return true; } private static bool IsSupported(DlnaProfile profile, TranscodingProfile transcodingProfile, string path) { // Placeholder for future conditions return true; } } }