Как я могу запретить idm скачивать потоковое видео? - PullRequest
0 голосов
/ 26 мая 2019

Я хочу создать сайт для потокового видео!Я помещаю мои видео в папку перед корнем моего сайта, чтобы предотвратить прямой доступ, и я нашел некоторый код для потоковой передачи этих файлов в качестве источника тега видео по файлу ashx.но я не хочу, чтобы idm загружал этот поток.

public void ProcessRequest (контекст HttpContext) {try {bool isValid = false;строка id = context.Request.QueryString ["id"]. ToString ();if (id == "1") {isValid = true;} else {isValid = false;} if (isValid) {string mimetype = "video / mp4";

            string path = HttpContext.Current.Server.MapPath("~");
            string[] paths = path.Split('\\');
            path = "";
            for (int i = 0; i < paths.Length - 2; i++)
            {
                path += paths[i] + "\\";
            }
            path += "MAProjectTestVideos\\";
            string fullpath = path + "2.mp4";

            if (System.IO.File.Exists(fullpath))
            {

                context.Response.ContentType = mimetype;
                if (!String.IsNullOrEmpty(context.Request.ServerVariables["HTTP_RANGE"]))
                {
                    RangeDownload(fullpath, context);
                }
                else
                {
                    long fileLength = File.OpenRead(fullpath).Length;
                    context.Response.AddHeader("Content-Length", fileLength.ToString());
                    context.Response.TransmitFile(fullpath);
                }
            }
            else
            {
                //File Not Found
            }
        }
        else
        {
        }
    }
    catch (Exception)
    {
    }
}

private void RangeDownload(string fullpath, HttpContext context)
{
    try
    {
        long size, start, end, length, fp = 0;
        using (StreamReader reader = new StreamReader(fullpath))
        {

            size = reader.BaseStream.Length;
            start = 0;
            end = size - 1;
            length = size;

            context.Response.AddHeader("Accept-Ranges", "0-" + size);

            if (!String.IsNullOrEmpty(context.Request.ServerVariables["HTTP_RANGE"]))
            {
                long anotherStart = start;
                long anotherEnd = end;
                string[] arr_split = context.Request.ServerVariables["HTTP_RANGE"].Split(new char[] { Convert.ToChar("=") });
                string range = arr_split[1];

                if (range.IndexOf(",") > -1)
                {
                    context.Response.AddHeader("Content-Range", "bytes " + start + "-" + end + "/" + size);


                }

                if (range.StartsWith("-"))
                {
                    anotherStart = size - Convert.ToInt64(range.Substring(1));
                }
                else
                {
                    arr_split = range.Split(new char[] { Convert.ToChar("-") });
                    anotherStart = Convert.ToInt64(arr_split[0]);
                    long temp = 0;
                    anotherEnd = (arr_split.Length > 1 && Int64.TryParse(arr_split[1].ToString(), out temp)) ? Convert.ToInt64(arr_split[1]) : size;
                }
                anotherEnd = (anotherEnd > end) ? end : anotherEnd;
                if (anotherStart > anotherEnd || anotherStart > size - 1 || anotherEnd >= size)
                {
                    context.Response.AddHeader("Content-Range", "bytes " + start + "-" + end + "/" + size);
                }
                start = anotherStart;
                end = anotherEnd;

                length = end - start + 1;
                fp = reader.BaseStream.Seek(start, SeekOrigin.Begin);
                context.Response.StatusCode = 206;
            }
        }
        context.Response.AddHeader("Content-Range", "bytes " + start + "-" + end + "/" + size);
        context.Response.AddHeader("Content-Length", length.ToString());
        context.Response.TransmitFile(fullpath, fp, length);
        context.Response.End();
    }
    catch (Exception)
    {
    }
}
...