123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596 |
- using MediaBrowser.Common.Configuration;
- using MediaBrowser.Common.IO;
- using MediaBrowser.Controller.Dlna;
- using MediaBrowser.Model.Serialization;
- using System.Collections.Generic;
- using System.Text.RegularExpressions;
- namespace MediaBrowser.Dlna
- {
- public class DlnaManager : IDlnaManager
- {
- private IApplicationPaths _appPaths;
- private readonly IXmlSerializer _xmlSerializer;
- private readonly IFileSystem _fileSystem;
- public DlnaManager(IXmlSerializer xmlSerializer, IFileSystem fileSystem)
- {
- _xmlSerializer = xmlSerializer;
- _fileSystem = fileSystem;
- //GetProfiles();
- }
- public IEnumerable<DeviceProfile> GetProfiles()
- {
- var list = new List<DeviceProfile>();
- #region Samsung
- list.Add(new DeviceProfile
- {
- Name = "Samsung TV (B Series)",
- ClientType = "DLNA",
- FriendlyName = "^TV$",
- ModelNumber = @"1\.0",
- ModelName = "Samsung DTV DMR",
- TranscodingProfiles = new[]
- {
- new TranscodingProfile
- {
- Container = "mp3",
- Type = DlnaProfileType.Audio
- },
- new TranscodingProfile
- {
- Container = "ts",
- Type = DlnaProfileType.Video
- }
- },
- DirectPlayProfiles = new[]
- {
- new DirectPlayProfile
- {
- Containers = new[]{"mp3"},
- Type = DlnaProfileType.Audio
- },
- new DirectPlayProfile
- {
- Containers = new[]{"mkv"},
- MimeType = "x-mkv",
- Type = DlnaProfileType.Video
- },
- new DirectPlayProfile
- {
- Containers = new[]{"avi"},
- MimeType = "x-msvideo",
- Type = DlnaProfileType.Video
- },
- new DirectPlayProfile
- {
- Containers = new[]{"mp4"},
- Type = DlnaProfileType.Video
- }
- }
- });
- list.Add(new DeviceProfile
- {
- Name = "Samsung TV (E/F-series)",
- ClientType = "DLNA",
- FriendlyName = @"(^\[TV\][A-Z]{2}\d{2}(E|F)[A-Z]?\d{3,4}.*)|^\[TV\] Samsung",
- ModelNumber = @"(1\.0)|(AllShare1\.0)",
- TranscodingProfiles = new[]
- {
- new TranscodingProfile
- {
- Container = "mp3",
- Type = DlnaProfileType.Audio
- },
- new TranscodingProfile
- {
- Container = "ts",
- Type = DlnaProfileType.Video
- }
- },
- DirectPlayProfiles = new[]
- {
- new DirectPlayProfile
- {
- Containers = new[]{"mp3"},
- Type = DlnaProfileType.Audio
- },
- new DirectPlayProfile
- {
- Containers = new[]{"mkv"},
- MimeType = "x-mkv",
- Type = DlnaProfileType.Video
- },
- new DirectPlayProfile
- {
- Containers = new[]{"avi"},
- MimeType = "x-msvideo",
- Type = DlnaProfileType.Video
- },
- new DirectPlayProfile
- {
- Containers = new[]{"mp4"},
- Type = DlnaProfileType.Video
- }
- }
- });
- list.Add(new DeviceProfile
- {
- Name = "Samsung TV (C/D-series)",
- ClientType = "DLNA",
- FriendlyName = @"(^TV-\d{2}C\d{3}.*)|(^\[TV\][A-Z]{2}\d{2}(D)[A-Z]?\d{3,4}.*)|^\[TV\] Samsung",
- ModelNumber = @"(1\.0)|(AllShare1\.0)",
- TranscodingProfiles = new[]
- {
- new TranscodingProfile
- {
- Container = "mp3",
- Type = DlnaProfileType.Audio
- },
- new TranscodingProfile
- {
- Container = "ts",
- Type = DlnaProfileType.Video
- }
- },
- DirectPlayProfiles = new[]
- {
- new DirectPlayProfile
- {
- Containers = new[]{"mp3"},
- Type = DlnaProfileType.Audio
- },
- new DirectPlayProfile
- {
- Containers = new[]{"mkv"},
- MimeType = "x-mkv",
- Type = DlnaProfileType.Video
- },
- new DirectPlayProfile
- {
- Containers = new[]{"avi"},
- MimeType = "x-msvideo",
- Type = DlnaProfileType.Video
- },
- new DirectPlayProfile
- {
- Containers = new[]{"mp4"},
- Type = DlnaProfileType.Video
- }
- }
- });
- #endregion
- #region Xbox
- list.Add(new DeviceProfile
- {
- Name = "Xbox 360",
- ClientType = "DLNA",
- ModelName = "Xbox 360",
- TranscodingProfiles = new[]
- {
- new TranscodingProfile
- {
- Container = "mp3",
- Type = DlnaProfileType.Audio
- },
- new TranscodingProfile
- {
- Container = "ts",
- Type = DlnaProfileType.Video
- }
- },
- DirectPlayProfiles = new[]
- {
- new DirectPlayProfile
- {
- Containers = new[]{"mp3"},
- Type = DlnaProfileType.Audio
- },
- new DirectPlayProfile
- {
- Containers = new[]{"avi"},
- MimeType = "avi",
- Type = DlnaProfileType.Video
- }
- }
- });
- list.Add(new DeviceProfile
- {
- Name = "Xbox One",
- ModelName = "Xbox One",
- ClientType = "DLNA",
- FriendlyName = "Xbox-SystemOS",
- TranscodingProfiles = new[]
- {
- new TranscodingProfile
- {
- Container = "mp3",
- Type = DlnaProfileType.Audio
- },
- new TranscodingProfile
- {
- Container = "ts",
- Type = DlnaProfileType.Video
- }
- },
- DirectPlayProfiles = new[]
- {
- new DirectPlayProfile
- {
- Containers = new[]{"mp3"},
- Type = DlnaProfileType.Audio
- },
- new DirectPlayProfile
- {
- Containers = new[]{"avi"},
- MimeType = "x-msvideo",
- Type = DlnaProfileType.Video
- }
- }
- });
- #endregion
- #region Sony
- list.Add(new DeviceProfile
- {
- Name = "Sony Bravia (2012)",
- ClientType = "DLNA",
- FriendlyName = @"BRAVIA KDL-\d{2}[A-Z]X\d5(\d|G).*",
- TranscodingProfiles = new[]
- {
- new TranscodingProfile
- {
- Container = "mp3",
- Type = DlnaProfileType.Audio
- },
- new TranscodingProfile
- {
- Container = "ts",
- Type = DlnaProfileType.Video
- }
- },
- DirectPlayProfiles = new[]
- {
- new DirectPlayProfile
- {
- Containers = new[]{"mp3"},
- Type = DlnaProfileType.Audio
- },
- new DirectPlayProfile
- {
- Containers = new[]{"avi"},
- Type = DlnaProfileType.Video,
- MimeType = "avi"
- }
- }
- });
- list.Add(new DeviceProfile
- {
- Name = "Sony Bravia (2013)",
- ClientType = "DLNA",
- FriendlyName = @"BRAVIA (KDL-\d{2}W[689]\d{2}A.*)|(KD-\d{2}X9\d{3}A.*)",
- TranscodingProfiles = new[]
- {
- new TranscodingProfile
- {
- Container = "mp3",
- Type = DlnaProfileType.Audio
- },
- new TranscodingProfile
- {
- Container = "ts",
- Type = DlnaProfileType.Video,
- MimeType = "mpeg"
- }
- },
- DirectPlayProfiles = new[]
- {
- new DirectPlayProfile
- {
- Containers = new[]{"mp3"},
- Type = DlnaProfileType.Audio
- },
- new DirectPlayProfile
- {
- Containers = new[]{"wma"},
- Type = DlnaProfileType.Audio,
- MimeType = "x-ms-wma"
- },
- new DirectPlayProfile
- {
- Containers = new[]{"avi"},
- Type = DlnaProfileType.Video,
- MimeType = "avi"
- },
- new DirectPlayProfile
- {
- Containers = new[]{"mp4"},
- Type = DlnaProfileType.Video,
- MimeType = "mp4"
- }
- }
- });
- #endregion
- #region Panasonic
- list.Add(new DeviceProfile
- {
- //Panasonic Viera (2011|2012) Without AVI Support
- Name = "Panasonic Viera E/S/ST/VT (2011)",
- ClientType = "DLNA",
- FriendlyName = @"(VIERA (E|S)T?(3|5)0?.*)|(VIERA VT30.*)",
- Manufacturer = "Panasonic",
- TranscodingProfiles = new[]
- {
- new TranscodingProfile
- {
- Container = "mp3",
- Type = DlnaProfileType.Audio
- },
- new TranscodingProfile
- {
- Container = "ts",
- Type = DlnaProfileType.Video
- }
- },
- DirectPlayProfiles = new[]
- {
- new DirectPlayProfile
- {
- Containers = new[]{"mp3"},
- Type = DlnaProfileType.Audio
- },
- new DirectPlayProfile
- {
- Containers = new[]{"mkv"},
- Type = DlnaProfileType.Video
- }
- }
- });
- list.Add(new DeviceProfile
- {
- //Panasonic Viera (2011|2012) With AVI Support
- Name = "Panasonic Viera G/GT/DT/UT/VT (2011/2012)",
- ClientType = "DLNA",
- FriendlyName = @"(VIERA (G|D|U)T?(3|5)0?.*)|(VIERA VT50.*)",
- Manufacturer = "Panasonic",
- TranscodingProfiles = new[]
- {
- new TranscodingProfile
- {
- Container = "mp3",
- Type = DlnaProfileType.Audio
- },
- new TranscodingProfile
- {
- Container = "ts",
- Type = DlnaProfileType.Video
- }
- },
- DirectPlayProfiles = new[]
- {
- new DirectPlayProfile
- {
- Containers = new[]{"mp3"},
- Type = DlnaProfileType.Audio
- },
- new DirectPlayProfile
- {
- Containers = new[]{"mkv"},
- Type = DlnaProfileType.Video
- },
- new DirectPlayProfile
- {
- Containers = new[]{"avi"},
- Type = DlnaProfileType.Video ,
- MimeType="divx"
- }
- }
- });
- #endregion
- //WDTV does not need any transcoding of the formats we support statically
- list.Add(new DeviceProfile
- {
- Name = "Philips (2010-)",
- FriendlyName = ".*PHILIPS.*",
- ClientType = "DLNA",
- ModelName = "WD TV HD Live",
- DirectPlayProfiles = new[]
- {
- new DirectPlayProfile
- {
- Containers = new[]{"mp3", "wma"},
- Type = DlnaProfileType.Audio
- },
- new DirectPlayProfile
- {
- Containers = new[]{"avi"},
- Type = DlnaProfileType.Video,
- MimeType = "avi"
- },
- new DirectPlayProfile
- {
- Containers = new[]{"mkv"},
- Type = DlnaProfileType.Video,
- MimeType = "x-matroska"
- }
- }
- });
- //WDTV does not need any transcoding of the formats we support statically
- list.Add(new DeviceProfile
- {
- Name = "WDTV Live",
- ClientType = "DLNA",
- ModelName = "WD TV HD Live",
- DirectPlayProfiles = new[]
- {
- new DirectPlayProfile
- {
- Containers = new[]{"mp3", "flac", "m4a", "wma"},
- Type = DlnaProfileType.Audio
- },
- new DirectPlayProfile
- {
- Containers = new[]{"avi", "mp4", "mkv", "ts"},
- Type = DlnaProfileType.Video
- }
- }
- });
- list.Add(new DeviceProfile
- {
- //Linksys DMA2100us does not need any transcoding of the formats we support statically
- Name = "Linksys DMA2100",
- ClientType = "DLNA",
- ModelName = "DMA2100us",
- DirectPlayProfiles = new[]
- {
- new DirectPlayProfile
- {
- Containers = new[]{"mp3", "flac", "m4a", "wma"},
- Type = DlnaProfileType.Audio
- },
- new DirectPlayProfile
- {
- Containers = new[]{"avi", "mp4", "mkv", "ts"},
- Type = DlnaProfileType.Video
- }
- }
- });
- list.Add(new DeviceProfile
- {
- Name = "Denon AVR",
- FriendlyName = @"Denon:\[AVR:.*",
- Manufacturer = "Denon",
- ClientType = "DLNA",
- DirectPlayProfiles = new[]
- {
- new DirectPlayProfile
- {
- Containers = new[]{"mp3", "flac", "m4a", "wma"},
- Type = DlnaProfileType.Audio
- },
- }
- });
- foreach (var item in list)
- {
- //_xmlSerializer.SerializeToFile(item, "d:\\" + _fileSystem.GetValidFilename(item.Name));
- }
- return list;
- }
- public DeviceProfile GetDefaultProfile()
- {
- return new DeviceProfile
- {
- TranscodingProfiles = new[]
- {
- new TranscodingProfile
- {
- Container = "mp3",
- Type = DlnaProfileType.Audio
- },
- new TranscodingProfile
- {
- Container = "ts",
- Type = DlnaProfileType.Video
- }
- },
- DirectPlayProfiles = new[]
- {
- new DirectPlayProfile
- {
- Containers = new[]{"mp3", "wma"},
- Type = DlnaProfileType.Audio
- },
- new DirectPlayProfile
- {
- Containers = new[]{"avi", "mp4"},
- Type = DlnaProfileType.Video
- }
- }
- };
- }
- public DeviceProfile GetProfile(string friendlyName, string modelName, string modelNumber, string manufacturer)
- {
- foreach (var profile in GetProfiles())
- {
- if (!string.IsNullOrEmpty(profile.FriendlyName))
- {
- if (!Regex.IsMatch(friendlyName, profile.FriendlyName))
- continue;
- }
- if (!string.IsNullOrEmpty(profile.ModelNumber))
- {
- if (!Regex.IsMatch(modelNumber, profile.ModelNumber))
- continue;
- }
- if (!string.IsNullOrEmpty(profile.ModelName))
- {
- if (!Regex.IsMatch(modelName, profile.ModelName))
- continue;
- }
- if (!string.IsNullOrEmpty(profile.Manufacturer))
- {
- if (!Regex.IsMatch(manufacturer, profile.Manufacturer))
- continue;
- }
- return profile;
- }
- return GetDefaultProfile();
- }
- }
- }
|