方法一:使用正则表达式匹配

步骤:

  1. 获取所有的媒体元素
  2. 遍历所有的媒体元素,获取其src属性值
  3. 使用正则表达式匹配出其中的流地址(m3u8、hls等等)
  4. 打印出匹配到的流地址

代码:

// 获取所有的媒体元素
const mediaElements = document.querySelectorAll('video, audio');

// 遍历所有的媒体元素
mediaElements.forEach(mediaElement => {
  // 获取媒体元素的src属性值
  const src = mediaElement.src;
  
  // 使用正则表达式匹配出其中的流地址(m3u8、hls等等)
  const regex = /(https?:\/\/[^\s]+)/g;
  const matches = src.match(regex);
  
  // 打印出匹配到的流地址
  if (matches) {
    matches.forEach(match => {
      console.log(match);
    });
  }
});

方法二:使用媒体元素的canPlayType方法判断

步骤:

  1. 获取所有的媒体元素
  2. 遍历所有的媒体元素,获取其src属性值
  3. 使用媒体元素的canPlayType方法判断是否支持该媒体类型
  4. 如果支持,则打印出该媒体元素的src属性值

代码:

// 获取所有的媒体元素
const mediaElements = document.querySelectorAll('video, audio');

// 遍历所有的媒体元素
mediaElements.forEach(mediaElement => {
  // 获取媒体元素的src属性值
  const src = mediaElement.src;
  
  // 使用媒体元素的canPlayType方法判断是否支持该媒体类型
  const canPlay = mediaElement.canPlayType('application/vnd.apple.mpegurl') === 'maybe' ||
                  mediaElement.canPlayType('application/x-mpegURL') === 'maybe' ||
                  mediaElement.canPlayType('application/vnd.ms-sstr+xml') === 'maybe' ||
                  mediaElement.canPlayType('application/x-mms-framed') === 'maybe';
  
  // 如果支持,则打印出该媒体元素的src属性值
  if (canPlay) {
    console.log(src);
  }
});

方法三:使用第三方库如videojs

步骤:

  1. 引入videojs库
  2. 初始化videojs,并设置监听器
  3. 在监听器中获取播放器的源码,解析其中的流地址并打印出来

代码:

// 引入videojs库
import videojs from 'video.js';

// 初始化videojs,并设置监听器
const player = videojs('my-player', {}, function() {
  const tech = this.tech();
  tech.on('sourceopen', function() {
    // 获取播放器的源码
    const sourceBuffer = tech.sourceBuffer;
    if (sourceBuffer) {
      sourceBuffer.addEventListener('updateend', function() {
        const sourceBufferData = sourceBuffer.buffered;
        for (let i = 0; i < sourceBufferData.length; i++) {
          const rangeStart = sourceBufferData.start(i);
          const rangeEnd = sourceBufferData.end(i);
          const rangeLength = rangeEnd - rangeStart;
          const mpegUrlBuffer = sourceBuffer.buffered.slice(rangeStart, rangeEnd);
          const reader = new FileReader();
          reader.readAsArrayBuffer(mpegUrlBuffer);
          reader.onloadend = function() {
            const bytes = new Uint8Array(reader.result);
            const mpegUrl = String.fromCharCode(...bytes);
            const regex = /(https?:\/\/[^\s]+)/g;
            const matches = mpegUrl.match(regex);
            if (matches) {
              matches.forEach(match => {
                console.log(match);
              });
            }
          }
        }
      });
    }
  });
});
假设你是一名前端专家现要求你实现将网页中的所有播放器内的流m3u8、hls等等打印出来至少3种方法越多越好请将步骤写下并示以相关js代码

原文地址: https://www.cveoy.top/t/topic/bkjh 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录