如何在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
相关产品推荐
相关产品推荐

