IIS请求视频文件的问题

IIS请求视频文件的问题
我的服务器上有很多视频文件,我希望通过视频url,请求视频的时候,
视频长度小于5分钟的视频,正常展示,大于5分钟的视频,只展示前5分钟。可以这样操作么?

可以通过以下方式实现:

1.打开 Internet Information Services(IIS)管理器,找到你的网站,右键单击该网站,选择“添加应用程序”。
2.在“添加应用程序”对话框中,指定别名、应用程序池和物理路径等相关信息,然后单击“确定”按钮。
3.在应用程序的物理路径中,创建一个名为“Media”的文件夹,用于存放媒体文件。
4.在 IIS 中为该文件夹添加 MIME 类型,以便服务器能够正确地识别媒体文件的格式。例如,你可以添加以下 MIME 类型:
.mp4 video/mp4
.mov video/quicktime
.avi video/x-msvideo
.wmv video/x-ms-wmv
5.创建一个名为“StreamVideo.aspx”的 ASP.NET 网页,用于流式传输媒体文件。该网页可以使用以下代码实现:

<%@ Page Language="C#" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Web" %>
<%@ Import Namespace="System.Web.UI" %>
<%@ Import Namespace="System.Web.UI.WebControls" %>

<script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {
        string filePath = Request.QueryString["file"];
        if (filePath != null)
        {
            string fileName = Path.GetFileName(filePath);
            string extension = Path.GetExtension(filePath);
            string contentType = "";
            switch (extension)
            {
                case ".mp4":
                    contentType = "video/mp4";
                    break;
                case ".mov":
                    contentType = "video/quicktime";
                    break;
                case ".avi":
                    contentType = "video/x-msvideo";
                    break;
                case ".wmv":
                    contentType = "video/x-ms-wmv";
                    break;
                default:
                    Response.StatusCode = 404;
                    Response.End();
                    break;
            }
            Response.Clear();
            Response.ClearContent();
            Response.ClearHeaders();
            Response.Buffer = false;
            Response.ContentType = contentType;
            Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
            using (FileStream fileStream = new FileStream(Server.MapPath(filePath), FileMode.Open, FileAccess.Read))
            {
                long length = fileStream.Length;
                long startBytes = 0;
                int packSize = 1024 * 8; //10kb
                if (Request.Headers["Range"] != null)
                {
                    Response.StatusCode = 206;
                    string[] range = Request.Headers["Range"].Split(new char[] { '=', '-' });
                    startBytes = Convert.ToInt64(range[1]);
                }
                Response.AddHeader("Content-Length", (length - startBytes).ToString());
                Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, length - 1, length));
                fileStream.Seek(startBytes, SeekOrigin.Begin);
                int maxCount = (int)Math.Ceiling((length - startBytes + 0.0) / packSize);
                for (int i = 0; i < maxCount && Response.IsClientConnected; i++)
                {
                    Response.BinaryWrite(fileStream.ReadBytes(packSize));
                }
            }
            Response.Flush();
            Response.End();
        }
        else
        {
            Response.StatusCode = 404;
            Response.End();
        }
    }
</script>

6.可以通过以下格式请求媒体文件:

http:////StreamVideo.aspx?file=

其中, 是指你的服务器地址, 是指你的网站名称, 是指你要请求的媒体文件相对于 Media 文件夹的路径。

例如,如果你的服务器地址为 192.168.1.100,你的网站名称为 MyWebsite,你的媒体文件位于 Media 文件夹下的 video.mp4 文件,那么你可以使用以下 URL 请求该文件:

http://192.168.1.100/MyWebsite/StreamVideo.aspx?file=Media/video.mp4

请注意,在这个例子中,媒体文件的路径相对于 StreamVideo.aspx 文件的位置。因此,如果你的 StreamVideo.aspx 文件不是位于网站根目录下,你需要在文件路径前面添加适当的路径。

可以通过以下方式来实现您所述的操作:

1.在 IIS 中,打开网站或应用程序的 Web.config 文件,然后找到或添加以下内容:

<system.webServer>
  <staticContent>
    <mimeMap fileExtension=".mp4" mimeType="video/mp4" />
  </staticContent>
  <handlers>
    <add name="MP4" path="*.mp4" verb="GET" type="System.Web.StaticFileHandler" modules="StaticFileModule" />
  </handlers>
</system.webServer>

这将确保 MP4 文件的 MIME 类型正确设置,并且该文件将被处理为静态文件。

1.创建一个名为 "playVideo.aspx" 的新文件,并添加以下代码:

<%@ Page Language="C#" %>
<script runat="server">
void Page_Load(object sender, EventArgs e)
{
    // 获取视频文件的完整路径
    string videoPath = Server.MapPath(Request.QueryString["video"]);

    // 使用 FileInfo 类获取文件信息
    System.IO.FileInfo video = new System.IO.FileInfo(videoPath);

    // 检查文件是否存在
    if (!video.Exists)
    {
        Response.StatusCode = 404;
        Response.StatusDescription = "Video Not Found";
        Response.End();
    }

    // 获取视频长度
    TimeSpan videoLength = new TimeSpan();
    using (var shell = new Shell32.Shell())
    {
        var folder = shell.NameSpace(System.IO.Path.GetDirectoryName(video.FullName));
        var file = folder.ParseName(System.IO.Path.GetFileName(video.FullName));
        var lengthProperty = folder.GetDetailsOf(file, 27);
        videoLength = TimeSpan.FromSeconds(double.Parse(lengthProperty));
    }

    // 如果视频长度小于等于5分钟,直接输出整个视频
    if (videoLength.TotalMinutes <= 5)
    {
        Response.ContentType = "video/mp4";
        Response.WriteFile(video.FullName);
    }
    else
    {
        // 否则只输出前5分钟
        Response.ContentType = "video/mp4";
        Response.WriteFileRange(video.FullName, 0, (long)(5 * 60 * 1000 * 10000 - 1));
        Response.AppendHeader("Content-Range", "bytes 0-" + (5 * 60 * 1000 * 10000 - 1) + "/" + video.Length);
    }
}
</script>

此代码将为您处理视频文件请求,并根据视频长度决定是输出整个视频还是仅输出前5分钟。

  1. 在您的 HTML 页面中,使用以下代码来引用视频:
    ```html

```
请注意,"path/to/your/video.mp4" 应替换为实际视频文件的路径。