日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

秋名山直播php源码,【斗鱼直播源】浏览器抓取真实直播源地址(纯前端JS PHP解析源码)...

發布時間:2023/12/20 php 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 秋名山直播php源码,【斗鱼直播源】浏览器抓取真实直播源地址(纯前端JS PHP解析源码)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

瀏覽器抓取真實直播源地址

0. 前言

1. 直播源查找

2. 瀏覽器請求過程分析及思路

3. 模擬實現

4. 整合播放器

5. 【附】真實源地址

6. 總結

網上搜索各種平臺的直播源地址都是滿天飛,但是經常會有失效的時候,因為官方也會定期的升級系統修改各種參數或鏈接讓直播源不能永久,所以敝人一直崇尚的是授人以魚不如授人以漁,與其給直播源別人,不如教大家如何去爬取直播源,就算失效了也不怕。

0. 前言

繼虎牙直播后,網上說斗魚的直播源是最難抓的,哦?

在抓取之前,需要了解視頻直播源的分類和區別,可以自行了解hls,flv,m3u8等知識。

Tips: 本教程只是教大家如何利用前端調試技巧和爬蟲基本操作,不作為商業用途,各位童鞋耗子尾汁。

所用工具:

瀏覽器

Postman

WebStorm

VLC media player

所用技術:

前端

PHP

1. 直播源查找

先打開斗魚的一個直播間,當然先看電影頻道啦:

在頁面的請求中搜一下.flv、.m3u8 竟然找不到:

那么地址顯然不是直接從后臺帶來的,那么就是ajax請求來的,從ajax請求中找到了一個請求:

很顯然,這里有個地址,使用VLC播放一下,額。。。不好意思,剛好電影放完。但至少這個地址是可用的。

2. 瀏覽器請求過程分析及思路

Request URL: https://m.douyu.com/api/room/ratestream

Form Data:

v: 250120210110

did: 5533423942ce86e564901f2200001631

tt: 1610256007

sign: 00121038e82b65413972da17c6fdaa1d

ver: 22011191

rid: 3637778

rate: -1

多打開幾個直播間,可以發現有幾個參數是固定的:did、ver、rid是直播間id、v是"2501"加當前日期、tt是當前時間戳、sign是簽名、rate是清晰度(-1是默認的)。

那么現在就只有sign是比較麻煩的,它和當前時間戳是相關聯的,后面解析可以看到。

找到發ajax請求的位置,在請求參數data那一行打一個斷點,然后再刷新頁面或者切換清晰度即可開始調試:

選擇window[(0, s.default)(256042, "9f4f419501570ad13334")]然后右鍵Evaluate selected text in console,在控制臺可以看到一個函數ub98484234,經測試這個函數名是固定的,但是函數體里的內容不是固定的,所以復制出函數沒有用。然后r,o,c分別是直播間ID、did、時間戳,后面"&ver=" + u.VERSION + "&rid=" + r + "&rate=" + e + (f ? "&aid=" + f : "")都是固定的。

斷點進到這個函數里面去看,可以看到這個函數是在頁面請求回來的,而每個直播間的這個函數體都是不同的,里面還有個變量需要保存,而這個變量名也不是固定的,但是仔細一看,這個變量和這個函數的三個參數形參名是有關系的,仔細看下(是不是很像):

搜一下,這個變量就在這個函數的下面,是個數組:

思路就有了:

get請求直播間,獲取ub98484234函數和變量代碼

運行這個函數獲取ratestream請求的參數

發送post請求獲取直播源地址

3. 模擬實現

服務器代碼(PHP版):

room.php

// 加以下代碼是為了防止跨域不能訪問

header('Content-Type: text/html;charset=utf-8');

header('Access-Control-Allow-Origin:*');

header('Access-Control-Allow-Methods:POST,GET,OPTIONS,DELETE');

header('Access-Control-Allow-Credentials: true');

header('Access-Control-Allow-Headers: Content-Type,Content-Length,Accept-Encoding,X-Requested-with, Origin');

$page = file_get_contents('https://m.douyu.com/'.$_GET['rid']);

$patt1 = '/function ub98484234([\w\W]*?)function k927cea2d4369/';

preg_match_all($patt1, $page, $rs);

echo str_replace("function k927cea2d4369","",$rs[0][0]);

url.php

// 加以下代碼是為了防止跨域不能訪問

header('Content-Type: text/html;charset=utf-8');

