bilibili直播去遮挡
// ==UserScript==
// @name bilibili直播去遮挡
// @author 醒悦哥哥
// @description 浏览器去除直播页面遮挡块。绕过b站强制直播姬开播限制,修复OBS无法获取推流码的问题。
// @version 2.0.0
// @match https://link.bilibili.com/p/center/index*
// @match https://live.bilibili.com/*
// @icon https://jujufatu.com/file/90dca92bc72742cc08214.png
// ==/UserScript==
(function () {
'use strict';
// 网页端观看去除遮挡块
// 获取 id 为 live-player 的元素
const targetNode = document.getElementById('live-player');
// 确保元素存在
if (targetNode) {
// 配置 MutationObserver 选项
const config = { childList: true, subtree: true };
// 创建回调函数,处理DOM变化
const callback = function (mutationsList) {
for (let mutation of mutationsList) {
if (mutation.type === 'childList') {
// 检查是否存在目标元素
const targetElement = document.getElementById('web-player-module-area-mask-panel');
if (targetElement) {
// 删除目标元素
targetElement.remove();
console.log('已去除遮挡');
}
}
}
};
// 创建一个 MutationObserver 实例
const observer = new MutationObserver(callback);
// 开始观察目标节点
observer.observe(targetNode, config);
} else {
console.info('当前未发现遮挡');
}
// 主播网页obs开播避免强制直播姬开播遮挡
// 拦截XMLHttpRequest的open方法
const originalOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function (method, url) {
// 判断是否是目标请求
if (method === 'POST' && url.includes('room/v1/Room/startLive')) {
// 拦截send方法以修改请求体
const originalSend = this.send;
this.send = function (body) {
// 将请求体转换为键值对
const params = new URLSearchParams(body);
// 修改platform参数
params.set('platform', 'android_link');
// 用修改后的请求体调用原始的send方法
originalSend.call(this, params.toString());
};
}
// 调用原始的open方法
originalOpen.apply(this, arguments);
};
})();