找回密码
 注册需人工审核(节假日除外)
搜索
查看: 302|回复: 18

求修改虎牙php代理源码,解决断流问题

[复制链接]

签到天数: 35 天

[LV.5]略有小成

发表于 2024-12-8 13:30:59 | 显示全部楼层 |阅读模式
悬赏10TV币未解决
求修改虎牙php代理源码,解决断流问题!


断流的源码如下


<?php
date_default_timezone_set("Asia/Shanghai");
$type = empty($_GET['type']) ? "nodisplay" : trim($_GET['type']);
$id = empty($_GET['id']) ? "11342412" : trim($_GET['id']);
$cdn = empty($_GET['cdn']) ? "hwcdn" : trim($_GET['cdn']);
$media = empty($_GET['media']) ? "flv" : trim($_GET['media']);
$roomurl = "https://mp.huya.com/cache.php?m=Live&do=profileRoom&roomid=" . $id;


function get_content($apiurl, $flag)
{
    if ($flag == "mobile") {
        $headers = array(
            'Content-Type: application/x-www-form-urlencoded',
            'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 16_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Mobile/15E148 Safari/604.1'
        );
    } else {
        $arr = [
            "appId" => 5002,
            "byPass" => 3,
            "context" => "",
            "version" => "2.4",
            "data" => new stdClass(),
        ];
        $postData = json_encode($arr);
        $headers = array(
            'Content-Type: application/json',
            'Content-Length: ' . strlen($postData),
            'upgrade-insecure-requests: 1',
            'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
        );
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $apiurl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    if ($flag == "uid") {
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    }
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}

$jsonStr = json_decode(get_content($roomurl, "mobile"), true);
$realdata = $jsonStr["data"];
$uid = json_decode(get_content("https://udblgn.huya.com/web/anonymousLogin", "uid"), true)["data"]["uid"];

function aes_decrypt($ciphertext, $key, $iv)
{
    return openssl_decrypt($ciphertext, 'AES-256-CBC', $key, 0, $iv);
}

$key = "abcdefghijklmnopqrstuvwxyz123456";
$iv = "1234567890123456";
$mediaurl = aes_decrypt("fIuPMpBI1RpRnM2JhbYHzvwCvwhHBF7Q+8k14m9h3N5ZfubHcDCEk08TnLwHoMI/SG7bxpqT6Rh+gZunSpYHf1JM/RmEC/S1SjRYWw6rwc3gGo3Rrsl3sojPujI2aZsb", $key, $iv);


function get_uuid()
{
    $now = intval(microtime(true) * 1000);
    $rand = rand(0, 1000) | 0;
    return intval(($now % 10000000000 * 1000 + $rand) % 4294967295);
}

function process_anticode($anticode, $uid, $streamname)
{
    parse_str($anticode, $q);
    $q["t"] = '102';
    $q["ctype"] = 'tars_mp';
    $q["wsTime"] = dechex(time() + 21600);
    $q["ver"] = "1";
    $q["sv"] = date('YmdH');
    $q["seqid"] = strval(intval($uid) + intval(microtime(true) * 1000));
    $q["uid"] = strval($uid);
    $q["uuid"] = strval(get_uuid());
    $ss = md5("{$q["seqid"]}|{$q["ctype"]}|{$q["t"]}");
    $q["fm"] = base64_decode($q["fm"]);
    $q["fm"] = str_replace(["$0", "$1", "$2", "$3"], [$q["uid"], $streamname, $ss, $q["wsTime"]], $q["fm"]);
    $q["wsSecret"] = md5($q["fm"]);
    unset($q["fm"]);
    if (array_key_exists("txyp", $q)) {
        unset($q["txyp"]);
    }
    return http_build_query($q);
}

function format($realdata, $uid)
{
    $stream_info = ['flv' => [], 'hls' => []];
    $cdn_type = ['HY' => 'hycdn', 'TX' => 'txcdn', 'HW' => 'hwcdn', 'HS' => 'hscdn', 'WS' => 'wscdn'];
    foreach ($realdata["stream"]["baseSteamInfoList"] as $s) {
        if ($s["sFlvUrl"]) {
            $stream_info["flv"][$cdn_type[$s["sCdnType"]]] = $s["sFlvUrl"] . '/' . $s["sStreamName"] . '.' . $s["sFlvUrlSuffix"] . '?' . process_anticode($s["sFlvAntiCode"], $uid, $s["sStreamName"]);
        }
        if ($s["sHlsUrl"]) {
            $stream_info["hls"][$cdn_type[$s["sCdnType"]]] = $s["sHlsUrl"] . '/' . $s["sStreamName"] . '.' . $s["sHlsUrlSuffix"] . '?' . process_anticode($s["sHlsAntiCode"], $uid, $s["sStreamName"]);
        }
    }
    return $stream_info;
}

if ($jsonStr["status"] == 200) {
    $realurl = format($realdata, $uid);
    if ($type == "display") {
        print_r($realurl);
        exit();
    }
    if ($media == "flv") {
        switch ($cdn) {
            case $cdn:
                $mediaurl = str_replace("http://", "https://", $realurl["flv"][$cdn]);
                break;
            default:
                $mediaurl = str_replace("http://", "https://", $realurl["flv"]["hwcdn"]);
                break;
        }
    }
    if ($media == "hls") {
        switch ($cdn) {
            case $cdn:
                $mediaurl = str_replace("http://", "https://", $realurl["hls"][$cdn]);
                break;
            default:
                $mediaurl = str_replace("http://", "https://", $realurl["hls"]["hwcdn"]);
                break;
        }
    }
    header('location:' . $mediaurl);
    exit();
} else {
    header('location:' . $mediaurl);
    exit();
}

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

该用户从未签到

发表于 2024-12-8 18:44:44 来自手机 | 显示全部楼层

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 21 天

[LV.4]初窥堂奥

发表于 2024-12-8 23:10:58 来自手机 | 显示全部楼层
闽泉川 发表于 2024-12-8 18:44
这个是肥羊的吧

我的php虎牙不断流。肥羊的docker也不断流!

点评

分享一下php呗  发表于 2024-12-9 05:31

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

该用户从未签到

发表于 2024-12-9 11:26:45 来自手机 | 显示全部楼层
我的php也是不断流

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 114 天

[LV.6]渐入佳境

发表于 2024-12-9 15:07:27 | 显示全部楼层
tombin 发表于 2024-12-8 23:10
我的php虎牙不断流。肥羊的docker也不断流!


分享一下php呗

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 114 天

[LV.6]渐入佳境

发表于 2024-12-9 15:07:44 | 显示全部楼层
闽泉川 发表于 2024-12-9 11:26
我的php也是不断流


分享一下php呗
分享一下php呗

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 160 天

[LV.7]炉火纯青

发表于 2024-12-13 11:05:16 | 显示全部楼层
  1. <?php
  2. $type = empty($_GET['type']) ? "nodisplay" : trim($_GET['type']);
  3. $id = empty($_GET['id']) ? "116" : trim($_GET['id']);
  4. $cdn = empty($_GET['cdn']) ? "txcdn" : trim($_GET['cdn']);
  5. $media = empty($_GET['media']) ? "flv" : trim($_GET['media']);
  6. $roomurl = "https://mp.huya.com/cache.php?m=Live&do=profileRoom&roomid=" . $id;


  7. function get_content($apiurl, $flag)
  8. {
  9.     if ($flag == "mobile") {
  10.         $headers = array(
  11.             'Content-Type: application/x-www-form-urlencoded',
  12.             'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 16_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Mobile/15E148 Safari/604.1'
  13.         );
  14.     } else {
  15.         $arr = [
  16.             "appId" => 5002,
  17.             "byPass" => 3,
  18.             "context" => "",
  19.             "version" => "2.4",
  20.             "data" => new stdClass(),
  21.         ];
  22.         $postData = json_encode($arr);
  23.         $headers = array(
  24.             'Content-Type: application/json',
  25.             'Content-Length: ' . strlen($postData),
  26.             'upgrade-insecure-requests: 1',
  27.             'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
  28.         );
  29.     }
  30.     $ch = curl_init();
  31.     curl_setopt($ch, CURLOPT_URL, $apiurl);
  32.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  33.     curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  34.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  35.     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  36.     if ($flag == "uid") {
  37.         curl_setopt($ch, CURLOPT_POST, 1);
  38.         curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
  39.     }
  40.     $data = curl_exec($ch);
  41.     curl_close($ch);
  42.     return $data;
  43. }
  44. $d=get_content($roomurl, "mobile");
  45. //echo $d;
  46. $jsonStr = json_decode($d, true);
  47. $realdata = $jsonStr["data"];
  48. $uid = json_decode(get_content("https://udblgn.huya.com/web/anonymousLogin", "uid"), true)["data"]["uid"];

  49. function get_uuid()
  50. {
  51.     $now = intval(microtime(true) * 1000);
  52.     $rand = rand(0, 1000) | 0;
  53.     return intval(($now % 10000000000 * 1000 + $rand) % 4294967295);
  54. }

  55. function process_anticode($anticode, $uid, $streamname)
  56. {
  57.     parse_str($anticode, $q);
  58.     $q["t"] = '102';
  59.     $q["ctype"] = 'tars_mp';
  60.     $q["wsTime"] = dechex(time() + 21600);
  61.     $q["ver"] = "1";
  62.     $q["sv"] = date('YmdH');
  63.     $q["seqid"] = strval(intval($uid) + intval(microtime(true) * 1000));
  64.     $q["uid"] = strval($uid);
  65.     $q["uuid"] = strval(get_uuid());
  66.     $ss = md5("{$q["seqid"]}|{$q["ctype"]}|{$q["t"]}");
  67.     $q["fm"] = base64_decode($q["fm"]);
  68.     $q["fm"] = str_replace(["$0", "$1", "$2", "$3"], [$q["uid"], $streamname, $ss, $q["wsTime"]], $q["fm"]);
  69.     $q["wsSecret"] = md5($q["fm"]);
  70.     unset($q["fm"]);
  71.     if (array_key_exists("txyp", $q)) {
  72.         unset($q["txyp"]);
  73.     }
  74.     return http_build_query($q);
  75. }

  76. function format($realdata, $uid)
  77. {
  78.     $stream_info = ['flv' => [], 'hls' => []];
  79.     $cdn_type = ['HY' => 'hycdn', 'TX' => 'txcdn', 'HW' => 'hwcdn', 'HS' => 'hscdn', 'WS' => 'wscdn'];
  80.     foreach ($realdata["stream"]["baseSteamInfoList"] as $s) {
  81.         if($s["sFlvUrl"]) {
  82.             $stream_info["flv"][$cdn_type[$s["sCdnType"]]] = $s["sFlvUrl"] . '/' . $s["sStreamName"] . '.' . $s["sFlvUrlSuffix"] . '?' . process_anticode($s["sFlvAntiCode"], $uid, $s["sStreamName"]);
  83.             //echo $s["sFlvUrl"] . '/' . $s["sStreamName"] . '.' . $s["sFlvUrlSuffix"] . '?' . process_anticode($s["sFlvAntiCode"], $uid, $s["sStreamName"]).chr(10);   
  84.         }
  85.         if($s["sHlsUrl"]) {
  86.             $stream_info["hls"][$cdn_type[$s["sCdnType"]]] = $s["sHlsUrl"] . '/' . $s["sStreamName"] . '.' . $s["sHlsUrlSuffix"] . '?' . process_anticode($s["sHlsAntiCode"], $uid, $s["sStreamName"]);
  87.         }
  88.     }
  89.     return $stream_info;
  90. }
  91. if ($jsonStr["status"] == 200) {
  92.     $realurl = format($realdata, $uid);
  93.     if ($type == "display") {
  94.         print_r($realurl);
  95.         exit();
  96.     }
  97.     if ($media == "flv") {
  98.         switch ($cdn) {
  99.             case $cdn:
  100.                 $mediaurl = str_replace("http://", "https://", $realurl["flv"][$cdn]);
  101.                 break;
  102.             default:
  103.                 $mediaurl = str_replace("http://", "https://", $realurl["flv"]["hwcdn"]);
  104.                 break;
  105.         }
  106.     }
  107.     if ($media == "hls") {
  108.         switch ($cdn) {
  109.             case $cdn:
  110.                 $mediaurl = str_replace("http://", "https://", $realurl["hls"][$cdn]);
  111.                 break;
  112.             default:
  113.                 $mediaurl = str_replace("http://", "https://", $realurl["hls"]["hwcdn"]);
  114.                 break;
  115.         }
  116.     }
  117.     header('location:' . $mediaurl);
  118.     echo $mediaurl;
  119.     exit();
  120. } else {
  121.     header('location:' . $mediaurl);
  122.     echo $mediaurl;
  123.     exit();
  124. }
复制代码

点评

这个还是会断流  发表于 2024-12-13 23:45

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 160 天

[LV.7]炉火纯青

发表于 2024-12-14 08:25:47 | 显示全部楼层
你用flv,php默认格式

点评

也会卡,只是微卡  发表于 2024-12-14 10:06

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 160 天

[LV.7]炉火纯青

发表于 2024-12-14 15:34:24 | 显示全部楼层
卡是你网络问题,只要不断流就行

点评

会断流  发表于 2024-12-14 16:09

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 35 天

[LV.5]略有小成

 楼主| 发表于 2024-12-14 16:10:36 | 显示全部楼层
true 发表于 2024-12-14 08:25
你用flv,php默认格式

用了这个帖子里面的代码不断流了 https://iptv.cc/thread-4895-1-1.html

点评

不可能,二个一样的,要断都会断  发表于 2024-12-14 20:17
不可  发表于 2024-12-14 20:17
你这个有断流问题,只是断流不严重  发表于 2024-12-14 19:33
它那个不断流,这个也不断  发表于 2024-12-14 16:32
二个代码大同小异,flv都不断流  发表于 2024-12-14 16:31

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

本版积分规则

Archiver|手机版|小黑屋|IPTV论坛 | 管理员邮箱:a@8494.net

本站以兴趣爱好为宗旨,非经营性质,不以任何形式收取任何费用。IPTV论坛没有任何官方Q群,V群,T群,禁止留任何联系方式,请配合。

免责声明:本站上述内容来自网络,不得用于商业或非法用途,您必须在下载后24小时内,从设备中删除,否则后果自负。如内容侵犯您的版权、著作权,请联系我,第一时间处理。

GMT+8, 2025-1-31 11:11 , Processed in 0.108061 second(s), 18 queries .

IPTV论坛 创建于 2023年5月1日

快速回复 返回顶部 返回列表