You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js中隐藏直播m3u8链接及其中的.ts链接?

在Node.js环境下隐藏m3u8及.ts链接的方案

核心思路

通过Node.js搭建反向代理中间层,将真实的m3u8和.ts资源请求转发到自有域名下,同时修改m3u8文件中的.ts链接为代理路径,避免真实地址直接暴露。配合鉴权机制,还能进一步防止未授权访问。

具体实现步骤

1. 搭建Express代理服务

先安装所需依赖:

npm install express axios

2. 代理m3u8文件并替换.ts链接

创建server.js,实现以下逻辑:

  • 接收前端对自有域名下m3u8路径的请求
  • 向真实m3u8源地址发起请求并获取内容
  • 将内容中的所有.ts链接替换为自有域名的代理路径
  • 返回修改后的m3u8内容给前端

代码示例:

const express = require('express');
const axios = require('axios');
const app = express();
const PORT = 3000;

// 真实m3u8源地址(仅服务器内部可见)
const REAL_M3U8_URL = 'https://sosyoapp-live.cdnnew.com/sosyo/buraya-bir-isim-verin.m3u8';
// 真实ts文件的基础路径
const REAL_TS_BASE = 'https://sosyoapp-live.cdnnew.com/sosyo/';

// 代理m3u8请求
app.get('/live/stream.m3u8', async (req, res) => {
  try {
    const response = await axios.get(REAL_M3U8_URL);
    let m3u8Content = response.data;
    // 替换所有.ts链接为代理路径
    m3u8Content = m3u8Content.replace(/(https?:\/\/[^"]+\.ts)/g, (match) => {
      const tsFileName = match.split('/').pop();
      return `/live/ts/${tsFileName}`;
    });
    // 设置正确的响应头
    res.setHeader('Content-Type', 'application/vnd.apple.mpegurl');
    res.send(m3u8Content);
  } catch (error) {
    res.status(500).send('获取直播流失败');
  }
});

// 代理.ts文件请求
app.get('/live/ts/:filename', async (req, res) => {
  const { filename } = req.params;
  const realTsUrl = `${REAL_TS_BASE}${filename}`;
  try {
    const response = await axios.get(realTsUrl, { responseType: 'stream' });
    res.setHeader('Content-Type', 'video/MP2T');
    response.data.pipe(res);
  } catch (error) {
    res.status(404).send('TS文件不存在');
  }
});

app.listen(PORT, () => {
  console.log(`代理服务运行在 http://localhost:${PORT}`);
});

3. 添加鉴权机制(可选但推荐)

为防止他人盗用代理后的链接,可在请求中加入token验证:

// 示例token(实际项目建议用JWT生成动态token)
const VALID_TOKEN = 'your-custom-secret-token';

// 鉴权中间件
const authMiddleware = (req, res, next) => {
  const token = req.query.token;
  if (token !== VALID_TOKEN) {
    return res.status(403).send('未授权访问');
  }
  next();
};

// 给代理路由绑定鉴权
app.get('/live/stream.m3u8', authMiddleware, async (req, res) => {
  // 原逻辑不变
});

app.get('/live/ts/:filename', authMiddleware, async (req, res) => {
  // 原逻辑不变
});

4. 前端使用代理链接

前端直接请求http://your-domain.com/live/stream.m3u8?token=your-custom-secret-token(添加鉴权时),此时浏览器网络请求只会显示自有域名的链接,真实的m3u8和ts地址完全隐藏。

注意事项

  • 确保服务器有足够带宽和性能转发视频流,避免卡顿
  • 可添加缓存机制,减少重复请求真实源的次数
  • 若真实源有防盗链,需在代理请求中添加对应请求头(如Referer、User-Agent)

内容的提问来源于stack exchange,提问作者leshcode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 07:02:13