Exemple #1
0
            internal static M3UElement[] ReadM3uElement(M3UPlaylist m3UPlaylist, string[] tcontent, string basepath, ReaderConfiguration config, int activeDepth)
            {
                List <M3UElement> tReturn = new List <M3UElement>();

                List <string> tElement = new List <string>();
                int           index    = 0;

                while (index < tcontent.Length)
                {
                    string line = tcontent[index].Trim();
                    tElement.Add(line);
                    if (!line.StartsWith("#"))
                    {
                        //An M3Ux Element is found
                        string sline = tElement[0].Trim();
                        if (sline.StartsWith(Constantes.M3U_INFO_MARKER))
                        {
                            tReturn.Add(M3UElement.Read(tElement.ToArray(), basepath, config, activeDepth + 1));
                        }
                        else if (sline.StartsWith(Constantes.M3U8_INFO_MARKER))
                        {
                            tReturn.Add(M3U8Element.Read(tElement.ToArray(), basepath, config, activeDepth + 1));
                        }
                        tElement = new List <string>();
                    }
                    index++;
                }

                if (m3UPlaylist != null)
                {
                    m3UPlaylist.AddRange(tReturn.ToArray());
                }
                return(tReturn.ToArray());
            }
Exemple #2
0
            internal static M3UElement Read(string[] tContent, string basepath, ReaderConfiguration config, int activeDepth)
            {
                M3UElement oReturn = new M3UElement(activeDepth);

                if (tContent.Length > 1)
                {
                    oReturn.Path = tContent[tContent.Length - 1];
                    Helper.ConvertRelative2Absolute(basepath, oReturn);
                }
                else if (tContent.Length == 1)
                {
                    oReturn.Path = tContent[0];
                    Helper.ConvertRelative2Absolute(basepath, oReturn);
                }

                oReturn.Options = new System.Collections.Hashtable();
                if (tContent[0].StartsWith(Constantes.M3U_INFO_MARKER))
                {
                    string[] tOptions = tContent[0].Replace(Constantes.M3U_INFO_MARKER + ":", "").Split(',');

                    if (tOptions.Length > 0)
                    {
                        oReturn.Options.Add("LENGHT", tOptions[0].Trim());
                    }

                    if (tOptions.Length > 1)
                    {
                        oReturn.Options.Add("INFOS", tOptions[1].Trim());
                    }

                    tOptions = null;
                }

                //Try Recursive.
                if (oReturn.Path.ToLower().Contains("m3u") && config.Depth > activeDepth)
                {
                    string sChilds   = Helper.GetWebData(oReturn.Path);
                    string sbasepath = Helper.GetWebBasePath(oReturn.Path);

                    int      contentPosition = 0;
                    string[] fullcontent     = sChilds.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);

                    //Analysing Playlist Options
                    for (int idx = 1; idx < fullcontent.Length; idx++)
                    {
                        string sline = fullcontent[idx].Trim();
                        if (sline.StartsWith("#EXT") && sline.Contains(":") && (!sline.StartsWith(Constantes.M3U8_INFO_MARKER) && !sline.StartsWith(Constantes.M3U_INFO_MARKER) && !sline.Contains("EXTVLCOPT")))
                        {
                            Helper.ReadOptions(sline, oReturn.Options);
                            contentPosition = idx;
                        }
                    }


                    List <M3UComponent> childs         = new List <M3UComponent>();
                    string[]            contentStreams = fullcontent.Where((x, idx) => idx > contentPosition).ToArray();
                    childs.AddRange(Helper.ReadM3uElement(contentStreams, sbasepath, config, 0));
                    if (childs.Count > 0)
                    {
                        oReturn.AddRange(childs);
                    }

                    fullcontent = null;
                }

                return(oReturn);
            }