示例#1
0
        private static List <YDLVideoFormatEntry> ProcessFormatList(YDLFormatList formatList)
        {
            var list          = new List <YDLVideoFormatEntry>();
            var videoOnlyList = new List <YDLFormat>();
            var audioOnlyList = new List <YDLFormat>();

            foreach (var format in formatList.Formats)
            {
                var acodec = GetStringValue(format.Acodec);
                var vcodec = GetStringValue(format.Vcodec);
                if ((vcodec == null && acodec == null) ||
                    (vcodec != null && acodec != null))
                {
                    list.Add(new YDLVideoFormatEntry
                    {
                        VideoUrl        = format.Url,
                        VideoFragments  = format.Fragments,
                        Title           = formatList.Title,
                        YDLEntryType    = GetEntryType(format),
                        VideoFormat     = format.Format,
                        FileExt         = format.Ext,
                        VideoCodec      = format.Vcodec,
                        AudioCodec      = format.Acodec,
                        Abr             = format.Abr,
                        Width           = format.Width,
                        Height          = format.Height,
                        FragmentBaseUrl = format.Fragment_Base_Url
                    });
                }
                else if (vcodec != null)
                {
                    videoOnlyList.Add(format);
                }
                else if (acodec != null)
                {
                    audioOnlyList.Add(format);
                }
            }

            foreach (var video in videoOnlyList)
            {
                var videotype = GetEntryType(video);
                foreach (var audio in audioOnlyList)
                {
                    var audioType = GetEntryType(audio);
                    if (videotype == audioType)
                    {
                        list.Add(new YDLVideoFormatEntry
                        {
                            AudioFormat     = audio.Format,
                            VideoFormat     = video.Format,
                            AudioFragments  = audio.Fragments,
                            VideoFragments  = video.Fragments,
                            AudioUrl        = audio.Url,
                            VideoUrl        = video.Url,
                            Title           = formatList.Title,
                            YDLEntryType    = videotype,
                            FileExt         = "MKV",
                            VideoCodec      = video.Vcodec,
                            AudioCodec      = audio.Acodec,
                            Abr             = audio.Abr,
                            Width           = video.Width,
                            Height          = video.Height,
                            FragmentBaseUrl = video.Fragment_Base_Url
                        });
                    }
                }
            }

            if (list.Count == 0)
            {
                foreach (var audio in audioOnlyList)
                {
                    var audioType = GetEntryType(audio);
                    list.Add(new YDLVideoFormatEntry
                    {
                        AudioFormat     = audio.Format,
                        AudioFragments  = audio.Fragments,
                        AudioUrl        = audio.Url,
                        Title           = formatList.Title,
                        YDLEntryType    = audioType,
                        FileExt         = audio.Ext,
                        AudioCodec      = audio.Acodec,
                        Abr             = audio.Abr,
                        FragmentBaseUrl = audio.Fragment_Base_Url
                    });
                }
            }

            return(list);
        }
示例#2
0
        public static List <YDLVideoEntry> Parse(string ydlJsonOutputFile)
        {
            var res = new List <YDLVideoEntry>();

            try
            {
                var pl = Deserialize <YDLPlaylist>(ydlJsonOutputFile);

                if (pl.Entries != null && pl.Entries.Length > 0)
                {
                    foreach (var formatList in pl.Entries)
                    {
                        var items = ProcessFormatList(formatList);
                        res.Add(new YDLVideoEntry
                        {
                            Title   = formatList.Title,
                            Formats = items
                        });
                    }
                    return(res);
                }
            }
            catch { }

            try
            {
                var pl2 = Deserialize <YDLFormatList>(ydlJsonOutputFile);

                if (pl2.Formats != null && pl2.Formats.Length > 0)
                {
                    res.Add(new YDLVideoEntry
                    {
                        Title   = pl2.Title,
                        Formats = ProcessFormatList(pl2)
                    });
                }
            }
            catch { }

            try
            {
                var format = Deserialize <YDLFormat>(ydlJsonOutputFile);
                if (format.Url != null)
                {
                    var formatList = new YDLFormatList {
                        Title = format.Title, Formats = new YDLFormat[] { format }
                    };
                    res.Add(new YDLVideoEntry
                    {
                        Title   = format.Title,
                        Formats = ProcessFormatList(formatList)
                    });
                    //res.Add(new YDLVideoEntry
                    //{
                    //    Title = format.Title,
                    //    Formats = new List<YDLVideoFormatEntry>
                    //    {
                    //        new YDLVideoFormatEntry
                    //        {
                    //            VideoUrl = format.Url,
                    //            Title = format.Title,
                    //            YDLEntryType = YDLEntryType.Http,
                    //            VideoFormat = format.Format
                    //        }
                    //    }
                    //});
                }
            }
            catch { }

            return(res);
        }