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

B站直播代理

[复制链接]

签到天数: 12 天

[LV.3]圆转纯熟

发表于 2023-10-28 22:25:32 | 显示全部楼层 |阅读模式
访问方式:直播间ID参数 bili.php?id=xxxx

  1. <?php
  2. const INIT_URL = "https://api.live.bilibili.com/room/v1/Room/room_init";
  3. const INFO_URL = "https://api.live.bilibili.com/xlive/web-room/v1/index/getInfoByRoom?room_id=";
  4. const PLAY_URL = "https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo";
  5. const COOKIE = "YOUR COOKIE";

  6. class BiliBiliClient {
  7.     public function get($rid, $headers = null) {
  8.         $response = $this->request(INIT_URL, ['id' => $rid], $headers);
  9.         if (!isset($response['data']['live_status']) || $response['data']['live_status'] != 1) {
  10.             return null;
  11.         }
  12.         $rid = $response['data']['room_id'];
  13.         $streamInfo = $this->getBiliStreamInfo($rid, 10000);
  14.         $max = 0;
  15.         foreach ($streamInfo as $data) {
  16.             $acceptQn = $data['format'][0]['codec'][0]['accept_qn'];
  17.             foreach ($acceptQn as $qn) {
  18.                 $max = max($qn, $max);
  19.             }
  20.         }
  21.         if ($max != 10000) {
  22.             $streamInfo = $this->getBiliStreamInfo($rid, $max);
  23.         }
  24.         $urls = [];
  25.         foreach ($streamInfo as $data) {
  26.             foreach ($data['format'] as $format) {
  27.                 foreach ($format['codec'] as $codec) {
  28.                     $baseUrl = $codec['base_url'];
  29.                     foreach ($codec['url_info'] as $urlInfo) {
  30.                         $host = $urlInfo['host'];
  31.                         $extra = $urlInfo['extra'];
  32.                         $urls[] = $host . $baseUrl . $extra;
  33.                     }
  34.                 }
  35.             }
  36.         }
  37.         $workingUrl = $this->getFirstWorkingUrl($urls);
  38.                 if ($workingUrl) {
  39.                         header('location:'.$workingUrl);
  40.                         exit;
  41.                 } else {
  42.                         echo "No working URLs found.";
  43.                 }
  44.     }
  45.         private function getFirstWorkingUrl($urls) {
  46.                 $ch = curl_init();
  47.                 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  48.                 curl_setopt($ch, CURLOPT_TIMEOUT, 5);  // 设置超时时间为5秒
  49.                 curl_setopt($ch, CURLOPT_NOBODY, true);  // 只检查HTTP头部,不下载整个页面
  50.                 curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
  51. Chrome/91.0.4472.124 Safari/537.36');
  52.                 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  53.                 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  54.                 curl_setopt($ch, CURLOPT_COOKIE, COOKIE);
  55.                 foreach ($urls as $url) {
  56.                         curl_setopt($ch, CURLOPT_URL, $url);
  57.                         curl_exec($ch);
  58.                         $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

  59.                         if ($httpCode == 0) {
  60.                                 echo "cURL error for URL $url: " . curl_error($ch) . "\n";
  61.                         }
  62.                         if ($httpCode == 200) {
  63.                                 curl_close($ch);
  64.                                 return $url;
  65.                         }
  66.                 }
  67.                 curl_close($ch);
  68.                 return null;
  69.         }
  70.     private function getBiliStreamInfo($rid, $qn) {
  71.         $params = [
  72.             'room_id' => $rid,
  73.             'protocol' => '0,1',
  74.             'format' => '0,1,2',
  75.             'codec' => '0,1',
  76.             'qn' => $qn,
  77.             'platform' => 'h5',
  78.             'ptype' => 8
  79.         ];
  80.         $response = $this->request(PLAY_URL, $params);
  81.         return $response['data']['playurl_info']['playurl']['stream'] ?? [];
  82.     }
  83.     private function request($url, $params = [], $headers = null) {
  84.         $ch = curl_init();
  85.         $url = $url . '?' . http_build_query($params);
  86.         curl_setopt($ch, CURLOPT_URL, $url);
  87.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  88.                 curl_setopt($ch, CURLOPT_COOKIE, COOKIE);
  89.                 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  90.                 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  91.         if ($headers) {
  92.             curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  93.         }
  94.         $result = curl_exec($ch);
  95.         curl_close($ch);
  96.         return json_decode($result, true);
  97.     }
  98. }
  99. // Example usage
  100. $client = new BiliBiliClient();
  101. $result = $client->get($_GET['id']);
  102. print_r($result);
  103. ?>
复制代码


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

Welcome to iptv.cc !

回复

使用道具 举报

头像被屏蔽

签到天数: 1 天

[LV.1]初学乍练

发表于 2023-10-30 18:05:04 | 显示全部楼层

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

Welcome to iptv.cc !

回复

使用道具 举报

该用户从未签到

发表于 2023-11-5 15:18:40 来自手机 | 显示全部楼层
楼主啊,看了半天没看懂完整代理地址

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

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 3 天

[LV.2]登堂入室

发表于 2023-11-5 16:28:07 | 显示全部楼层
谢谢分享了。

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

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 3 天

[LV.2]登堂入室

发表于 2024-2-17 13:52:52 | 显示全部楼层
啃瓜子,看好贴。

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

Welcome to iptv.cc !

回复

使用道具 举报

本版积分规则

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

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

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

GMT+8, 2025-1-31 14:10 , Processed in 0.103600 second(s), 21 queries .

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

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