最简单的方法 - 使用 HTML5 <video>

这是在网页上嵌入视频最基本、最推荐的方法,它不需要任何 JavaScript,现代浏览器都原生支持。

网页mp4播放器源代码
(图片来源网络,侵删)

源代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">简单 MP4 播放器</title>
    <style>
        /* 简单的样式,让视频居中 */
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            background-color: #f0f0f0;
        }
        video {
            max-width: 100%;
            height: auto;
            border: 1px solid #ccc;
            box-shadow: 0 4px 8px rgba(0,0,0,0.1);
        }
    </style>
</head>
<body>
    <video src="your-video-file.mp4" controls width="800">
        <!-- 如果浏览器不支持 video 标签,则显示此段文本 -->
        您的浏览器不支持 HTML5 视频,请升级您的浏览器。
    </video>
</body>
</html>

如何使用

  1. 将上面的代码保存为一个 .html 文件(simple-player.html)。
  2. 准备一个 MP4 视频文件,并将其放在与 .html 文件相同的目录下。
  3. 将代码中的 your-video-file.mp4 替换为你自己的视频文件名。
  4. 用浏览器打开这个 .html 文件即可。

代码解释

  • <video>: 这是 HTML5 中专门用于嵌入视频的标签。
  • src="your-video-file.mp4": 指定视频文件的路径,可以是相对路径(如上例)或绝对 URL(如 https://example.com/path/to/video.mp4)。
  • controls: 这是一个非常重要的属性,它告诉浏览器显示一套默认的播放控件,包括播放/暂停、进度条、音量、全屏等,没有它,视频将无法交互。
  • width="800": 设置视频显示区域的宽度(像素),高度会自动按比例调整。
  • <video> 标签内的文本:如果用户的浏览器太旧,不支持 <video> 标签,就会显示这段文本。

功能更丰富的自定义播放器

如果你想要一个自定义外观、添加额外功能(如自定义播放/暂停按钮、进度条、时间显示等),你就需要使用 JavaScript 来控制 <video> 元素。

源代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">自定义 MP4 播放器</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            background-color: #333;
        }
        .player-container {
            width: 800px;
            background-color: #000;
            box-shadow: 0 4px 15px rgba(0,0,0,0.5);
        }
        video {
            width: 100%;
            display: block; /* 移除视频下方的空隙 */
        }
        .controls {
            background-color: #222;
            padding: 10px;
            display: flex;
            align-items: center;
            gap: 15px; /* 控件之间的间距 */
        }
        button {
            background: none;
            border: none;
            color: white;
            cursor: pointer;
            font-size: 18px;
            outline: none;
        }
        button:hover {
            color: #007bff;
        }
        .progress-container {
            flex-grow: 1; /* 占据剩余空间 */
            height: 8px;
            background-color: #444;
            border-radius: 4px;
            cursor: pointer;
            position: relative;
        }
        .progress {
            height: 100%;
            background-color: #007bff;
            border-radius: 4px;
            width: 0%;
        }
        .time-display {
            color: white;
            font-size: 14px;
            min-width: 100px;
            text-align: right;
        }
    </style>
</head>
<body>
    <div class="player-container">
        <video id="myVideo">
            <source src="your-video-file.mp4" type="video/mp4">
            您的浏览器不支持 HTML5 视频。
        </video>
        <div class="controls">
            <button id="playPauseBtn">▶️</button>
            <div class="progress-container" id="progressContainer">
                <div class="progress" id="progressBar"></div>
            </div>
            <div class="time-display" id="timeDisplay">00:00 / 00:00</div>
        </div>
    </div>
    <script>
        // 获取页面元素
        const video = document.getElementById('myVideo');
        const playPauseBtn = document.getElementById('playPauseBtn');
        const progressBar = document.getElementById('progressBar');
        const progressContainer = document.getElementById('progressContainer');
        const timeDisplay = document.getElementById('timeDisplay');
        // 1. 播放/暂停功能
        function togglePlayPause() {
            if (video.paused) {
                video.play();
                playPauseBtn.textContent = '⏸️'; // 暂停图标
            } else {
                video.pause();
                playPauseBtn.textContent = '▶️'; // 播放图标
            }
        }
        playPauseBtn.addEventListener('click', togglePlayPause);
        // 2. 更新进度条
        function updateProgressBar() {
            // 计算进度百分比
            const percentage = (video.currentTime / video.duration) * 100;
            progressBar.style.width = percentage + '%';
            // 更新时间显示
            const currentMinutes = Math.floor(video.currentTime / 60);
            const currentSeconds = Math.floor(video.currentTime % 60).toString().padStart(2, '0');
            const durationMinutes = Math.floor(video.duration / 60);
            const durationSeconds = Math.floor(video.duration % 60).toString().padStart(2, '0');
            timeDisplay.textContent = `${currentMinutes}:${currentSeconds} / ${durationMinutes}:${durationSeconds}`;
        }
        video.addEventListener('timeupdate', updateProgressBar);
        // 3. 点击进度条跳转
        function setVideoPosition(e) {
            // 计算点击位置相对于进度条总宽度的百分比
            const clickPosition = (e.offsetX / progressContainer.offsetWidth);
            video.currentTime = clickPosition * video.duration;
        }
        progressContainer.addEventListener('click', setVideoPosition);
        // 4. 视频结束时重置按钮
        video.addEventListener('ended', () => {
            playPauseBtn.textContent = '▶️';
            progressBar.style.width = '0%';
        });
    </script>
