public void AddVideo(string path)
    {
        Haze.Logger.Log("Adding video file: " + path + "...");
        try {
            //Extract filename
            string[] split     = path.Split(new char[] { '/', '\\' }, StringSplitOptions.RemoveEmptyEntries);
            string   directory = "";
            for (int i = 0; i < split.Length - 1; ++i)
            {
                directory += split[i] + "/";
            }
            split = split[split.Length - 1].Split(new string[] { ".mp4" }, StringSplitOptions.RemoveEmptyEntries);
            string filename = "";
            foreach (string f in split)
            {
                filename += f + ".";
            }
            filename = filename.Substring(0, filename.Length - 1);

            //Is it a guide?
            bool isGuide = false;
            foreach (string suffix in SUFFIXES)
            {
                if (filename.EndsWith(suffix))
                {
                    isGuide = true;
                    break;
                }
            }
            if (isGuide)
            {
                //ok! this is a guide video.

                //get rid of Guide suffix
                string videoName = filename;
                foreach (string suffix in SUFFIXES)
                {
                    if (videoName.EndsWith(suffix))
                    {
                        videoName = videoName.Substring(0, videoName.Length - suffix.Length);
                    }
                }

                VideoSettings settings = new VideoSettings();

                //is it 360 degrees?
                settings.is360 = false;
                if (videoName.StartsWith("360_"))
                {
                    settings.is360 = true;
                    //take the leading "360_" off the display name
                    videoName = videoName.Substring("360_".Length, videoName.Length - "360_".Length);
                    Haze.Logger.Log(videoName + " is 360.");
                }
                else
                {
                    Haze.Logger.Log(videoName + " is 235.");
                }

                //Try to find the associated settings file
                string metaPath = directory + videoName + "Info.json";
                Haze.Logger.Log("Attempting to find metadata file in: " + metaPath);
                if (File.Exists(metaPath))
                {
                    string json = File.ReadAllText(metaPath);
                    settings.meta = JsonUtility.FromJson <VideoSettings.VideoMeta>(json);
                    Haze.Logger.Log("Found metadata file. " + settings.ToString());
                }
                else
                {
                    //try to find it in the persistent data path instead of the sd card root then maybe?
                    metaPath = Application.persistentDataPath + videoName + "Info.json";
                    Haze.Logger.Log("Not found. Attempting to find metadata file in: " + metaPath);
                    if (File.Exists(metaPath))
                    {
                        string json = File.ReadAllText(metaPath);
                        settings.meta = JsonUtility.FromJson <VideoSettings.VideoMeta>(json);
                        Haze.Logger.Log("Found metadata file. " + settings.ToString());
                    }
                    else
                    {
                        //no settings for this video yet.
                        settings.meta = new VideoSettings.VideoMeta();
                        Haze.Logger.Log("Saving metadata... " + settings.ToString());
                        SaveVideoMeta(path, videoName, settings.meta);
                    }
                }

                Haze.Logger.Log("Displaying video: " + videoName);

                GameObject display = Instantiate(videoDisplayPrefab, videoRoot);
                displayedVideos.Add(display.GetComponent <VideoDisplay>().Init(path, videoName, settings.NewSettings));
            }
            else
            {
                //Not a guide. ignore it.
                Haze.Logger.Log("Video " + path + " is not a guide video.");
            }
        } catch (Exception e) {
            //could silently ignore, probably
            Haze.Logger.LogWarning("Video " + path + " cannot be added: " + e);
        }
    }