using MediaBrowser.Model.Entities; using ProtoBuf; using System.Collections.Generic; namespace MediaBrowser.Controller.MediaInfo { /// /// Provides a class that we can use to deserialize the ffprobe json output /// Sample output: /// http://stackoverflow.com/questions/7708373/get-ffmpeg-information-in-friendly-way /// [ProtoContract] public class FFProbeResult { /// /// Gets or sets the streams. /// /// The streams. [ProtoMember(1)] public FFProbeMediaStreamInfo[] streams { get; set; } /// /// Gets or sets the format. /// /// The format. [ProtoMember(2)] public FFProbeMediaFormatInfo format { get; set; } [ProtoMember(3)] public List Chapters { get; set; } } /// /// Represents a stream within the output /// [ProtoContract] public class FFProbeMediaStreamInfo { /// /// Gets or sets the index. /// /// The index. [ProtoMember(1)] public int index { get; set; } /// /// Gets or sets the profile. /// /// The profile. [ProtoMember(2)] public string profile { get; set; } /// /// Gets or sets the codec_name. /// /// The codec_name. [ProtoMember(3)] public string codec_name { get; set; } /// /// Gets or sets the codec_long_name. /// /// The codec_long_name. [ProtoMember(4)] public string codec_long_name { get; set; } /// /// Gets or sets the codec_type. /// /// The codec_type. [ProtoMember(5)] public string codec_type { get; set; } /// /// Gets or sets the sample_rate. /// /// The sample_rate. [ProtoMember(6)] public string sample_rate { get; set; } /// /// Gets or sets the channels. /// /// The channels. [ProtoMember(7)] public int channels { get; set; } /// /// Gets or sets the avg_frame_rate. /// /// The avg_frame_rate. [ProtoMember(8)] public string avg_frame_rate { get; set; } /// /// Gets or sets the duration. /// /// The duration. [ProtoMember(9)] public string duration { get; set; } /// /// Gets or sets the bit_rate. /// /// The bit_rate. [ProtoMember(10)] public string bit_rate { get; set; } /// /// Gets or sets the width. /// /// The width. [ProtoMember(11)] public int width { get; set; } /// /// Gets or sets the height. /// /// The height. [ProtoMember(12)] public int height { get; set; } /// /// Gets or sets the display_aspect_ratio. /// /// The display_aspect_ratio. [ProtoMember(13)] public string display_aspect_ratio { get; set; } /// /// Gets or sets the tags. /// /// The tags. [ProtoMember(14)] public Dictionary tags { get; set; } /// /// Gets or sets the bits_per_sample. /// /// The bits_per_sample. [ProtoMember(17)] public int bits_per_sample { get; set; } /// /// Gets or sets the r_frame_rate. /// /// The r_frame_rate. [ProtoMember(18)] public string r_frame_rate { get; set; } /// /// Gets or sets the has_b_frames. /// /// The has_b_frames. [ProtoMember(19)] public int has_b_frames { get; set; } /// /// Gets or sets the sample_aspect_ratio. /// /// The sample_aspect_ratio. [ProtoMember(20)] public string sample_aspect_ratio { get; set; } /// /// Gets or sets the pix_fmt. /// /// The pix_fmt. [ProtoMember(21)] public string pix_fmt { get; set; } /// /// Gets or sets the level. /// /// The level. [ProtoMember(22)] public int level { get; set; } /// /// Gets or sets the time_base. /// /// The time_base. [ProtoMember(23)] public string time_base { get; set; } /// /// Gets or sets the start_time. /// /// The start_time. [ProtoMember(24)] public string start_time { get; set; } /// /// Gets or sets the codec_time_base. /// /// The codec_time_base. [ProtoMember(25)] public string codec_time_base { get; set; } /// /// Gets or sets the codec_tag. /// /// The codec_tag. [ProtoMember(26)] public string codec_tag { get; set; } /// /// Gets or sets the codec_tag_string. /// /// The codec_tag_string. [ProtoMember(27)] public string codec_tag_string { get; set; } /// /// Gets or sets the sample_fmt. /// /// The sample_fmt. [ProtoMember(28)] public string sample_fmt { get; set; } /// /// Gets or sets the dmix_mode. /// /// The dmix_mode. [ProtoMember(29)] public string dmix_mode { get; set; } /// /// Gets or sets the start_pts. /// /// The start_pts. [ProtoMember(30)] public string start_pts { get; set; } /// /// Gets or sets the is_avc. /// /// The is_avc. [ProtoMember(31)] public string is_avc { get; set; } /// /// Gets or sets the nal_length_size. /// /// The nal_length_size. [ProtoMember(32)] public string nal_length_size { get; set; } /// /// Gets or sets the ltrt_cmixlev. /// /// The ltrt_cmixlev. [ProtoMember(33)] public string ltrt_cmixlev { get; set; } /// /// Gets or sets the ltrt_surmixlev. /// /// The ltrt_surmixlev. [ProtoMember(34)] public string ltrt_surmixlev { get; set; } /// /// Gets or sets the loro_cmixlev. /// /// The loro_cmixlev. [ProtoMember(35)] public string loro_cmixlev { get; set; } /// /// Gets or sets the loro_surmixlev. /// /// The loro_surmixlev. [ProtoMember(36)] public string loro_surmixlev { get; set; } /// /// Gets or sets the disposition. /// /// The disposition. [ProtoMember(37)] public Dictionary disposition { get; set; } } /// /// Class MediaFormat /// [ProtoContract] public class FFProbeMediaFormatInfo { /// /// Gets or sets the filename. /// /// The filename. [ProtoMember(1)] public string filename { get; set; } /// /// Gets or sets the nb_streams. /// /// The nb_streams. [ProtoMember(2)] public int nb_streams { get; set; } /// /// Gets or sets the format_name. /// /// The format_name. [ProtoMember(3)] public string format_name { get; set; } /// /// Gets or sets the format_long_name. /// /// The format_long_name. [ProtoMember(4)] public string format_long_name { get; set; } /// /// Gets or sets the start_time. /// /// The start_time. [ProtoMember(5)] public string start_time { get; set; } /// /// Gets or sets the duration. /// /// The duration. [ProtoMember(6)] public string duration { get; set; } /// /// Gets or sets the size. /// /// The size. [ProtoMember(7)] public string size { get; set; } /// /// Gets or sets the bit_rate. /// /// The bit_rate. [ProtoMember(8)] public string bit_rate { get; set; } /// /// Gets or sets the tags. /// /// The tags. [ProtoMember(9)] public Dictionary tags { get; set; } } }