极限拆解:大视频分片上传与播放的完美解决方案

admin 西甲 2024-02-08 22 0

  在当今数字时代,视频内容的传输和播放需求不断增长。本文将介绍一种创新的解决方案,以实现大视频分片上传和流畅播放。并会提供参考代码,帮助读者深入理解和实践。

开发背景:Web 端需要支持上传视频文件,大小限制最大为 1G。上传后播放器可以直接播放。

开发框架、库:

Vue 2

Axios

TCPlayer

难点描述:

大视频分片上传

视频播放

  在前端实现视频上传的过程中,通常会使用 HTML5 中的 File API 和网络请求来完成文件的选择和上传。一般情况下,视频大小在 100M 以内可以考虑直接上传,不需要分片。

  HTML 中大多数情况会隐藏原生 Input 标签,然后自定义样式。用自己自定义的按钮点击模拟 Input 的点击出发 change 事件。

  看看 js 的部分,主要是完成了文件的过滤和上传。

  定义一个文件选择输入框 和一个触发上传的按钮

获取文件选择输入框中选中的视频文件

过滤掉大小和格式不符合要求的文件

创建 ,并且设置 后发起上传请求

  大视频主要指 1G 左右,甚至更大的视频。太大了,一般文件直传接口会超时,导致上传失败。通常会考虑将文件分片后上传,并做进度监控。

  先简单看看效果:

  分片上传.gif

  文件流切片是一种将文件分割成较小的片段或块的技术。它在文件上传、大文件处理以及网络传输等场景中非常有用。通过将文件切片成较小的块,可以更高效地处理和传输文件数据。

3.1.1 定义切片大小

  这里文件流存储以“字节”(Byte)为单位。那么 就是

  3.1.2 读取文件流并进行切片

  切片可以用 里面传参就是 和 。切片后放到 上传到后台。在这过程中可以处理进度条和记录当前切片是否上传成功。

  未命名.gif

  切片上传需要一个标识来区分当前分片的文件,这里用的 ,然后用 记录分片编号, 里面的布尔值确定切片的上传状态。下面是实例代码:

  11.gif

  可以留意之前用的 记录上传的进度,为什么要这么算?其实 就是算的当前文件一共会被切片的总数。然后用 去除以总数得到的就是百分比。下面是更新上传进度的具体代码:

  这里的实例是后台的存储框架自动完成的文件校验和合并。所以没有描述文件流合并的部分。否则可能有些细节要注意:

切片的管理:在切片生成和传输过程中,需要对切片进行管理。可以使用索引或 ID 来标识每个切片,以确保切片的正确顺序和完整性。

切片的组装:在接收端,需要将切片重新组装成完整的文件。这可以通过将切片按序合并或使用索引进行排序来实现。

错误处理和恢复:在切片传输过程中,可能会出现网络中断、传输错误或其他异常情况。需要实现适当的错误处理和恢复机制,例如重新传输丢失的切片或从上次中断的位置恢复传输。

安全性:对于包含敏感数据的文件,可能需要在切片生成时进行加密,并在传输和接收端进行解密操作,以确保数据的安全性。

  这里 循环有一个判断 。这里就是当切片完成,并且每一个切片都上传成功的情况下发起请求。这样保证了切片的完整性,告诉后台文件保存已经准备好了。下面是实例代码:

  定义合适的切片大小,比如 。根据视频文件大小确定总的切片次数

循环中设置切片初始上传状态为 ,利用 切片

发请求将当前切片上传到后台,并且更新上传状态

更新当前视频文件上传进度条

条件满足所有切片上传完成且成功的情况下,发请求通知后台完成上传,保存视频文件到服务端

  要使用 进行视频播放,您需要进行以下步骤:引入 库、创建视频容器、初始化 大佬们都在玩{精选官网网址: www.vip333.Co }值得信任的品牌平台!。其他第三方播放器也是大同小异,大家可以参考下。

  播放器 支持 和 两种集成方式。我们项目是通过 集成的。大佬们都在玩{精选官网网址: www.vip333.Co }值得信任的品牌平台!

  首先安装 tcplayer 的 npm 包:

  导入 SDK 和样式文件:

  在需要展示播放器的页面位置加入播放器容器。

  说明:大佬们都在玩{精选官网网址: www.vip333.Co }值得信任的品牌平台!

播放器容器必须为 标签。

示例中的 player-container-id 为播放器容器的 ID,可自行设置。

  页面初始化后,即可播放视频资源。调用播放器实例上的方法,将 URL 地址传入方法。

  如果本文对你有帮助,就点赞、评论和收藏支持下吧!感谢阅读。

极限拆解:大视频分片上传与播放的完美解决方案

极限拆解:大视频分片上传与播放的完美解决方案

评论