【Bilibili直播源】瀏覽器抓取真實直播源地址(純前端JS & PHP解析原始碼)

語言: CN / TW / HK

0. 前言

之前只知道B站是點播的,很多up主可以上傳自己的視訊,也沒看過B站的直播,現在來抓一下它的直播源。我們依然從瀏覽器分析,授人以魚不如授人以漁,教大家如何去爬取直播源,就算失效了也不怕。
在這裡插入圖片描述

1. 直播源查詢

開啟其中一個直播間,F12先檢視地址是否是請求的頁面帶入的,搜尋發現沒有(m3u8/flv),那麼就是ajax來的了:
在這裡插入圖片描述
來檢查下ajax,發現第一個ajax返回了地址:
在這裡插入圖片描述
經測試,只需要將 hostbase_url 的前半部分拼接起來就行了,不需要後面的引數,用線上m3u8測試網站測試播放成功:
https://d1--cn-gotcha204.bilivideo.com/live-bvc/711838/live_222103174_4331333_1500/index.m3u8
在這裡插入圖片描述





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

既然找到了請求,那麼模擬就方便了,先來看下請求地址和引數:
Request Method: GET (挺奇怪的,它這裡是GET請求)
Request URL: https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo
Query String:


  • room_id: 8178490
  • no_playurl: 0
  • mask: 1
  • qn: 0
  • platform: web
  • protocol: 0,1
  • format: 0,2
  • codec: 0,1

一眼看過去除了room_id其他的都是固定的就行了,這個太簡單了。

先用Postman測試一下,完全OK:
在這裡插入圖片描述

3. 模擬實現

伺服器原始碼(PHP):

<?php

header('Content-Type:application/json; 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');

$params = [
	"room_id" => $_POST["room_id"],
	"no_playurl" => 0,
	"mask" => 0,
	"qn" => 0,
	"platform" => "web",
	"protocol" => "0,1",
	"format" => "0,2",
	"codec" => "0,1",
];

$res = file_get_contents('https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo?' . http_build_query($params));

echo $res;
exit;

前端H5:

$.ajax({
   
   
    type: 'post',
    url: 'http://xxx/player/bilibli/url.php',
    data: {
   
   
        room_id: 8178490,
    },
    success: function(res){
   
   
        var data = res.data.playurl_info.playurl.stream[1].format[0].codec[1];
        var url = data.url_info[0].host + data.base_url.split("?")[0];
        console.log(url);
    }
});

控制檯就打印出了直播源地址:https://d1--cn-gotcha204.bilivideo.com/live-bvc/481520/live_222103174_4331333_1500/index.m3u8

4. 整合播放器

這個大家參照前幾篇自行處理吧,可以使用ckplayervideojs等,我測試的播放器載入很慢,還是直接使用VLC media player最快

5. 總結

B站的直播源不是很難,引數也沒有加密的,比其他網站簡單,關鍵是找到直播源的位置,其他就好辦了。

在這裡插入圖片描述