using MediaBrowser.Model.Dlna ;
using System.Xml.Serialization ;
namespace MediaBrowser.Dlna.Profiles
{
/// <summary>
/// Good info on xbox 360 requirements: https://code.google.com/p/jems/wiki/XBox360Notes
/// </summary>
[XmlRoot("Profile")]
public class Xbox360Profile : DefaultProfile
{
public Xbox360Profile ( )
{
Name = "Xbox 360" ;
// Required according to above
ModelName = "Windows Media Player Sharing" ;
ModelNumber = "12.0" ;
FriendlyName = "${HostName}: 1" ;
ModelUrl = "http://go.microsoft.com/fwlink/?LinkId=105926" ;
Manufacturer = "Microsoft Corporation" ;
ManufacturerUrl = "http://www.microsoft.com" ;
XDlnaDoc = "DMS-1.50" ;
ModelDescription = "Emby : UPnP Media Server" ;
TimelineOffsetSeconds = 40 ;
RequiresPlainFolders = true ;
RequiresPlainVideoItems = true ;
EnableMSMediaReceiverRegistrar = true ;
Identification = new DeviceIdentification
{
ModelName = "Xbox 360" ,
Headers = new [ ]
{
new HttpHeaderInfo { Name = "User-Agent" , Value = "Xbox" , Match = HeaderMatchType . Substring } ,
new HttpHeaderInfo { Name = "User-Agent" , Value = "Xenon" , Match = HeaderMatchType . Substring }
}
} ;
TranscodingProfiles = new [ ]
{
new TranscodingProfile
{
Container = "mp3" ,
AudioCodec = "mp3" ,
Type = DlnaProfileType . Audio
} ,
new TranscodingProfile
{
Container = "asf" ,
VideoCodec = "wmv2" ,
AudioCodec = "wmav2" ,
Type = DlnaProfileType . Video ,
TranscodeSeekInfo = TranscodeSeekInfo . Bytes ,
EstimateContentLength = true
} ,
new TranscodingProfile
{
Container = "jpeg" ,
Type = DlnaProfileType . Photo
}
} ;
DirectPlayProfiles = new [ ]
{
new DirectPlayProfile
{
Container = "avi" ,
VideoCodec = "mpeg4" ,
AudioCodec = "ac3,mp3" ,
Type = DlnaProfileType . Video
} ,
new DirectPlayProfile
{
Container = "avi" ,
VideoCodec = "h264" ,
AudioCodec = "aac" ,
Type = DlnaProfileType . Video
} ,
new DirectPlayProfile
{
Container = "mp4,mov" ,
VideoCodec = "h264,mpeg4" ,
AudioCodec = "aac,ac3" ,
Type = DlnaProfileType . Video
} ,
new DirectPlayProfile
{
Container = "asf" ,
VideoCodec = "wmv2,wmv3,vc1" ,
AudioCodec = "wmav2,wmapro" ,
Type = DlnaProfileType . Video
} ,
new DirectPlayProfile
{
Container = "asf" ,
AudioCodec = "wmav2,wmapro,wmavoice" ,
Type = DlnaProfileType . Audio
} ,
new DirectPlayProfile
{
Container = "mp3" ,
AudioCodec = "mp3" ,
Type = DlnaProfileType . Audio
} ,
new DirectPlayProfile
{
Container = "jpeg" ,
Type = DlnaProfileType . Photo
}
} ;
ResponseProfiles = new [ ]
{
new ResponseProfile
{
Container = "avi" ,
MimeType = "video/avi" ,
Type = DlnaProfileType . Video
}
} ;
ContainerProfiles = new [ ]
{
new ContainerProfile
{
Type = DlnaProfileType . Video ,
Container = "mp4,mov" ,
Conditions = new [ ]
{
new ProfileCondition
{
Condition = ProfileConditionType . Equals ,
Property = ProfileConditionValue . Has64BitOffsets ,
Value = "false" ,
IsRequired = false
}
}
} ,
new ContainerProfile
{
Type = DlnaProfileType . Photo ,
Conditions = new [ ]
{
new ProfileCondition
{
Condition = ProfileConditionType . LessThanEqual ,
Property = ProfileConditionValue . Width ,
Value = "1920"
} ,
new ProfileCondition
{
Condition = ProfileConditionType . LessThanEqual ,
Property = ProfileConditionValue . Height ,
Value = "1080"
}
}
}
} ;
CodecProfiles = new [ ]
{
new CodecProfile
{
Type = CodecType . Video ,
Codec = "mpeg4" ,
Conditions = new [ ]
{
new ProfileCondition
{
Condition = ProfileConditionType . LessThanEqual ,
Property = ProfileConditionValue . Width ,
Value = "1280"
} ,
new ProfileCondition
{
Condition = ProfileConditionType . LessThanEqual ,
Property = ProfileConditionValue . Height ,
Value = "720"
} ,
new ProfileCondition
{
Condition = ProfileConditionType . LessThanEqual ,
Property = ProfileConditionValue . VideoFramerate ,
Value = "30" ,
IsRequired = false
} ,
new ProfileCondition
{
Condition = ProfileConditionType . LessThanEqual ,
Property = ProfileConditionValue . VideoBitrate ,
Value = "5120000" ,
IsRequired = false
}
}
} ,
new CodecProfile
{
Type = CodecType . Video ,
Codec = "h264" ,
Conditions = new [ ]
{
new ProfileCondition
{
Condition = ProfileConditionType . LessThanEqual ,
Property = ProfileConditionValue . Width ,
Value = "1920"
} ,
new ProfileCondition
{
Condition = ProfileConditionType . LessThanEqual ,
Property = ProfileConditionValue . Height ,
Value = "1080"
} ,
new ProfileCondition
{
Condition = ProfileConditionType . LessThanEqual ,
Property = ProfileConditionValue . VideoLevel ,
Value = "41" ,
IsRequired = false
} ,
new ProfileCondition
{
Condition = ProfileConditionType . LessThanEqual ,
Property = ProfileConditionValue . VideoBitrate ,
Value = "10240000" ,
IsRequired = false
}
}
} ,
new CodecProfile
{
Type = CodecType . Video ,
Codec = "wmv2,wmv3,vc1" ,
Conditions = new [ ]
{
new ProfileCondition
{
Condition = ProfileConditionType . LessThanEqual ,
Property = ProfileConditionValue . Width ,
Value = "1920"
} ,
new ProfileCondition
{
Condition = ProfileConditionType . LessThanEqual ,
Property = ProfileConditionValue . Height ,
Value = "1080"
} ,
new ProfileCondition
{
Condition = ProfileConditionType . LessThanEqual ,
Property = ProfileConditionValue . VideoFramerate ,
Value = "30" ,
IsRequired = false
} ,
new ProfileCondition
{
Condition = ProfileConditionType . LessThanEqual ,
Property = ProfileConditionValue . VideoBitrate ,
Value = "15360000" ,
IsRequired = false
}
}
} ,
new CodecProfile
{
Type = CodecType . VideoAudio ,
Codec = "ac3,wmav2,wmapro" ,
Conditions = new [ ]
{
new ProfileCondition
{
Condition = ProfileConditionType . LessThanEqual ,
Property = ProfileConditionValue . AudioChannels ,
Value = "6" ,
IsRequired = false
}
}
} ,
new CodecProfile
{
Type = CodecType . VideoAudio ,
Codec = "aac" ,
Conditions = new [ ]
{
new ProfileCondition
{
Condition = ProfileConditionType . LessThanEqual ,
Property = ProfileConditionValue . AudioChannels ,
Value = "2" ,
IsRequired = false
} ,
new ProfileCondition
{
Condition = ProfileConditionType . Equals ,
Property = ProfileConditionValue . AudioProfile ,
Value = "lc" ,
IsRequired = false
}
}
}
} ;
}
}
}