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 puppeteer from "../../../lib/puppeteer/puppeteer.js";
import { import {
BILI_CDN_SELECT_LIST, BILI_CDN_SELECT_LIST,
BILI_DEFAULT_INTRO_LEN_LIMIT, BILI_DEFAULT_INTRO_LEN_LIMIT, BILI_RESOLUTION_LIST,
COMMON_USER_AGENT, COMMON_USER_AGENT,
DIVIDING_LINE, DIVIDING_LINE,
douyinTypeMap, douyinTypeMap,
@ -998,8 +998,10 @@ export class tools extends plugin {
} }
// =================默认下载方式===================== // =================默认下载方式=====================
try { 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) { if (data.audioUrl != null) {
await this.downBili(tempPath, data.videoUrl, data.audioUrl); await this.downBili(tempPath, data.videoUrl, data.audioUrl);

View File

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

View File

@ -184,13 +184,13 @@ export const BILI_DOWNLOAD_METHOD = Object.freeze([
]); ]);
export const BILI_RESOLUTION_LIST = Object.freeze([ export const BILI_RESOLUTION_LIST = Object.freeze([
{ label: '8K 超高清', value: 0 }, { label: '8K 超高清', value: 0, qn: 127 },
{ label: '4K 超清', value: 1 }, { label: '4K 超清', value: 1, qn: 120 },
{ label: '1080P 高码率', value: 2 }, { label: '1080P 高码率', value: 2, qn: 112 },
{ label: '1080P 高清', value: 3 }, { label: '1080P 高清', value: 3, qn: 80 },
{ label: '720P 高清', value: 4 }, { label: '720P 高清', value: 4, qn: 64 },
{ label: '480P 清晰', value: 5 }, { label: '480P 清晰', value: 5, qn: 32 },
{ label: '360P 流畅', value: 6 }, { label: '360P 流畅', value: 6, qn: 16 },
]); ]);
export const YOUTUBE_GRAPHICS_LIST = Object.freeze([ 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 * https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/video/videostream_url.md
* @type {string} * @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", field: "tools.biliResolution",
label: "bili最高分辨率", label: "bili最高分辨率",
bottomHelpMessage: bottomHelpMessage:
"哔哩哔哩的最高分辨率目前仅适用于开启BBDown后默认为1080p可以自行根据服务器进行调整", "【开不开BBDown都同步】哔哩哔哩的最高分辨率默认为480p可以自行根据服务器进行调整",
component: "Select", component: "Select",
componentProps: { componentProps: {
options: BILI_RESOLUTION_LIST, options: BILI_RESOLUTION_LIST,

View File

@ -14,7 +14,6 @@ import {
BILI_SCAN_CODE_GENERATE, BILI_SCAN_CODE_GENERATE,
BILI_VIDEO_INFO BILI_VIDEO_INFO
} from "../constants/tools.js"; } from "../constants/tools.js";
import { saveJsonToFile } from "./common.js";
import { mkdirIfNotExists } from "./file.js"; import { mkdirIfNotExists } from "./file.js";
export const BILI_HEADER = { export const BILI_HEADER = {
@ -204,9 +203,9 @@ async function axelDownloadBFile(url, fullFileName, progressCallback, videoDownl
* @param SESSDATA * @param SESSDATA
* @returns {Promise<any>} * @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 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 { video, audio } = dash;
const videoData = video?.[0]; 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) { 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 // 返回一个fetch的promise
return (new Promise((resolve, reject) => { 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: { headers: {
...BILI_HEADER, ...BILI_HEADER,
Cookie: `SESSDATA=${ SESSDATA }` Cookie: `SESSDATA=${ SESSDATA }`