当前位置:首页 > JavaScript

js实现视频

2026-02-02 01:25:53JavaScript

使用HTML5 Video元素

在HTML中嵌入<video>标签,通过JavaScript控制播放行为。这是最基础的原生实现方式,无需第三方库。

<video id="myVideo" width="400" controls>
  <source src="video.mp4" type="video/mp4">
</video>

<script>
  const video = document.getElementById('myVideo');
  video.play(); // 播放
  video.pause(); // 暂停
</script>

自定义播放器控件

通过JavaScript完全自定义UI和控制逻辑,隐藏原生控件并添加自定义按钮。

document.querySelector('.play-btn').addEventListener('click', () => {
  video.play();
});

document.querySelector('.volume-slider').addEventListener('input', (e) => {
  video.volume = e.target.value;
});

使用Video.js库

引入Video.js可快速实现跨浏览器兼容的播放器,支持HLS/DASH等流媒体协议。

js实现视频

<link href="https://vjs.zencdn.net/7.20.3/video-js.css" rel="stylesheet">
<video id="myPlayer" class="video-js" data-setup='{}'>
  <source src="video.m3u8" type="application/x-mpegURL">
</video>

<script src="https://vjs.zencdn.net/7.20.3/video.js"></script>
<script>
  const player = videojs('myPlayer');
</script>

实现画中画模式

利用浏览器API开启画中画功能,需注意兼容性检查。

document.querySelector('.pip-btn').addEventListener('click', async () => {
  if (document.pictureInPictureEnabled) {
    await video.requestPictureInPicture();
  }
});

视频截图功能

通过Canvas捕获视频帧,实现截图保存功能。

js实现视频

document.querySelector('.capture-btn').addEventListener('click', () => {
  const canvas = document.createElement('canvas');
  canvas.width = video.videoWidth;
  canvas.height = video.videoHeight;
  canvas.getContext('2d').drawImage(video, 0, 0);
  const img = document.createElement('img');
  img.src = canvas.toDataURL();
  document.body.appendChild(img);
});

实时滤镜处理

结合Canvas和requestAnimationFrame实现实时视频滤镜效果。

function applyFilter() {
  const canvas = document.querySelector('#filterCanvas');
  const ctx = canvas.getContext('2d');
  ctx.filter = 'sepia(100%)';
  ctx.drawImage(video, 0, 0);
  requestAnimationFrame(applyFilter);
}
video.addEventListener('play', applyFilter);

视频分段播放

使用timeupdate事件监听实现分段播放控制。

const segments = [{start: 10, end: 15}, {start: 20, end: 25}];
video.addEventListener('timeupdate', () => {
  segments.forEach(seg => {
    if (video.currentTime > seg.end) {
      video.currentTime = seg.start;
    }
  });
});

MSE高级应用

使用Media Source Extensions API实现动态视频源加载。

const mediaSource = new MediaSource();
video.src = URL.createObjectURL(mediaSource);
mediaSource.addEventListener('sourceopen', () => {
  const sourceBuffer = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.42E01E"');
  fetch('video_chunk.mp4').then(res => res.arrayBuffer())
    .then(data => sourceBuffer.appendBuffer(data));
});

标签: 视频js
分享给朋友:

相关文章

vue上传视频实现

vue上传视频实现

Vue 实现视频上传功能 安装依赖 确保项目中已安装 axios 或 vue-upload-component 等上传库。通过 npm 安装: npm install axios 前端组件实现 创建…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…