传统 WebForms / MVC (使用 HTML5 <video>

这是最直接、最通用的方法,适用于所有 .NET Web 项目,核心是使用 HTML5 原生的 <video> 标签,并通过 C# 代码将视频文件路径传递给前端。

.net网页中视频本地播放器播放
(图片来源网络,侵删)

核心思想

  1. 后端 (C#):将视频文件存放在项目的特定目录下(如 wwwroot/videos/)。
  2. 后端 (C#):创建一个 Action (MVC) 或 Page (WebForms),该 Action/Page 的职责是返回一个视图,并将视频的 URL 或相对路径传递给视图。
  3. 前端 (HTML/JavaScript):在视图中,使用 <video> 标签,并利用 Razor 语法将后端传递的路径动态设置给 src 属性。

步骤详解

项目准备

  • 创建一个新的 ASP.NET Web 应用(使用 MVC 模板)。
  • wwwroot 文件夹下创建一个名为 videos 的文件夹。
  • 将你的视频文件(my-video.mp4)放入 wwwroot/videos/ 文件夹中。

后端代码 (MVC 示例)

Controllers 文件夹下创建一个控制器,VideoController.cs

using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;
namespace YourAppName.Controllers
{
    public class VideoController : Controller
    {
        // Action 方法,返回一个视图,并传递视频路径
        public IActionResult Player()
        {
            // 获取视频文件的相对路径
            // Path.Combine 是一个好习惯,可以确保路径在不同操作系统下都正确
            string videoPath = "/videos/my-video.mp4"; 
            ViewBag.VideoPath = videoPath; // 使用 ViewBag 将数据传递给视图
            return View();
        }
    }
}
  • WebForms 示例: 在 Pages 文件夹下创建一个 Web 窗体,VideoPlayer.aspx。 在代码后端 VideoPlayer.aspx.cs 中:
    protected void Page_Load(object sender, EventArgs e)
    {
        string videoPath = "/videos/my-video.mp4";
        // 将路径存储在 ViewState 或直接在 Page_Load 中设置控件的属性
    }

前端代码 (Razor View)

Views/Video 文件夹下创建一个视图 Player.cshtml

@{
    ViewData["Title"] = "视频播放器";
}
<h2>本地视频播放器</h2>
<!-- 使用 Razor 语法 @ViewBag.VideoPath 动态设置 src -->
<video width="800" controls autoplay muted>
    <source src="@ViewBag.VideoPath" type="video/mp4">
    您的浏览器不支持 HTML5 视频标签。
</video>
<p>视频文件路径: @ViewBag.VideoPath</p>
  • WebForms 示例 (VideoPlayer.aspx):

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="VideoPlayer.aspx.cs" Inherits="YourAppName.VideoPlayer" %>
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>视频播放器</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <!-- 在 Page_Load 中,你需要通过代码找到这个 Label 并设置其 Text 属性 -->
                <!--  VideoPathLabel.Text = videoPath; -->
                <asp:Label ID="VideoPathLabel" runat="server" Text="" Visible="false"></asp:Label>
                <video width="800" controls>
                    <source src="<%= VideoPathLabel.Text %>" type="video/mp4">
                    您的浏览器不支持 HTML5 视频。
                </video>
            </div>
        </form>
    </body>
    </html>

运行和访问

  • 运行你的 .NET 应用。
  • 在浏览器中访问 https://localhost:xxxx/Video/Player (xxxx 是你的端口号)。

你应该能看到一个功能完整的视频播放器,可以播放你放在 wwwroot/videos 目录下的视频。

.net网页中视频本地播放器播放
(图片来源网络,侵删)

现代 Blazor 方式

Blazor 是 .NET 的现代 Web UI 框架,它允许你使用 C# 而不是 JavaScript 来构建交互式客户端 Web UI,实现本地视频播放非常优雅。

核心思想

Blazor 的组件化思想和数据绑定机制使得这个过程非常简洁,你只需要在组件中放置一个 <video> 标签,并通过 @bind 或直接设置 src 属性即可。

步骤详解

项目准备

  • 创建一个新的 Blazor Server 或 Blazor WebAssembly 应用。

组件代码 (Razor Component)

Pages 文件夹下(或 Shared/Components 文件夹),创建一个名为 VideoPlayer.razor 的组件。

@* VideoPlayer.razor *@
@page "/video-player"
<h3>Blazor 本地视频播放器</h3>
@* 
  直接在 <source> 标签的 src 属性中使用 C# 字符串。
  Blazor 会自动将其渲染到最终的 HTML 中。
*@
<video width="800" controls autoplay muted>
    <source src="/videos/my-video.mp4" type="video/mp4">
    您的浏览器不支持 HTML5 视频标签。
</video>
<p>视频文件路径: /videos/my-video.mp4</p>

更高级的用法:通过参数传递视频路径

.net网页中视频本地播放器播放
(图片来源网络,侵删)

为了让组件更可复用,你可以通过 @parameter 将视频路径作为参数传入。

@* VideoPlayerReusable.razor *@
@* 定义一个参数,用于接收视频源 *@
@parameter string VideoSource { get; set; }
<h3>可复用的视频播放器</h3>
<video width="800" controls autoplay muted>
    <source src="@VideoSource" type="video/mp4">
    您的浏览器不支持 HTML5 视频标签。
</video>
<p>当前播放视频: @VideoSource</p>

然后在其他页面(如 Index.razor)中使用这个组件:

@* Index.razor *@
@page "/"
<h1>欢迎使用 Blazor!</h1>
<p>下面是一个可复用的视频播放器组件:</p>
@* 调用可复用组件,并传入视频路径 *@
<VideoPlayerReusable VideoSource="/videos/another-video.mp4" />

运行和访问

  • 运行 Blazor 应用。
  • 导航到 /video-player 或首页,即可看到视频播放器。

关键点和最佳实践

  1. 视频格式:并非所有浏览器都支持所有视频格式。mp4 (H.264 编码) 是目前兼容性最好的选择,你可以提供多个 <source> 标签来支持不同格式。

    <video controls>
        <source src="video.mp4" type="video/mp4">
        <source src="video.webm" type="video/webm">
        <source src="video.ogv" type="video/ogg">
    </video>
  2. wwwroot 文件夹:在 .NET 中,wwwroot 是网站的“根”文件夹,所有放在这里的静态文件(如 CSS, JS, 图片, 视频)都可以通过 URL 直接访问。wwwroot/videos/my-video.mp4 的 URL /videos/my-video.mp4

  3. 路径

    • 在 C# 代码中构建路径时,使用 Path.Combine 是一个好习惯。
    • 在 HTML 的 src 属性中,路径是相对于网站根目录的,所以以 开头是正确的。
  4. 控件属性

    • controls: 显示播放器控件(播放、暂停、音量、进度条等)。
    • autoplay: 视频加载后自动播放。注意:许多浏览器(特别是移动端)为了节省流量和提升用户体验,会阻止 autoplay,除非视频是静音的 (muted)。
    • muted: 视频静音。
    • width / height: 设置播放器尺寸。
  5. 流式传输 (Streaming):对于非常大的视频文件,直接使用 <video> 标签下载整个文件再播放体验很差,在生产环境中,通常会使用 MPEG-DASHHLS 等流媒体技术。.NET 有一些库(如 NReco.VideoConverter)可以帮助你将视频转换为这些格式,或者你可以使用专门的流媒体服务器(如 Wowza, Media Services)。

特性 传统 MVC/WebForms 现代 Blazor
技术核心 HTML5 <video> + Razor 语法 HTML5 <video> + C# 组件化
实现复杂度 简单,直接 非常简洁,代码量少
可复用性 需要手动创建部分视图或用户控件 天然支持组件化,易于复用
数据绑定 通过 ViewBag, ViewData 或服务器控件事件 强大的 @bind 和 C# 属性绑定
适用场景 所有 .NET Web 项目,特别是已有 MVC/WebForms 项目 新项目,追求现代开发体验,C# 全栈开发

对于新项目,强烈推荐使用 Blazor,它提供了更流畅的开发体验和更强的代码组织能力,对于维护旧项目,传统的 MVC/WebForms 方式依然是可靠且有效的选择。