feat: 哔哩哔哩默认使用不用登录的 480p 防止出现问题

This commit is contained in:
zhiyu1998 2024-11-19 18:30:04 +08:00
parent 752e3346a8
commit 75601ae064
6 changed files with 26 additions and 18 deletions

View File

@ -12,7 +12,7 @@ import querystring from "querystring";
import puppeteer from "../../../lib/puppeteer/puppeteer.js";
import {
BILI_CDN_SELECT_LIST,
BILI_DEFAULT_INTRO_LEN_LIMIT,
BILI_DEFAULT_INTRO_LEN_LIMIT, BILI_RESOLUTION_LIST,
COMMON_USER_AGENT,
DIVIDING_LINE,
douyinTypeMap,
@ -998,8 +998,10 @@ export class tools extends plugin {
}
// =================默认下载方式=====================
try {
// 获取分辨率参数 QN如果没有默认使用 480p --> 32
const qn = BILI_RESOLUTION_LIST.find(item => item.value === this.biliResolution).qn || 32;
// 获取下载链接
const data = await getDownloadUrl(url, this.biliSessData);
const data = await getDownloadUrl(url, this.biliSessData, qn);
if (data.audioUrl != null) {
await this.downBili(tempPath, data.videoUrl, data.audioUrl);

View File

@ -20,7 +20,7 @@ biliDisplaySummary: false # 是否显示哔哩哔哩的总结
biliUseBBDown: false # 是否使用BBDown默认不开启开启后使用强劲的BBDown下载最高画质
biliCDN: 0 # 哔哩哔哩 CDN默认为0表示不使用
biliDownloadMethod: 0 # 哔哩哔哩的下载方式0默认使用原生稳定的下载方式如果你在乎内存可以使用轻量的wget和axel下载方式如果在乎性能可以使用Aria2下载
biliResolution: 1 # 哔哩哔哩的下载画质0为原画1为清晰画2为流畅画默认为0
biliResolution: 5 # 哔哩哔哩的下载画质默认480p因为不用登录参考 {BILI_RESOLUTION_LIST}
useLocalNeteaseAPI: false # 是否使用网易云解析自建API
useNeteaseSongRequest: false # 是否开启网易云点歌功能

View File

@ -184,13 +184,13 @@ export const BILI_DOWNLOAD_METHOD = Object.freeze([
]);
export const BILI_RESOLUTION_LIST = Object.freeze([
{ label: '8K 超高清', value: 0 },
{ label: '4K 超清', value: 1 },
{ label: '1080P 高码率', value: 2 },
{ label: '1080P 高清', value: 3 },
{ label: '720P 高清', value: 4 },
{ label: '480P 清晰', value: 5 },
{ label: '360P 流畅', value: 6 },
{ label: '8K 超高清', value: 0, qn: 127 },
{ label: '4K 超清', value: 1, qn: 120 },
{ label: '1080P 高码率', value: 2, qn: 112 },
{ label: '1080P 高清', value: 3, qn: 80 },
{ label: '720P 高清', value: 4, qn: 64 },
{ label: '480P 清晰', value: 5, qn: 32 },
{ label: '360P 流畅', value: 6, qn: 16 },
]);
export const YOUTUBE_GRAPHICS_LIST = Object.freeze([

View File

@ -10,7 +10,7 @@ export const BILI_SUMMARY = "https://api.bilibili.com/x/web-interface/view/concl
* https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/video/videostream_url.md
* @type {string}
*/
export const BILI_PLAY_STREAM = "https://api.bilibili.com/x/player/playurl?cid={cid}&bvid={bvid}&qn=64&fnval=16"
export const BILI_PLAY_STREAM = "https://api.bilibili.com/x/player/playurl?cid={cid}&bvid={bvid}&qn={qn}&fnval=16"
/**
* 动态信息

View File

@ -214,7 +214,7 @@ export function supportGuoba() {
field: "tools.biliResolution",
label: "bili最高分辨率",
bottomHelpMessage:
"哔哩哔哩的最高分辨率目前仅适用于开启BBDown后默认为1080p可以自行根据服务器进行调整",
"【开不开BBDown都同步】哔哩哔哩的最高分辨率默认为480p可以自行根据服务器进行调整",
component: "Select",
componentProps: {
options: BILI_RESOLUTION_LIST,

View File

@ -14,7 +14,6 @@ import {
BILI_SCAN_CODE_GENERATE,
BILI_VIDEO_INFO
} from "../constants/tools.js";
import { saveJsonToFile } from "./common.js";
import { mkdirIfNotExists } from "./file.js";
export const BILI_HEADER = {
@ -204,9 +203,9 @@ async function axelDownloadBFile(url, fullFileName, progressCallback, videoDownl
* @param SESSDATA
* @returns {Promise<any>}
*/
export async function getDownloadUrl(url, SESSDATA) {
export async function getDownloadUrl(url, SESSDATA, qn) {
const videoId = /video\/[^\?\/ ]+/.exec(url)[0].split("/")[1];
const dash = await getBiliVideoWithSession(videoId, "", SESSDATA);
const dash = await getBiliVideoWithSession(videoId, "", SESSDATA, qn);
// 获取关键信息
const { video, audio } = dash;
const videoData = video?.[0];
@ -327,13 +326,20 @@ export async function getBiliAudio(bvid, cid) {
}))
}
export async function getBiliVideoWithSession(bvid, cid, SESSDATA) {
export async function getBiliVideoWithSession(bvid, cid, SESSDATA, qn) {
if (!cid) {
cid = await fetchCID(bvid).catch((err) => console.log(err))
cid = await fetchCID(bvid).catch((err) => logger.error(err))
}
logger.info(`[R插件][BILI请求审计]${ BILI_PLAY_STREAM
.replace("{bvid}", bvid)
.replace("{cid}", cid)
.replace("{qn}", qn) }`);
// 返回一个fetch的promise
return (new Promise((resolve, reject) => {
fetch(BILI_PLAY_STREAM.replace("{bvid}", bvid).replace("{cid}", cid), {
fetch(BILI_PLAY_STREAM
.replace("{bvid}", bvid)
.replace("{cid}", cid)
.replace("{qn}", qn), {
headers: {
...BILI_HEADER,
Cookie: `SESSDATA=${ SESSDATA }`