hls实现播放m3u8视频&将视频流进行切片& HLS.js简介

github官网GitHub - video-dev/hls.js: HLS.js is a JavaScript library that plays HLS in browsers with support for MSE.HLS.js is a JavaScript library that plays HLS in browsers with support for MSE. - GitHub - video-dev/hls.js: HLS.js is a JavaScript library that plays HLS in browsers with support for MSE.https://github.com/video-dev/hls.js

1.简介格式

    1. MP4是最常见的封装格式了,应用范围广、灵活性高、兼容性强 。
  • MP4甚至支持自定义封面图,几乎所有 的播放器、甚至是浏览器都支持这个封装格式。
    1. FLV格式与往期《直播协议》中的RTMP、HTTP-FLV是类似的,毕竟都是Adobe公司主导或推出的标准。
  • FLV是一种为网络视频设计的格式,网页加入flv.js插件就可以播放了 FLV可以做长连接需要用flv.js。
    1. 最后是HLS格式,在往期《直播协议》已经详细讨论过HLS了。
  • 在点播的场景下,HLS实质上就是把一整个大的视频文件分成很多个碎片视频文件
  • HLS格式的文件由两部分组成,一是多个只有几秒长度的.ts碎片视频文件,另一个是记录这些视频文件地址的.m3u8索引文件。

2.接到一个需求需要将视频流进行切片做优化后的视频流如何做到?

目前市场主流的是hls .ts后缀将视频流进行切片前端如何做到?

准备思想

后端将源文件.mp4进行切片思想用.m3u8返回给前端

1.初始.m3u8文件包含url的其他.m3u8文件如下图

2.url的其他.m3u8包含.ts切片的视频流文件如下图

3.最后我们将初始化.m3u8放进url类型改为customHls即可播放将进度条拖动即可看出切片视频端

  • 安装依赖

    yarn add dplayer -S // 视频播放器插件
    yarn add hls.js -S // 播放hls流插件

  • App.vue

javascript 复制代码
<template>
  <div id="dplayer" style="width: 400px"></div>
  <p>
    <button @click="playVideo">播放视频</button> &nbsp;
    <button @click="pauseVideo">暂停视频</button>
  </p>
</template>

<script setup>
import { onMounted } from "vue";

import Hls from "hls.js";
import DPlayer from "dplayer";

console.log(DPlayer);

let dpInstance = null;

function playVideo() {
  console.log(dpInstance.play);
  dpInstance.play();
}

function pauseVideo() {
  dpInstance.pause();
}

onMounted(() => {
  const dp = new DPlayer({
    container: document.getElementById("dplayer"),
    video: {
      url: "https://xxxx.m3u8", //需要后端配合返回.m3u8格式 .m3u8格式必须包含其他http视频流格式
      type: "customHls", //类型可以mp4 || hls || flv
      customType: {
        customHls: function (video) {
          // let config = {
          //   xhrSetup: function (xhr) {
          //     xhr.withCredentials = true; // 会携带cookie
          //     xhr.setRequestHeader("token", "my-token");
          //   },
          // };
          const hls = new Hls();
          hls.loadSource(video.src);
          hls.attachMedia(video);
        },
      },
    },
  });

  window.dp = dp;
  dpInstance = dp;
});
</script>

<style lang="scss"></style>

下个文章如何解决并下载加密后的视频文件.ts

相关推荐
leoZ2311 小时前
AI+前端提效- 06 AI辅助调试排错:前端报错、白屏、兼容问题极速定位
前端·人工智能·chatgpt·状态模式·超分辨率重建·openvino·dreamfusion
方银的技术分享1 小时前
五、AI训练师:数据标注-视频标注
人工智能·音视频
ji_shuke2 小时前
Vue 3 使用 History 哨兵和 popstate 拦截浏览器返回
前端·javascript·vue.js·history·哨兵·popstate
名字还没想好☜2 小时前
Prometheus 告警实战:写 alerting rules、用 Alertmanager 做路由分组与抑制
运维·前端·javascript·docker·kubernetes·prometheus
shxjnpl2 小时前
涉密企业使用AI会议助手时,需要注意哪些问题?
人工智能·音视频·语音识别·智能硬件
郭邯2 小时前
从零撸了一个 HTML 实体编解码工具,顺便聊聊我和 AI 结对编程的日常
前端
樊小肆2 小时前
DeepSeeker-Code源码导读12-Hooks四引擎
前端·人工智能·agent
xiaohe06013 小时前
🤔 v-mortal 是什么?!我只知道 v-model 啊!
vue.js·vite·前端工程化
xm_xm_xm_13 小时前
TypeScript 7 个 核心特性
前端·typescript
mONESY3 小时前
手把手从零复刻「英文网页 AI 翻译」Chrome 插件(新手向)
javascript