• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    前端H5 Video常见使用场景简介

    发布者: 嘉神 | 发布时间: 2025-6-16 12:36| 查看数: 81| 评论数: 0|帖子模式

    1.原生H5 video标签
    1. <video id="mse" autoplay=true playsinline controls="controls">
    2.    <source src="实机视频地址" type="video/mp4">
    3.    你的浏览器不支持Video标签
    4. </video>
    复制代码
    2.第三方插件video.js
    1. _this.player = videojs(
    2.     _this.videoNode,
    3.     {
    4.         autoplay: true,
    5.         bigPlayButton : false,
    6.         controls: true,
    7.         preload: 'auto',
    8.         poster: poster,
    9.         notSupportedMessage: '视频加载失败,请刷新再试试',
    10.         sources: [
    11.             {
    12.                 src: videoUrl,
    13.                 type: 'video/mp4',
    14.             },
    15.         ],
    16.     },
    17.     function onPlayerReady() {
    18.         this.play();
    19.     }
    20. )

    21. <video
    22.   ref={(node) => (this.videoNode = node)}
    23.   className="video-js vjs-big-play-centered"
    24.   preload="auto"
    25.   autoplay="autoplay"
    26.   playsinline='true'
    27.   webkit-playsinline='true'
    28.   x5-video-player-type='h5'
    29.   x5-video-player-fullscreen='false'
    30.   x5-video-orientation='portraint'
    31. ></video>
    复制代码
    2.1 支持原生H5 video标签的所有配置参数,并且更加丰富的配置。

    2.2 多环境兼容性
    3.业务开发中的场景
    目前基本表现良好
    3.1 自动播放实现
    3.1.1 非微信端
    目前主要方法是在videojs 的onPlayerReady回调中调用play方法,以及特殊环境下需要用户手动触发
    3.1.2 微信端
    微信端(特别是ios)为了能够实现自动播放功能,目前主要通过增加微信WeixinJSBridgeReady事件回调的方式来触发
    1. document.addEventListener("WeixinJSBridgeReady", function () {
    2.     this.player.play();
    3. }, false);
    复制代码
    4.播放过程

    一次播放三次请求
    请求头信息

    响应信息
    1. range: bytes=0-
    复制代码
    首部信息,该信息用于检测服务端是否支持 Range 请求
    1. Accept-Ranges
    复制代码
    首部(并且它的值不为 “none”),那么表示该服务器支持范围请求
    1. Content-Length
    复制代码
    也是有效信息,因为它提供了要下载的视频的完整大小
    1. Content-Range
    复制代码
    响应首部则表示这一部分内容在整个资源中所处的位置
    range - 可以分片段请求,此时的Content-Range则返回的对应请求区间的大小
    5.其他场景
    5.1 如何实现视频本地预览
    视频本地预览的功能主要利用 URL.createObjectURL() 方法来实现。URL.createObjectURL() 静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的 URL。这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的 URL 对象表示指定的 File 对象或 Blob 对象。
    1. <!DOCTYPE html>
    2. <html>
    3.   <head>
    4.     <meta charset="UTF-8" />
    5.     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    6.     <title>视频本地预览示例</title>
    7.   </head>
    8.   <body>
    9.     <input type="file" accept="video/*" onchange="loadFile(event)" />
    10.     <video
    11.       id="previewContainer"
    12.       controls
    13.       width="480"
    14.       height="270"
    15.       style="display: none;"
    16.     ></video>

    17.     <script>
    18.       const loadFile = function (event) {
    19.         const reader = new FileReader();
    20.         reader.onload = function () {
    21.           const output = document.querySelector("#previewContainer");
    22.           output.style.display = "block";
    23.           output.src = URL.createObjectURL(new Blob([reader.result]));
    24.         };
    25.         reader.readAsArrayBuffer(event.target.files[0]);
    26.       };
    27.     </script>
    28.   </body>
    29. </html>
    复制代码
    5.2 如何实现播放器截图
    播放器截图功能主要利用
    1. CanvasRenderingContext2D.drawImage()
    复制代码
    API 来实现。Canvas 2D API 中的 CanvasRenderingContext2D.drawImage() 方法提供了多种方式在 Canvas 上绘制图像。
    drawImage API 的语法如下:
    1. void ctx.drawImage(image, dx, dy);
    2. void ctx.drawImage(image, dx, dy, dWidth, dHeight);
    3. void ctx.drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);
    复制代码
    1. <!DOCTYPE html>
    2. <html lang="en">
    3.   <head>
    4.     <meta charset="UTF-8" />
    5.     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    6.     <title>播放器截图示例</title>
    7.   </head>
    8.   <body>
    9.     <video id="video" controls="controls" width="460" height="270" crossorigin="anonymous">
    10.       <!-- 请替换为实际视频地址 -->
    11.       <source src="请替换为实际视频地址" />
    12.     </video>
    13.     <button onclick="captureVideo()">截图</button>
    14.     <script>
    15.       let video = document.querySelector("#video");
    16.       let canvas = document.createElement("canvas");
    17.       let img = document.createElement("img");
    18.       img.crossOrigin = "";
    19.       let ctx = canvas.getContext("2d");

    20.       function captureVideo() {
    21.         canvas.width = video.videoWidth;
    22.         canvas.height = video.videoHeight;
    23.         ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
    24.         img.src = canvas.toDataURL();
    25.         document.body.append(img);
    26.       }
    27.     </script>
    28.   </body>
    29. </html>
    复制代码
    5.3 如何实现 Canvas 播放视频
    使用 Canvas 播放视频主要是利用 ctx.drawImage(video, x, y, width, height) 来对视频当前帧的图像进行绘制,其中 video 参数就是页面中的 video 对象。所以如果我们按照特定的频率不断获取 video 当前画面,并渲染到 Canvas 画布上,就可以实现使用 Canvas 播放视频的功能。
    1. <!DOCTYPE html>
    2. <html>
    3.   <head>
    4.     <meta charset="UTF-8" />
    5.     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    6.     <title>使用 Canvas 播放视频</title>
    7.   </head>
    8.   <body>
    9.     <video id="video" controls="controls" style="display: none;">
    10.       <!-- 请替换为实际视频地址 -->
    11.       <source src="请替换为实际视频地址" />
    12.     </video>
    13.     <canvas
    14.       id="myCanvas"
    15.       width="460"
    16.       height="270"
    17.       style="border: 1px solid blue;"
    18.     ></canvas>
    19.     <div>
    20.       <button id="playBtn">播放</button>
    21.       <button id="pauseBtn">暂停</button>
    22.     </div>
    23.     <script>
    24.       const video = document.querySelector("#video");
    25.       const canvas = document.querySelector("#myCanvas");
    26.       const playBtn = document.querySelector("#playBtn");
    27.       const pauseBtn = document.querySelector("#pauseBtn");
    28.       const context = canvas.getContext("2d");
    29.       let timerId = null;

    30.       function draw() {
    31.         if (video.paused || video.ended) return;
    32.         context.clearRect(0, 0, canvas.width, canvas.height);
    33.         context.drawImage(video, 0, 0, canvas.width, canvas.height);
    34.         timerId = setTimeout(draw, 0);
    35.       }

    36.       playBtn.addEventListener("click", () => {
    37.         if (!video.paused) return;
    38.         video.play();
    39.         draw();
    40.       });

    41.       pauseBtn.addEventListener("click", () => {
    42.         if (video.paused) return;
    43.         video.pause();
    44.         clearTimeout(timerId);
    45.       });
    46.     </script>
    47.   </body>
    48. </html>
    复制代码
    以上就是前端H5 Video常见使用场景简介的详细内容,更多关于前端H5 Video常见场景的资料请关注脚本之家其它相关文章!

    来源:https://www.jb51.net/html5/741755.html
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表