Html5 video 标签 src 用数据流方式播放视频

前言

当视频播放过大,边看边加载时可以用数据流方式播放视频


可以使用 Blob 和 URL.createObjectURL() 方法来实现使用数据流播放视频。具体实现步骤如下:

一、获取视频数据流 从服务器获取视频数据流,可以使用 XMLHttpRequest 或 fetch 方法请求数据流并以 Blob 对象形式返回。

二、创建 URL 对象 使用 URL.createObjectURL() 方法创建一个 URL 对象,将 Blob 对象作为参数传入该方法。

三、将 URL 对象赋值给 video 标签的 src 属性 将创建的 URL 对象赋值给 video 标签的 src 属性即可实现使用数据流播放视频。 下面是一个使用数据流播放视频的示例代码:

<video id="myVideo" width="640" height="360" controls></video>
<script>
  // 获取视频数据流
  fetch('video.mp4')
    .then(response => response.blob())
    .then(blob => {
      // 创建 URL 对象
      const videoUrl = URL.createObjectURL(blob);
      // 将 URL 对象赋值给 video 标签的 src 属性
      const myVideo = document.getElementById('myVideo');
      myVideo.src = videoUrl;
    })
    .catch(error => {
      console.error('An error occurred:', error);
    });
</script>


总结

在上面的代码中,首先使用 fetch 方法获取视频数据流并以 Blob 对象形式返回,然后使用 URL.createObjectURL() 方法创建一个 URL 对象,将 Blob 对象作为参数传入该方法。最后将创建的 URL 对象赋值给 video 标签的 src 属性即可实现使用数据流播放视频。

要将 Uint8Array 类型的视频数据流播放在 `<video>` 标签中,可以使用 `MediaSource` API 和 `SourceBuffer` 对象来实现动态加载和播放视频数据。 下面是一个基本的示例代码: ```javascript // 假设 videoData 是一个 Uint8Array 类型的视频数据流 const video = document.querySelector('video'); // 创建一个 MediaSource 对象 const mediaSource = new MediaSource(); // 将 MediaSource 对象与 video 标签关联 video.src = URL.createObjectURL(mediaSource); // 监听 MediaSource 对象的 "sourceopen" 事件 mediaSource.addEventListener('sourceopen', () => { // 创建一个 SourceBuffer 对象 const sourceBuffer = mediaSource.addSourceBuffer('video/mp4'); // 可根据实际视频格式修改 MIME 类型 // 监听 SourceBuffer 对象的 "updateend" 事件 sourceBuffer.addEventListener('updateend', () => { if (!sourceBuffer.updating && mediaSource.readyState === 'open') { // 加载新的视频数据 sourceBuffer.appendBuffer(videoData); } }); // 开始加载视频数据 sourceBuffer.appendBuffer(videoData); }); ``` 在上面的代码中,我们首先获取到 `<video>` 标签,并创建一个 `MediaSource` 对象 `mediaSource`。然后,通过 `URL.createObjectURL()` 方法将 `mediaSource` 对象与 `<video>` 标签关联起来,将视频源设置为 `mediaSource` 对象的 URL。 接下来,我们监听 `mediaSource` 对象的 `"sourceopen"` 事件,在事件处理函数中创建一个 `SourceBuffer` 对象 `sourceBuffer`,并指定视频的 MIME 类型。 然后,我们监听 `sourceBuffer` 对象的 `"updateend"` 事件,在事件处理函数中判断是否需要加载新的视频数据。如果 `sourceBuffer` 不处于更新状态,并且 `mediaSource` 的 `readyState` 属性为 `"open"`,则调用 `appendBuffer()` 方法加载新的视频数据。 最后,我们调用 `appendBuffer()` 方法开始加载初始的视频数据。 请注意,这只是一个基本的示例代码,实际使用时可能需要根据视频的实际格式和需求进行适当的调整。同时,要确保视频数据流的格式和 MIME 类型与实际视频一致,以确保成功播放视频
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值