private string createCellContents(string directURL, string queryStringKey, string queryStringValue, Transcoder transcoder)
        {
            StringBuilder output = new StringBuilder();
            HtmlTextWriter writer = new HtmlTextWriter(new System.IO.StringWriter(output));

            // direct
            HyperLink direct = new HyperLink();
            direct.NavigateUrl = directURL;
            direct.Text = "Direct";
            direct.RenderControl(writer);

            // dynamic stream types
            Dictionary<string, string> pages = new Dictionary<string, string>();
            pages["VLC"] = "VLC.aspx";
            pages["M3U"] = "Playlist.aspx";
            pages["HTML5"] = "HTML5.aspx";

            // and render them
            int i = 1;
            foreach (KeyValuePair<string, string> page in pages) {
                HyperLink link = new HyperLink();
                NameValueCollection queryString = HttpUtility.ParseQueryString(string.Empty);
                queryString["transcoder"] = transcoder.Id.ToString();
                queryString[queryStringKey] = queryStringValue;
                link.NavigateUrl = page.Value + "?" + queryString.ToString();
                link.Text = page.Key;
                output.Append(i % 2 == 1 ? " - " : "<br />");
                link.RenderControl(writer);
                i++;
            }

            return output.ToString();
        }
        private string CreateStreamUrl(string idKey, int idValue, string username, string password, Transcoder transcoder)
        {
            UriBuilder uri;
            try {
                // use HttpContext.Current if available
                string path = System.IO.Path.GetDirectoryName(HttpContext.Current.Request.Url.AbsolutePath);
                uri = new UriBuilder(HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, HttpContext.Current.Request.Url.Port, path);
            } catch (Exception) {
                uri = new UriBuilder(config.SiteRoot);
            }

            // add port if needed
            if (config.UseWebserver && config.Port != 80)
                uri.Port = config.Port;

            // parameters
            NameValueCollection queryString = HttpUtility.ParseQueryString(string.Empty);
            queryString[idKey] = idValue.ToString();
            queryString["transcoder"] = transcoder.Id.ToString();
            if(username != string.Empty && config.EnableAuthentication)
                queryString["login"] = Authentication.createLoginArgument(username, password);

            // create
            if (uri.Path.Substring(uri.Path.Length - 1) != "/")
                uri.Path += "/";
            uri.Path += "Stream.ashx";
            uri.Query = queryString.ToString();
            return uri.ToString();
        }