</body>
</html>

如何使用

与方案一类似,只需将代码保存为 .html 文件,并替换 your-video-file.mp4 为你的视频文件路径,然后用浏览器打开即可。

代码解释

  • HTML 结构:

    • 我们为 <video> 元素添加了 id="myVideo",以便 JavaScript 可以轻松找到它。
    • 创建了自定义的控件容器 .controls,里面包含播放/暂停按钮、进度条容器和时间显示。
    • <source> 标签是 <video> 的子标签,用于提供多种视频格式的备选方案,以提高兼容性。type 属性告诉浏览器文件的格式。
  • CSS 样式:

    网页mp4播放器源代码
    (图片来源网络,侵删)
    • 使用 Flexbox 布局来排列控件,使其美观且对齐。
    • .progress-container 是一个灰色的背景条,代表总时长。
    • .progress 是蓝色的前景条,代表当前播放进度,其宽度会通过 JavaScript 动态改变。
  • JavaScript 逻辑:

    • 获取元素: document.getElementById() 用于获取 HTML 中定义的元素。
    • 播放/暂停 (togglePlayPause): 通过检查 video.paused 属性来判断视频状态,并调用 video.play()video.pause() 方法来控制播放,同时更新按钮图标。
    • 更新进度 (updateProgressBar): timeupdate 事件在视频播放的每一帧都会触发,在这个事件中,我们根据 video.currentTime (当前播放时间) 和 video.duration (总时长) 计算进度百分比,并更新进度条的宽度 style.width,同时格式化并显示时间。
    • 点击跳转 (setVideoPosition): 为进度条容器添加 click 事件,通过计算点击位置 (e.offsetX) 在容器总宽度 (offsetWidth) 中的比例,来设置 video.currentTime,实现视频跳转。
    • 视频结束事件: ended 事件在视频播放完毕后触发,我们用它来重置播放按钮和进度条。

使用成熟的 JavaScript 库(推荐用于生产环境)

对于商业项目,直接编写和维护一个播放器非常耗时,且需要处理各种边缘情况和兼容性问题,使用成熟的库是更高效、更可靠的选择。

强烈推荐:Video.js

它是一个功能强大、高度可定制、跨浏览器兼容的开源视频播放器。

网页mp4播放器源代码
(图片来源网络,侵删)

源代码 (使用 Video.js)

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">使用 Video.js 的播放器</title>
    <!-- 1. 引入 Video.js 的 CSS -->
    <link href="https://vjs.zencdn.net/8.6.1/video-js.css" rel="stylesheet">
    <!-- 2. 自定义样式(可选) -->
    <style>
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            background-color: #222;
        }
        .video-js {
            width: 800px;
            height: 450px; /* 保持 16:9 的宽高比 */
        }
    </style>
</head>
<body>
    <!-- 3. 创建 video 标签,并加上 video-js 类和一些属性 -->
    <video
        id="myVideoPlayer"
        class="video-js vjs-default-skin"
        controls
        preload="auto"
        width="800"
        height="450"
        data-setup="{}">
        <source src="your-video-file.mp4" type="video/mp4">
        <p class="vjs-no-js">
            To view this video please enable JavaScript, and consider upgrading to a web browser that
            <a href="https://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>.
        </p>
    </video>
    <!-- 4. 引入 Video.js 的 JavaScript -->
    <script src="https://vjs.zencdn.net/8.6.1/video.min.js"></script>
</body>
</html>

如何使用

  1. 将代码保存为 .html 文件。
  2. 替换 your-video-file.mp4
  3. 用浏览器打开。

优点

  • 开箱即用: 功能齐全,无需编写 JS 代码。
  • 高度可定制: 提供丰富的 API 和插件,可以轻松修改皮肤、添加插件(如广告、画中画、字幕等)。
  • 兼容性好: 内部处理了各种浏览器的兼容性问题。
  • 响应式: 默认支持响应式布局。
  • 社区活跃: 文档完善,遇到问题容易找到解决方案。

总结与建议

方案 优点 缺点 适用场景
方案一: HTML5 <video> 最简单、最原生、性能最好 外观和功能由浏览器决定,无法自定义 个人博客、简单展示、快速原型
方案二: 自定义 JS 播放器 完全控制外观和功能 开发和维护成本高,需要处理兼容性和细节 学习 JavaScript、项目有特殊 UI/UX 要求
方案三: JS 库 (Video.js) 功能强大、稳定、可扩展、省时省力 引入了外部依赖,文件体积稍大 绝大多数商业项目和复杂应用的首选

对于初学者或快速实现,方案一是最好的起点,如果你想深入学习前端,方案二是绝佳的练习项目,对于任何严肃的开发工作,强烈建议使用方案三,它能让你专注于业务逻辑,而不是重复造轮子。