hls.js 播放音视频切片鉴权问题

<template>
  <div>
    <audio ref="audioPlayer" controls />
    <button @click="playAudio">播放音频</button>
  </div>
</template>

<script setup lang="ts">
import Hls from 'hls.js';
import { ref, onMounted, onBeforeUnmount } from 'vue';

const audioPlayer = ref<HTMLAudioElement | null>(null);

const audioUrl = 'https://pep-file.oss-cn-beijing.aliyuncs.com/zjOutResource/xxx/6101/8_b1_16/8_b1_16.m3u8?auth_key=xx';

const playAudio = () => {
  if (audioPlayer.value) {
    if (Hls.isSupported()) {
      const hls = new Hls();
      hls.loadSource(audioUrl);
      hls.attachMedia(audioPlayer.value);
      hls.on(Hls.Events.MANIFEST_PARSED, () => {
        audioPlayer.value?.play(); 
      });
    } else {
      audioPlayer.value.src = audioUrl; 
      audioPlayer.value.addEventListener('loadedmetadata', () => {
        audioPlayer.value?.play(); 
      });
    }
  }
}

onMounted(() => {
  audioPlayer.value?.load();
})

onBeforeUnmount(() => {
  if (audioPlayer.value) {
    audioPlayer.value.src = ''; 
  }
})
</script>

<style scoped>
</style>

问题:
音频路径audioUrl需要鉴权才能访问,但是m3u8里面的hls.key和.ts文件如何实现自动鉴权

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:8
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-KEY:METHOD=AES-128,URI="hls.key",IV=0x6b75eb391048f9416d3a475499489390
#EXTINF:7.274833,
part_0000.ts
#EXT-X-ENDLIST
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 5

一般都是后端创建一个限时url返回前台,比如限时一天有效期

5个月前 评论
Shine-x (楼主) 5个月前

我之前是用nginx的internal限制的

写个video.php的处理脚本

<?php

/**
 * 访问 /video.php 则实际访问的是 /videos/test.mp4.
 *
 * 由此,可以在 php 里实现复杂的认证逻辑比如播放次数、ip、登录权限、用户身份等等。
 */

//TODO 做一些判断和限制


//最后跳转到资源
header("X-Accel-Redirect: /videos/test.mp4");

nginx 收到调整资源/videos/test.mp4的请求

location /videos {
     internal; 
     root /nas/videos;
}

前端直接src读video.php,video.php怎么加参数都可以

5个月前 评论
xiucai 4个月前

之前用七牛的两种方案是:

  1. 联系七牛云忽略ts切片的鉴权
  2. 将m3u8获取方式改成通过api获取 api解析m3u8 给每个ts切片做鉴权处理
5个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!