|
|
|
#pragma warning disable CS1591
|
|
|
|
|
|
|
|
using MediaBrowser.Model.Dlna;
|
|
|
|
|
|
|
|
namespace Emby.Dlna.Profiles
|
|
|
|
{
|
|
|
|
[System.Xml.Serialization.XmlRoot("Profile")]
|
|
|
|
public class DishHopperJoeyProfile : DefaultProfile
|
|
|
|
{
|
|
|
|
public DishHopperJoeyProfile()
|
|
|
|
{
|
|
|
|
Name = "Dish Hopper-Joey";
|
|
|
|
|
|
|
|
ProtocolInfo = "http-get:*:video/mp2t:*,http-get:*:video/mpeg:*,http-get:*:video/MP1S:*,http-get:*:video/mpeg2:*,http-get:*:video/mp4:*,http-get:*:video/x-matroska:*,http-get:*:audio/mpeg:*,http-get:*:audio/mpeg3:*,http-get:*:audio/mp3:*,http-get:*:audio/mp4:*,http-get:*:audio/mp4a-latm:*,http-get:*:image/jpeg:*";
|
|
|
|
|
|
|
|
Identification = new DeviceIdentification
|
|
|
|
{
|
|
|
|
Manufacturer = "Echostar Technologies LLC",
|
|
|
|
ManufacturerUrl = "http://www.echostar.com",
|
|
|
|
|
|
|
|
Headers = new[]
|
|
|
|
{
|
|
|
|
new HttpHeaderInfo
|
|
|
|
{
|
|
|
|
Match = HeaderMatchType.Substring,
|
|
|
|
Name = "User-Agent",
|
|
|
|
Value = "Zip_"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
TranscodingProfiles = new[]
|
|
|
|
{
|
|
|
|
new TranscodingProfile
|
|
|
|
{
|
|
|
|
Container = "mp3",
|
|
|
|
AudioCodec = "mp3",
|
|
|
|
Type = DlnaProfileType.Audio
|
|
|
|
},
|
|
|
|
new TranscodingProfile
|
|
|
|
{
|
|
|
|
Container = "mp4",
|
|
|
|
Type = DlnaProfileType.Video,
|
|
|
|
AudioCodec = "aac",
|
|
|
|
VideoCodec = "h264"
|
|
|
|
},
|
|
|
|
|
|
|
|
new TranscodingProfile
|
|
|
|
{
|
|
|
|
Container = "jpeg",
|
|
|
|
Type = DlnaProfileType.Photo
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
DirectPlayProfiles = new[]
|
|
|
|
{
|
|
|
|
new DirectPlayProfile
|
|
|
|
{
|
|
|
|
Container = "mp4,mkv,mpeg,ts",
|
|
|
|
VideoCodec = "h264,mpeg2video",
|
|
|
|
AudioCodec = "mp3,ac3,aac,he-aac,pcm",
|
|
|
|
Type = DlnaProfileType.Video
|
|
|
|
},
|
|
|
|
|
|
|
|
new DirectPlayProfile
|
|
|
|
{
|
|
|
|
Container = "mp3,alac,flac",
|
|
|
|
Type = DlnaProfileType.Audio
|
|
|
|
},
|
|
|
|
|
|
|
|
new DirectPlayProfile
|
|
|
|
{
|
|
|
|
Container = "jpeg",
|
|
|
|
Type = DlnaProfileType.Photo
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
CodecProfiles = new[]
|
|
|
|
{
|
|
|
|
new CodecProfile
|
|
|
|
{
|
|
|
|
Type = CodecType.Video,
|
|
|
|
Codec = "h264",
|
|
|
|
Conditions = new[]
|
|
|
|
{
|
|
|
|
new ProfileCondition
|
|
|
|
{
|
|
|
|
Condition = ProfileConditionType.LessThanEqual,
|
|
|
|
Property = ProfileConditionValue.Width,
|
|
|
|
Value = "1920",
|
|
|
|
IsRequired = true
|
|
|
|
},
|
|
|
|
new ProfileCondition
|
|
|
|
{
|
|
|
|
Condition = ProfileConditionType.LessThanEqual,
|
|
|
|
Property = ProfileConditionValue.Height,
|
|
|
|
Value = "1080",
|
|
|
|
IsRequired = true
|
|
|
|
},
|
|
|
|
new ProfileCondition
|
|
|
|
{
|
|
|
|
Condition = ProfileConditionType.LessThanEqual,
|
|
|
|
Property = ProfileConditionValue.VideoFramerate,
|
|
|
|
Value = "30",
|
|
|
|
IsRequired = true
|
|
|
|
},
|
|
|
|
new ProfileCondition
|
|
|
|
{
|
|
|
|
Condition = ProfileConditionType.LessThanEqual,
|
|
|
|
Property = ProfileConditionValue.VideoBitrate,
|
|
|
|
Value = "20000000",
|
|
|
|
IsRequired = true
|
|
|
|
},
|
|
|
|
new ProfileCondition
|
|
|
|
{
|
|
|
|
Condition = ProfileConditionType.LessThanEqual,
|
|
|
|
Property = ProfileConditionValue.VideoLevel,
|
|
|
|
Value = "41",
|
|
|
|
IsRequired = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
new CodecProfile
|
|
|
|
{
|
|
|
|
Type = CodecType.Video,
|
|
|
|
Conditions = new[]
|
|
|
|
{
|
|
|
|
new ProfileCondition
|
|
|
|
{
|
|
|
|
Condition = ProfileConditionType.LessThanEqual,
|
|
|
|
Property = ProfileConditionValue.Width,
|
|
|
|
Value = "1920",
|
|
|
|
IsRequired = true
|
|
|
|
},
|
|
|
|
new ProfileCondition
|
|
|
|
{
|
|
|
|
Condition = ProfileConditionType.LessThanEqual,
|
|
|
|
Property = ProfileConditionValue.Height,
|
|
|
|
Value = "1080",
|
|
|
|
IsRequired = true
|
|
|
|
},
|
|
|
|
new ProfileCondition
|
|
|
|
{
|
|
|
|
Condition = ProfileConditionType.LessThanEqual,
|
|
|
|
Property = ProfileConditionValue.VideoFramerate,
|
|
|
|
Value = "30",
|
|
|
|
IsRequired = true
|
|
|
|
},
|
|
|
|
new ProfileCondition
|
|
|
|
{
|
|
|
|
Condition = ProfileConditionType.LessThanEqual,
|
|
|
|
Property = ProfileConditionValue.VideoBitrate,
|
|
|
|
Value = "20000000",
|
|
|
|
IsRequired = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
new CodecProfile
|
|
|
|
{
|
|
|
|
Type = CodecType.VideoAudio,
|
|
|
|
Codec = "ac3,he-aac",
|
|
|
|
Conditions = new[]
|
|
|
|
{
|
|
|
|
new ProfileCondition
|
|
|
|
{
|
|
|
|
Condition = ProfileConditionType.LessThanEqual,
|
|
|
|
Property = ProfileConditionValue.AudioChannels,
|
|
|
|
Value = "6",
|
|
|
|
IsRequired = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
new CodecProfile
|
|
|
|
{
|
|
|
|
Type = CodecType.VideoAudio,
|
|
|
|
Codec = "aac",
|
|
|
|
Conditions = new[]
|
|
|
|
{
|
|
|
|
new ProfileCondition
|
|
|
|
{
|
|
|
|
Condition = ProfileConditionType.LessThanEqual,
|
|
|
|
Property = ProfileConditionValue.AudioChannels,
|
|
|
|
Value = "2",
|
|
|
|
IsRequired = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
new CodecProfile
|
|
|
|
{
|
|
|
|
Type = CodecType.VideoAudio,
|
|
|
|
Conditions = new[]
|
|
|
|
{
|
|
|
|
// The device does not have any audio switching capabilities
|
|
|
|
new ProfileCondition
|
|
|
|
{
|
|
|
|
Condition = ProfileConditionType.Equals,
|
|
|
|
Property = ProfileConditionValue.IsSecondaryAudio,
|
|
|
|
Value = "false"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
ResponseProfiles = new[]
|
|
|
|
{
|
|
|
|
new ResponseProfile
|
|
|
|
{
|
|
|
|
Container = "mkv,ts,mpegts",
|
|
|
|
Type = DlnaProfileType.Video,
|
|
|
|
MimeType = "video/mp4"
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
SubtitleProfiles = new[]
|
|
|
|
{
|
|
|
|
new SubtitleProfile
|
|
|
|
{
|
|
|
|
Format = "srt",
|
|
|
|
Method = SubtitleDeliveryMethod.Embed
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|