找回密码
 立即注册
搜索
查看: 587|回复: 9

有大神分享下huya的php吗

  [复制链接]

3

主题

20

回帖

61

积分

注册会员

积分
61
发表于 2025-10-21 21:54:49 | 显示全部楼层 |阅读模式
有大神分享下huya的php吗

最好是nodejs的

9

主题

63

回帖

3万

积分

管理员

积分
30210
发表于 2025-10-22 08:04:25 来自手机 | 显示全部楼层
虎牙PHP现在有些人把它当**子,后期我会发

0

主题

22

回帖

69

积分

注册会员

积分
69
发表于 2025-10-22 08:14:00 | 显示全部楼层
我也就缺虎牙的了

3

主题

20

回帖

61

积分

注册会员

积分
61
 楼主| 发表于 2025-10-22 09:09:15 | 显示全部楼层
admin 发表于 2025-10-22 08:04
虎牙PHP现在有些人把它当**子,后期我会发

使用点播,用的虎牙的js啥的,好像可以永久的播放,你有研究下这个吗

0

主题

22

回帖

116

积分

注册会员

积分
116
发表于 2025-10-22 09:11:22 | 显示全部楼层
好像huya是个宝,没人发

0

主题

41

回帖

81

积分

注册会员

积分
81
发表于 2025-10-23 08:39:34 来自手机 | 显示全部楼层
当然还是php好,js不是所有播放器都能用的

0

主题

16

回帖

58

积分

注册会员

积分
58
发表于 2025-10-23 23:23:49 来自手机 | 显示全部楼层
斗鱼的也发发呗!

4

主题

15

回帖

162

积分

注册会员

积分
162
QQ
发表于 2025-10-24 09:15:20 来自手机 | 显示全部楼层
我有三种方法,我烂手里也不会发php,商人真的太可恶了

3

主题

20

回帖

61

积分

注册会员

积分
61
 楼主| 发表于 2025-10-27 15:05:15 | 显示全部楼层
666666 发表于 2025-10-24 09:15
我有三种方法,我烂手里也不会发php,商人真的太可恶了

那些商人不是很多都去喝茶了吗

3

主题

20

回帖

61

积分

注册会员

积分
61
 楼主| 发表于 2025-10-29 15:15:37 | 显示全部楼层
感谢PHP的分享者,我直接转nodejs,若有侵权,请**作者或管理员删除,谢谢!

const express = require('express');
const axios = require('axios');
const cors = require('cors');
const crypto = require('crypto');

const app = express();
const PORT = process.env.PORT || 3000;

// 中间件
app.use(cors());
app.use(express.json());

// 虎牙直播**API
app.get('/huya', async (req, res) => {
    try {
        const id = req.query.id || '11274154'; // 默认房间ID
        
        // 获取房间**
        const roomUrl = `https://mp.huya.com/cache.php?m= ... ileRoom&roomid=${id}`;
        const response = await axios.get(roomUrl, {
            httpsAgent: new (require('https')).Agent({
                rejectUnauthorized: false
            })
        });
        
        const data = response.data.data;
        const uid = data.profileInfo.uid;
        const streamName = data.stream.baseSteamInfoList[0].sStreamName;
        
        // 构建基础URL
        const baseUrl = `http://al.flv.huya.com/src/${streamName}.flv`;
        
        // 生成参数
        const seqid = String(parseInt(uid) + Date.now());
        const ss = crypto.createHash('md5').update(`${seqid}|huya_adr|102`).digest('hex');
        const wsTime = Math.floor(Date.now() / 1000) + 21600; // 6小时后
        const wsTimeHex = wsTime.toString(16);
        
        const wsSecret = crypto.createHash('md5').update(`DWq8BcJ3h6DJt6TY_${uid}_${streamName}_${ss}_${wsTimeHex}`).digest('hex');
        
        // 重定向到最终的直播流URL
        const finalUrl = `${baseUrl}?wsSecret=${wsSecret}&wsTime=${wsTimeHex}&ctype=huya_adr&seqid=${seqid}&uid=${uid}&fs=bgct&ver=1&t=102`;
        
        res.redirect(finalUrl);
        
    } catch (error) {
        console.error('Error:', error.message);
        res.status(500).json({
            error: '获取直播流失败',
            message: error.message
        });
    }
});

// 获取直播**的API(不重定向,返回JSON)
app.get('/huya/info', async (req, res) => {
    try {
        const id = req.query.id || '11274154';
        
        const roomUrl = `https://mp.huya.com/cache.php?m= ... ileRoom&roomid=${id}`;
        const response = await axios.get(roomUrl, {
            httpsAgent: new (require('https')).Agent({
                rejectUnauthorized: false
            })
        });
        
        const data = response.data.data;
        const uid = data.profileInfo.uid;
        const streamName = data.stream.baseSteamInfoList[0].sStreamName;
        
        // 生成参数
        const seqid = String(parseInt(uid) + Date.now());
        const ss = crypto.createHash('md5').update(`${seqid}|huya_adr|102`).digest('hex');
        const wsTime = Math.floor(Date.now() / 1000) + 21600;
        const wsTimeHex = wsTime.toString(16);
        
        const wsSecret = crypto.createHash('md5').update(`DWq8BcJ3h6DJt6TY_${uid}_${streamName}_${ss}_${wsTimeHex}`).digest('hex');
        
        const finalUrl = `http://al.flv.huya.com/src/${streamName}.flv?wsSecret=${wsSecret}&wsTime=${wsTimeHex}&ctype=huya_adr&seqid=${seqid}&uid=${uid}&fs=bgct&ver=1&t=102`;
        
        res.json({
            success: true,
            roomId: id,
            uid: uid,
            streamName: streamName,
            liveUrl: finalUrl,
            expiresAt: new Date(wsTime * 1000).toISOString()
        });
        
    } catch (error) {
        console.error('Error:', error.message);
        res.status(500).json({
            success: false,
            error: '获取直播**失败',
            message: error.message
        });
    }
});

// 健康检查端点
app.get('/health', (req, res) => {
    res.json({ status: 'OK', timestamp: new Date().toISOString() });
});

// 启动服务器
app.listen(PORT, () => {
    console.log(`虎牙直播**API服务运行在 http://localhost{PORT}`);
    console.log('可用端点:');
    console.log('  GET /huya?id=房间ID - 直接重定向到直播流');
    console.log('  GET /huya/info?id=房间ID - 返回直播**JSON');
    console.log('  GET /health - 健康检查');
});

PS:仅供学习研究。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|直播源论坛