header('Access-Control-Allow-Origin:*');

header('Access-Control-Allow-Methods:POST,GET,OPTIONS,DELETE');

header('Access-Control-Allow-Credentials: true');

header('Access-Control-Allow-Headers: Content-Type,Content-Length,Accept-Encoding,X-Requested-with, Origin');

$post = array(

"v" => $_POST['v'],

"did" => 'b9f39b4e631b7973c103209800001631',

"tt" => $_POST['tt'],

"sign" => $_POST['sign'],

"ver" => 22011191,

"rid" => $_POST['rid'],

"rate" => -1

);

$data = curl_post('https://m.douyu.com/api/room/ratestream',$post);

echojson($data);

function curl_post($url,$post_data){

$ch = curl_init();

$headers = array(

'Accept' => '*/*',

'User-Agent' => 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/87.0.4280.88',

'Accept-Language' => 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',

'Content-Type' => 'application/x-www-form-urlencoded'

);

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_IPRESOLVE, 1);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data));

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

$output = curl_exec($ch);

curl_close($ch);

return $output;

}

function getParam($key, $default=''){

return trim($key && is_string($key) ? (isset($_POST[$key]) ? $_POST[$key] : (isset($_GET[$key]) ? $_GET[$key] : $default)) : $default);

}

function echojson($data){

header('Content-type: application/json');

$callback = getParam('callback');

if($callback){

die(htmlspecialchars($callback).'('.$data.')');

} else {

die($data);

}

}

前端html

let did = "b9f39b4e631b7973c103209800001631";

let tt = parseInt((new Date).getTime() / 1e3, 10);

let rate = -1;

$.ajax({

type: 'get',

url: 'https://xxx.com/player/douyu/room.php',

data: {rid:rid},

success: function(res){

eval(res);

let param = ub98484234(rid, did, tt) + "&ver=22011191&rid=" + rid + "&rate=" + rate ;

$.ajax({

type: 'post',

url: 'https://xxx.com/player/douyu/url.php',

data: param,

success: function(res){

console.log(res);

}

});

}

});script>

php文件放到自己的服務器,然后前端就可以請求到直播源地址:

4. 整合播放器

這里使用的是ckpayer,官網:https://www.ckplayer.com/

div>

var videoObject = {

container: '.video', //“#”代表容器的ID,“.”或“”代表容器的class

variable: 'player', //播放函數名稱,該屬性必需設置,值等于下面的new ckplayer()的對象

html5m3u8: true,

video: 'http://hlstct.douyucdn2.cn/dyliveflv1a/3637778raLSXdOdu_2000.m3u8?txSecret=0a8093b41cbff59ba0a56bc4ac39ebce&txTime=5ffacfc5&token=h5-douyu-0-3637778-8fe14247bbe00e18529094c5dcf70532&did=b9f39b4e631b7973c103209800001631&origin=tct&vhost=play2',

playbackRate: false

};

var player = new ckplayer(videoObject);//初始化播放器script>

秋名山車神來了!

至于整合就很簡單,在ajax獲取真實地址后,把url設置到ckplayer就好啦!

5. 【附】真實源地址

這里再提一句,真實無加密源地址的鏈接其實很短,如下:

http://tx2play1.douyucdn.cn/live/空白替換.flv?uuid=

空白部分就是加密地址的一部分,如加密地址是:http://hlstct.douyucdn2.cn/dyliveflv1a/3637778raLSXdOdu_2000.m3u8?txSecret=bc08048624cbe33fe6492c981a21f415&txTime=5ffadd7c&token=h5-douyu-0-3637778-f9f6e2e79ab5b1ba10762fe2412c8c6b&did=b9f39b4e631b7973c103209800001631&origin=tct&vhost=play2,那么空白部分就是3637778raLSXdOdu,結合起來就是:

http://tx2play1.douyucdn.cn/live/3637778raLSXdOdu.flv?uuid=

Tips: 直播間關播后需要重新獲取,關閉播放后也需要(否則會報錯時間校驗出錯)。而真實地址是不需要,但是官方也可能修改。

6. 總結

找到直播源很簡單,關鍵是調試并實現它,不要怕麻煩,本人能力有限,斗魚直播源花了三個晚上吧,各位如有更好的方法請留言討論,多多指教。

總結

以上是生活随笔為你收集整理的秋名山直播php源码,【斗鱼直播源】浏览器抓取真实直播源地址(纯前端JS PHP解析源码)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。